2.移植3.4內核-支持燒寫yaffs2,裁剪內核並制作補丁


上章-制作文件系統,並使內核成功啟動jffs2文件系統

本章主要內容如下:

  • 1)使內核支持yaffs2文件系統
  • 2)裁剪內核
  • 3)制作內核補丁

 


 

 

1.首先獲取yaffs2源碼(參考git命令使用詳解)

cd /work/nfs_root

git clone git@github.com:lifeyx/yaffs2.git
//若下載出現error:403,可以試試vi /etc/resolv.conf,將nameserver地址改為: 114.114.114.114

 

2.將yaffs2源碼來配置到內核里(使內核支持yaffs2)

vi /work/nfs_root/yaffs2/README-linux

找到以下幾段話:

參考上圖:

/*給內核打補丁*/
cd /work/nfs_root/yaffs2/
./patch-ker.sh  c m /work/system/linux-3.4.2//c:將yffs2文件夾copy到linux-3.4.2/fs里, m:指定多版本


/*通過menuconfig,來使內核支持yaffs2*/
cd /work/system/linux-3.4.2/
make menuconfig            

搜索yaffs,找到位於:

  • -> File systems
  •       -> Miscellaneous filesystems (MISC_FILESYSTEMS [=y])
  •              <*>   yaffs2 file system support                      //按Y鍵,使內核支持yaffs2

3.然后make uImage

如下圖所示,出現很多錯誤:

 

如上圖,問題都是出在fs/yaffs2/下,很多error都講述:調用的成員名,在struct mtd_info結構體里沒有定義.

接下來我們便將fs/yaffs2文件夾添加到內核3.4的si工程中.

3.1然后進入yaffs2/yaffs_vfs.c,第2514行:

 然而發現struct mtd_info *mtd的結構體mtd_info定義的是_sync成員,如下圖所示:

 

3.2 修改代碼

所以接下來只有遇到與struct mtd_info有關的error,都在成員前加上: _

比如:

  • yaffs_vfs.c文件2514~2515行的mtd->sync 改為: mtd->_sync
  • yaffs_vfs.c文件2702行的mtd->erase改為: mtd->_erase
  • yaffs_vfs.c文件2703行的mtd->read改為: mtd->_read
  • ... ...
  • 並將yaffs_vfs.c的第2967行的  root = d_alloc_root(inode);改為: root = d_make_root(inode);

全部修改后,再次make uImage,接下來便制作yaffs2文件系統

4.制作yaffs2文件系統

由於上章-我們制作了文件系統,名為fs_mini_mdev_new,所以直接使用mkyaffs2image工具制作:

mkyaffs2image  fs_mini_mdev_new  fs_mini_mdev_new.yaffs2 

然后通過uboot來燒寫yaffs2、燒寫uImage:

最后啟動yaffs2成功:

 

 

5.內核裁剪

為什么要裁剪內核?

因為mtd的kernel分區只有2M大,而實際內核有2.37MB,所以需要裁剪到小於2M(或者修改mtd分區值)

5.1首先裁剪內核里無關的CPU/單板文件

1)通過vi .config,然后搜索2440,如下圖所示:

 

 

2)然后參考上圖,make menuconfig

進入System Type ---> SAMSUNG S3C24XX SoCs Support:

 

 

如上圖所示,CPU下只選擇2440,單板文件下只選擇SMDK2440以及MINI2440相關

5.2 裁剪無關的文件系統ext2、ext3、ext4

重新make menuconfig,進入File systems,去掉:

< > Second extended fs support               //ext2

< > Ext3 journalling file system support 

< > The Extended 4 (ext4) filesystem

5.3裁剪光盤文件系統CD-ROM

進入File systems---> CD-ROM/DVD Filesystems,去掉:

< > ISO 9660 CDROM file system support         

 

5.4裁剪不常用的雜項文件系統

進入File systems---> Miscellaneous filesystems,去掉:

< >   Compressed ROM file system support (cramfs)    // cramfs壓縮文件系統

[ ]     Include support for ZLIB compressed file systems //zlib壓縮文件系統

< >   ROM file system support                            // Romfs

5.5  通過內核啟動信息來裁剪

如下圖所示,內核啟動時,看到初始化了PS2鼠標驅動

 

 

由於,我們2440板子只有USB接口,所以需要裁剪掉PS2鼠標驅動:

重新make menuconfig,進入Device Drivers-> Input device support,去掉:

[ ]     Provide legacy /dev/psaux device    //PS2鼠標鼠標指向的鼠標設備文件

[ ]   Mice  --->                   //其它各種鼠標驅動,包括PS2鼠標、I2C鼠標、觸摸板等

5.6 通過.config文件的內容來裁剪

1)通過vi .config,找到如下圖所示,由於CONFIG_TOUCHSCREEN_USB(USB觸摸板)很少見到,所以去掉

 

 

2) USB-based Watchdog Cards(基於usb的看門狗卡)

如下圖所示,這個看門狗卡很少用到,所以去掉CONFIG_SSB_POSSIBLE

 

 

3) Sonics Silicon Backplane (Sonics公司下的Silicon底板)

如下圖所示,這個公司的產品沒有用到,所以去掉CONFIG_BCMA_POSSIBLE

 

 

4) 找到如下圖所示,由於CONFIG_SND_USB (USB聲卡)沒用到,所以去掉

 

 

5)去掉CONFIG_USB_LIBUSUAL,沒用到

 

 

5.7 最后通過5.6小節查找的裁剪內容,來make menuconfig

1)去掉CONFIG_TOUCHSCREEN_USB

-> Device Drivers                                                                    

  -> Input device support

    -> Generic input layer

       -> Touchscreens

<*>   Samsung S3C2410/generic touchscreen input driver   //加上自帶的觸摸屏驅動

< >   USB Touchscreen Driver                                              //去掉USB觸摸屏驅動 

2)去掉CONFIG_SSB_POSSIBLE

搜索如下圖所示,該宏是被別的選項設置,所以去掉不了:

 

3)去掉CONFIG_BCMA_POSSIBLE

該宏也沒找到,所以去掉不了

4)去掉CONFIG_SND_USB

-> Device Drivers

-> Sound card support

  -> Advanced Linux Sound Architecture

[ ]   USB sound devices              //去掉USB聲卡驅動

5)去掉CONFIG_USB_LIBUSUAL

-> Device Drivers 

-> USB support

[ ]   The shared table of common (or usual) storage devices       

6.給內核制作補丁

制作補丁之前,首先需要make distclean清除所有的配置文件,也包括了menuconfig菜單

而menuconfig菜單是通過讀取.config文件來生成的.

所以我們需要保存.config文件

步驟如下:

cp .config  config_ok            //保存到config_ok文件
make distclean                  
cd ..

mv linux-3.4.2  linux-3.4.2_new  //更改文件名
tar -xjf linux-3.4.2.tar.bz2             //解壓需要比較的源文件

diff -urN linux-3.4.2 linux-3.4.2_new > linux-3.4.2_new.patch    //生成補丁文件linux-3.4.2_new.patch

 

未完待續,下章來移植以前2.6內核的驅動到3.4內核

 

 

 

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM