1. 程式人生 > >linux4.10.8 內核移植(二)---初步裁剪、分區修改和文件系統

linux4.10.8 內核移植(二)---初步裁剪、分區修改和文件系統

如何 搜索 錯誤 命令 device 查看源碼 static .cn lock

一、初步裁剪

  在內核根目錄下 執行: 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 結構:

 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 modules 15 * 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 };

  編譯內核,燒寫測試:

  技術分享

  nand分區已經改過來了。

三、文件系統

  燒錄進去的內核系統還有如下錯誤:

 1 VFS: Cannot open root device "dev/mtdblock3" or unknown-block(0,0): error -6
 2 Please append a correct "root=" boot option; here are the available partitions:
 3 0100            4096 ram0 
 4  (driver?)
 5 0101            4096 ram1 
 6  (driver?)
 7 0102            4096 ram2 
 8  (driver?)
 9 0103            4096 ram3 
10  (driver?)
11 0104            4096 ram4 
12  (driver?)
13 0105            4096 ram5 
14  (driver?)
15 0106            4096 ram6 
16  (driver?)
17 0107            4096 ram7 
18  (driver?)
19 0108            4096 ram8 
20  (driver?)
21 0109            4096 ram9 
22  (driver?)
23 010a            4096 ram10 
24  (driver?)
25 010b            4096 ram11 
26  (driver?)
27 010c            4096 ram12 
28  (driver?)
29 010d            4096 ram13 
30  (driver?)
31 010e            4096 ram14 
32  (driver?)
33 010f            4096 ram15 
34  (driver?)
35 1f00             256 mtdblock0 
36  (driver?)
37 1f01             128 mtdblock1 
38  (driver?)
39 1f02            2048 mtdblock2 
40  (driver?)
41 1f03          256640 mtdblock3 
42  (driver?)
43 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 中。

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,搜索此調用:

  技術分享

  技術分享

  技術分享

  技術分享

  技術分享

  我們的內核打印的是殺死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 內核移植(二)---初步裁剪、分區修改和文件系統