Linux裁剪是否算修改源码,linux4.10.8 内核移植(二)---初步裁剪、分区修改和文件系统...

一、初步裁剪

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

Linux裁剪是否算修改源码,linux4.10.8 内核移植(二)---初步裁剪、分区修改和文件系统..._第1张图片

1.1 system type裁剪

Linux裁剪是否算修改源码,linux4.10.8 内核移植(二)---初步裁剪、分区修改和文件系统..._第2张图片

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

Linux裁剪是否算修改源码,linux4.10.8 内核移植(二)---初步裁剪、分区修改和文件系统..._第3张图片

1.2 文件系统裁剪

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

Linux裁剪是否算修改源码,linux4.10.8 内核移植(二)---初步裁剪、分区修改和文件系统..._第4张图片

1.3 device driver裁剪

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

1.3.1 Network device support

c9faf1defc962591755587ba99323e41.png

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

进入 Ethernet driver support:

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

Linux裁剪是否算修改源码,linux4.10.8 内核移植(二)---初步裁剪、分区修改和文件系统..._第5张图片

网络设备驱动基本上完了

1.3.2 Sound card support

声卡支持。

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

1.3.3 HID bus support

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

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

二、分区修改

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

0cab71a9001083d9b0174c5268a1af1a.png

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

Linux裁剪是否算修改源码,linux4.10.8 内核移植(二)---初步裁剪、分区修改和文件系统..._第6张图片

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

0d51baaf63ebaf818a0362c4384f5d0f.png

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

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

搜索 u-boot,定位代码:

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

Linux裁剪是否算修改源码,linux4.10.8 内核移植(二)---初步裁剪、分区修改和文件系统..._第7张图片

修改代码的 mtd_partiton 结构:

1 static struct mtd_partition mini2440_default_nand_part[] __initdata ={2 [0] ={3 .name = "u-boot",4 .size =SZ_256K,5 .offset = 0,6 },7 [1] ={8 .name = "params",9 .size =SZ_128K,10 .offset =MTDPART_OFS_APPEND,11 },12 [2] ={13 .name = "kernel",14 /*5 megabytes, for a kernel with no modules15 * or a uImage with a ramdisk attached*/

16 .size =SZ_2M,17 .offset =MTDPART_OFS_APPEND,18 },19 [3] ={20 .name = "rootfs",21 .offset =MTDPART_OFS_APPEND,22 .size =MTDPART_SIZ_FULL,23 },24 };

编译内核,烧写测试:

108514ab636619e13b9106d8f85b5a6d.png

nand分区已经改过来了。

三、文件系统

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

1 VFS:Cannot open root device "dev/mtdblock3" or unknown-block(0,0): error -6

2Please append a correct "root=" boot option; here are the available partitions:3 0100 4096ram04 (driver?)5 0101 4096ram16 (driver?)7 0102 4096ram28 (driver?)9 0103 4096ram310 (driver?)11 0104 4096ram412 (driver?)13 0105 4096ram514 (driver?)15 0106 4096ram616 (driver?)17 0107 4096ram718 (driver?)19 0108 4096ram820 (driver?)21 0109 4096ram922 (driver?)23 010a 4096ram1024 (driver?)25 010b 4096ram1126 (driver?)27 010c 4096ram1228 (driver?)29 010d 4096ram1330 (driver?)31 010e 4096ram1432 (driver?)33 010f 4096ram1534 (driver?)35 1f00 256mtdblock036 (driver?)37 1f01 128mtdblock138 (driver?)39 1f02 2048mtdblock240 (driver?)41 1f03 256640mtdblock342 (driver?)43 Kernel panic - not syncing: VFS: Unable to mount root fs on unknown-block(0,0)

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

e7ce4e41e419d03b2acff73f16175668.png

3.1 移植jffs2 文件系统

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

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

a0cd7512aa498f4f609b365ba26e21a3.png

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

6c58f080e6bf67f8b20de4da6ca7673d.png

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

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

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

4d6dd8ec664385e04e9b3216ce1e2a0a.png

5d5d6d6fe3bc40d1132f6c2ee679124f.png

1f0c49993e015025146d7e3ee5813783.png

9d30cfbafb69ca906d8ff050c5515bdd.png

0940c7ea10282259c1d22254ed61bd26.png

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

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

Linux裁剪是否算修改源码,linux4.10.8 内核移植(二)---初步裁剪、分区修改和文件系统..._第8张图片

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

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

make menuconfig

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

7ccf92da6e2995d1aff9af2705117b23.png

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

d696cd2002e04a2f5edb7e5767cae321.png

内核已经正常启动了。

22572cf31656be5e0a6ddf67e7a4f2b8.png

Linux裁剪是否算修改源码,linux4.10.8 内核移植(二)---初步裁剪、分区修改和文件系统..._第9张图片

3.2 移植yaffs 文件系统

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

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

a08a105175654e8db53fe6afcd3832a6.png

yaffs2就是源码。

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

Linux裁剪是否算修改源码,linux4.10.8 内核移植(二)---初步裁剪、分区修改和文件系统..._第10张图片

执行打补丁命令:

67a1b3c592b259ae3460abfa31c08f74.png

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

27151e503fe3e9a5340affa44a4e86cd.png

yaffs2已经安装进去

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

Linux裁剪是否算修改源码,linux4.10.8 内核移植(二)---初步裁剪、分区修改和文件系统..._第11张图片

进入选项中进行配置:

a56063912fcdc576c09ac8d275674540.png

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

Linux裁剪是否算修改源码,linux4.10.8 内核移植(二)---初步裁剪、分区修改和文件系统..._第12张图片

编译调试:

43617fe6e6d98b566154ec474c9449f1.png

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

Linux裁剪是否算修改源码,linux4.10.8 内核移植(二)---初步裁剪、分区修改和文件系统..._第13张图片

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

ffafde60a29585d17026c8cdae4f6019.png

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

Linux裁剪是否算修改源码,linux4.10.8 内核移植(二)---初步裁剪、分区修改和文件系统..._第14张图片

已经没有任何错误了。

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

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

Linux裁剪是否算修改源码,linux4.10.8 内核移植(二)---初步裁剪、分区修改和文件系统..._第15张图片

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

至此文件系统修改完成。

原文:http://www.cnblogs.com/kele-dad/p/7086929.html

你可能感兴趣的:(Linux裁剪是否算修改源码)