一、初步裁剪

  在内核根目录下 执行: make menuconfig

  

1.1 system type裁剪

  

  选择 SAMSUNG S3C24XX SoCs Support 进入其中,这里是配置我们的单板,取消与2440无关的配置:

  

1.2 文件系统裁剪

  以模块加入的可以保留,其他的看情况进行裁剪。

  

1.3 device driver裁剪

  里面有些驱动不是我们所需要的,我们的目标板根本不支持那些的功能就可以裁剪掉:

1.3.1 Network device support

  

  USB适配器我们并不支持,去掉。

  进入 Ethernet driver support:

  里面除了DM9000的支持,基本上全都可以去掉:

  

  网络设备驱动基本上完了

1.3.2 Sound card support

  声卡支持。

  设备上没有声卡,全部去掉

1.3.3 HID bus support

  这个应该是鼠标键盘之类的,而且单板上也没有HID总线,改成模块加入。

基本上就先改动这些,烧写一遍,查看下,然后根据打印的信息进行裁剪配置。

二、分区修改

  裁剪出来的差不多2M左右

  

  装入板子中,发现了很多错

  

  首先就是磁盘分区问题,磁盘分区和在u-boot中的分区不一致。

  

  这个分区虽然也是256M的总大小,但是和我们在u-boot中的分区差别很打。

  由这里看出,我们的磁盘分区是有问题的,

  搜索 u-boot,定位代码:

  Mach-mini2440.c (arch\arm\mach-s3c24xx)

  

  修改代码的 mtd_partiton 结构:

 static struct mtd_partition mini2440_default_nand_part[] __initdata = {
[] = {
.name = "u-boot",
.size = SZ_256K,
.offset = ,
},
[] = {
.name = "params",
.size = SZ_128K,
.offset = MTDPART_OFS_APPEND,
},
[] = {
.name = "kernel",
/* 5 megabytes, for a kernel with no modules
* or a uImage with a ramdisk attached */
.size = SZ_2M,
.offset = MTDPART_OFS_APPEND,
},
[] = {
.name = "rootfs",
.offset = MTDPART_OFS_APPEND,
.size = MTDPART_SIZ_FULL,
},
};

  编译内核,烧写测试:

  

  nand分区已经改过来了。

三、文件系统

  烧录进去的内核系统还有如下错误:

 VFS: Cannot open root device "dev/mtdblock3" or unknown-block(0,0): error -6
Please append a correct "root=" boot option; here are the available partitions:
ram0
(driver?)
ram1
(driver?)
ram2
(driver?)
ram3
(driver?)
ram4
(driver?)
ram5
(driver?)
ram6
(driver?)
ram7
(driver?)
ram8
(driver?)
ram9
(driver?)
010a ram10
(driver?)
010b ram11
(driver?)
010c ram12
(driver?)
010d ram13
(driver?)
010e ram14
(driver?)
010f ram15
(driver?)
1f00 mtdblock0
(driver?)
1f01 mtdblock1
(driver?)
1f02 mtdblock2
(driver?)
1f03 mtdblock3
(driver?)
Kernel panic - not syncing: VFS: Unable to mount root fs on unknown-block(0,0)

  原先在u-boot移植中,里面烧录的是yaffs文件系统,可以查看.config文件,看看是否支持 yaffs,搜索不到此项。但是支持jffs2文件系统:

  

3.1 移植jffs2 文件系统

  jffs2文件系统的制作如下:http://www.cnblogs.com/kele-dad/p/7096273.html

  烧录进去之后,有提示错误:init 进程被杀死。

  

  定位代码到 exit.c(kernel/) 函数中

  

  此条打印是在函数:find_child_reaper 中。

 do_exit(code)
exit_notify(tsk, group_dead);
forget_original_parent(tsk, &dead);
reaper = find_new_reaper(father, reaper);

  层层调用,最顶上的是 do_exit,搜索此调用:

  

  

  

  

  

  我们的内核打印的是杀死init进程,错误码为 4

  我们可以通过 SIGKILL 查找到 4号错误码是SIGILL。

  

  致命信号4(SIGILL):执行了非法指令. 通常是因为可执行文件本身出现错误, 或者试图执行数据段. 堆栈溢出时也有可能产生这个信号。

  我们使用的 编译器后缀为 gnueabi,使用的是eabi接口。内核也要支持此接口。

  make menuconfig

  然后在 kernel feature 中选上下面的选项:

  

  保存,退出,编译内核,烧写文件系统和内核:

  

  内核已经正常启动了。

  

  

3.2 移植yaffs 文件系统

  linux 4.10.8 并不支持yaffs文件系统,要去 yaffs的官网去下载yaffs的源码

  获取源码:git clone git://www.aleph1.co.uk/yaffs2

  

  yaffs2就是源码。

  在源码的  README-linux-patch 文件中已经说明了,如何将 yaffs安装进linux 内核中去

  

  执行打补丁命令:

  

  进入内核,查看fs 目录下的文件:

  

  yaffs2已经安装进去

  执行 make menuconfig 命令,搜索yaffs 可以看到yaffs  配置在哪里。

  

  进入选项中进行配置:

  

  选上。然后选择默认配置即可。

  

  编译调试:

  

  有一个提醒,result 未初始化。

  

  查看源码可以知道,result 并未赋值,想取消这个提醒,可以初始化一下result,设置result 量,不过首先要知道 YAFFS_OK 配置的值是多少。搜索一下 YAFFS_OK。

  

  可以看到 YAFFS_OK 定义为1,那么我们可以定义 result = 0。改变后,再次编译。

  

  已经没有任何错误了。

  然后制作yaffs 文件系统:http://www.cnblogs.com/kele-dad/p/7105075.html

  第一次制作有点小问题,因为使用的是u-boot 2016 ,所以当初的修改没完善,要修改u-boot。

  

  修改636行,加入换色部分的代码。

  至此文件系统修改完成。

  

  

  

linux4.10.8 内核移植(二)---初步裁剪、分区修改和文件系统的更多相关文章

  1. linux4.10.8 内核移植(三)---裁剪内核

    一.裁剪内核 1.1 第一次修改 现在的内核大小为2.8M左右,要裁剪到2.0M以下,毕竟给内核分区就只有2.0M. 这两个设备我们没有,裁剪掉. 进入make menuconfig中,搜索mouse ...

  2. linux4.10.8 内核移植(一)---环境搭建及适配单板。

    一.环境搭建 源码包下载:git clone https://www.kernel.org/pub/linux/kernel/v4.x/linux-4.10.8.tar.gz 或者直接去kernel. ...

  3. linux4.10.8 内核移植(四)---字符设备驱动_led驱动程序

    一.字符设备驱动程序介绍 app里面用 open.read.write等等函数出来操作底层硬件.驱动程序中也有对应的xxx_open等函数.怎么找到驱动程序中的函数依赖于驱动程序框架. 二.搭建驱动程 ...

  4. u-boot移植(十三)---代码修改---支持文件系统及补丁制作

    一.烧写文件系统 1.1 jffs2烧写 1.下载文件系统:tftp 30000000 fs_mini_mdev.jffs2 2.擦除文件的块:nand erase.part rootfs 3.烧入文 ...

  5. 【转】 linux内核移植和网卡驱动(二)

    原文网址:http://blog.chinaunix.net/uid-29589379-id-4708911.html 一,内核移植步骤: 1, 修改顶层目录下的Makefile ARCH       ...

  6. linux内核(二)内核移植(DM365-DM368开发攻略——linux-2.6.32的移植)

    一.介绍linux-2.6.32: Linux-2.6.32的网上介绍:增添了虚拟化内存 de-duplicacion.重写了 writeback 代码.改进了 Btrfs 文件系统.添加了 ATI ...

  7. ARM-Linux内核移植之(二)——Linux2.6.22内核移植

    平台:mini2440  交叉工具链:arm-linux-gcc-4.3.2 一.内核移植基本知识 移植内核也叫构建BSP(boardsupprot packet).BSP的作用有两个:一是为内核运行 ...

  8. 向tiny6410中移植中移植linux-4.5.1内核(最新)

    下载linux-4.5.1.tar.gz 解压在任意目录下.我解压在/home/tiny6410/ # tar xvzf linux-4.5.1.tar.gz # cd linux-4.5.1/ 修改 ...

  9. 基于tiny4412的Linux内核移植(支持device tree)(三)

    作者信息 作者: 彭东林 邮箱:pengdonglin137@163.com QQ:405728433 平台简介 开发板:tiny4412ADK + S700 + 4GB Flash 要移植的内核版本 ...

随机推荐

  1. sort和uniq的应用实例

    sort 排序 uniq 1.语法:sort [option]... [file]... 2.选项:-k key,关键子,指定以那个列来排序.如果不指定,默认将正行作为关键字排序-n 对数值排序.默认 ...

  2. CF527D

    题面 这题还挺水的,把那个式子稍微变形一下就可以的到xi-wi>=xj+wj,易知:若把每个点看做一条线段,左端点是xi-wi,右端点是xi+wi,就只要求最多的不重叠的线段数就可以了,然后就是 ...

  3. poj3320(尺取法)

    题目大意:给你一串数字,找出最小的能够覆盖所有出现过的数字的区间长度: 解题思路:依旧是尺取法,但要用map标记下出现过的书: 代码:别用cin输入: #include<iostream> ...

  4. Uva1001-floyd算法-建图

    给出一些球,球内的时间为零,球之间的速度为10每单位. 给两个点,求最短时间. 把每一个球当做点,球间的距离就是floyd的d数组.之后跑一遍floyd wa了两发因为d数组定义成int了 #incl ...

  5. 牛客国庆集训派对Day2 H 期望

    小贝喜欢玩卡牌游戏.某个游戏体系中共有N种卡牌,其中M种是稀有的.小贝每次和电脑对决获胜之后都会有一个抽卡机会,这时系统会随机从N种卡中选择一张给小贝.普通卡可能多次出现,而稀有卡牌不会被重复抽到.小 ...

  6. Qtree3题解(树链剖分+线段树+set)

    外话:最近洛谷加了好多好题啊...原题入口 这题好像是SPOJ的题,挺不错的.看没有题解还是来一篇... 题意 很易懂吧.. 题解 我的做法十分的暴力:树链剖分(伪)+线段树+ std :: set ...

  7. 集成源码深度剖析:Fescar x Spring Cloud

    Fescar 简介 常见的分布式事务方式有基于 2PC 的 XA (e.g. atomikos),从业务层入手的 TCC( e.g. byteTCC).事务消息 ( e.g. RocketMQ Hal ...

  8. CF1114D Flood Fill(DP)

    题目链接:CF原网 题目大意:$n$ 个方块排成一排,第 $i$ 个颜色为 $c_i$.定义一个颜色联通块 $[l,r]$ 当且仅当 $l$ 和 $r$ 之间(包括 $l,r$)所有方块的颜色相同.现 ...

  9. [ZJOI2007]矩阵游戏——非常漂亮的二分图转化

    题意: 小 Q 是一个非常聪明的孩子,除了国际象棋,他还很喜欢玩一个电脑益智游戏――矩阵游戏.矩阵游戏在一个 N×N 黑白方阵进行(如同国际象棋一般,只是颜色是随意的).每次可以对该矩阵进行两种操作: ...

  10. eclipse如何以指定JDK启动

    eclipse如何以指定JDK启动 2018年01月11日 14:30:23 buerc 阅读数:11179   版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csd ...