zoukankan      html  css  js  c++  java
  • 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内核

     

     

     

     

     

     

  • 相关阅读:
    待遇与福利基本词汇/句型
    什么是成功?
    申请休假常用句型
    到底什么是快乐?
    复试注意事项(二)
    php5中php.ini 设置教程中文版
    lamp环境安装shell脚本
    如何解决NAT转发问题
    Linux下PHP扩展pdo_mysql
    PHP缓存原理以及smarty缓存
  • 原文地址:https://www.cnblogs.com/lifexy/p/8360970.html
Copyright © 2011-2022 走看看