上章-制作文件系统,并使内核成功启动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.//c:将yffs2文件夹copy到linux-3.4.2/fs里, m:指定多版本 /*通过menuconfig,来使内核支持yaffs2*/
cd /work/system/linux-3.4./
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文件行的mtd->erase改为: mtd->_erase
  • 将yaffs_vfs.c文件行的mtd->read改为: mtd->_read
  • ... ...
  • 并将yaffs_vfs.c的第行的  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. linux-3.4.2_new //更改文件名
tar -xjf linux-3.4..tar.bz2 //解压需要比较的源文件 diff -urN linux-3.4. linux-3.4.2_new > linux-3.4.2_new.patch //生成补丁文件linux-3.4.2_new.patch

未完待续,下章来移植以前2.6内核的驱动到3.4内核

2.移植3.4内核-支持烧写yaffs2,裁剪内核并制作补丁的更多相关文章

  1. 2.移植3.4内核-使内核支持烧写yaffs2

    在上章-制作文件系统,并使内核成功启动jffs2文件系统了 本章便开始使内核支持烧写yaffs2文件系统 1.首先获取yaffs2源码(参考git命令使用详解) cd /work/nfs_root g ...

  2. Davinci DM6446开发攻略-UBOOT-2009.03移植2 nand flash的烧写

      很长一段时间没有更新博客了,是因为要推出新开发方案和做好客户服务工作,忙得不易乐乎.有关DAVINCI U-BOOT的移植,以前写过一篇u-boot-1.3.4(2008年的),其实和这个u-bo ...

  3. 【Android 系统开发】 编译 Android文件系统 u-boot 内核 并烧写到 OK-6410A 开发板上

    博客地址 : http://blog.csdn.net/shulianghan/article/details/40299813  本篇文章中用到的工具源码下载 : -- ok-6410A 附带的 A ...

  4. 迅为iMX6Q/PLUS开发板烧写设备树内核 Qt 系统

    迅为iMX6Q 和 iMX6PLUS 两个硬件版本,设备树镜像的烧写方法以及镜像所在目录,镜像名称全部一致. 如果用的是 iMX6Q 版本,想要烧写设备树版本镜像,请使用 iMX6Q 设备树版本的光盘 ...

  5. iMX6Q/PLUS开发板烧写设备树内核的Ubuntu系统

    基于迅为-iMX6D.iMX6Q 和 iMX6PLUS 三个硬件版本,设备树镜像的烧写方法以及镜像所在目录,镜像名称全部一致,所以作者将烧写章节合并到一起. 请注意,如果购买的是 iMX6D 版本,想 ...

  6. tiny4412学习(一)之从零搭建linux系统(烧写uboot、内核进emmc+uboot启动内核)【转】

    本文转载自:http://blog.csdn.net/fengyuwuzu0519/article/details/74080109 版权声明:本文为博主原创文章,转载请注明http://blog.c ...

  7. 1.移植3.4内核-分析内核启动过程,重新分区,烧写jffs2文件系统

    1.在上章-移植uboot里.我们来分析下uboot是如何进入到内核的 首先,uboot启动内核是通过bootcmd命令行实现的,在我们之前移植的bootcmd命令行如下所示: bootcmd=nan ...

  8. 6.移植uboot-支持yaffs烧写,打补丁

    在上一章,裁剪uboot以及分区后,本章主要使uboot支持yaffs以及制作补丁 1. 修改uboot支持yaffs 首先,每个命令都会对应一个文件,比如nand命令对应的common/cmd_na ...

  9. 烧写ARM开发板系统教程----->uboot 、内核以及文件系统

    一.sd启动 将u-boot镜像写入SD卡,将SD卡通过读卡器接上电脑(或直接插入笔记本卡槽),通过"cat /proc/partitions"找出SD卡对应的设备,我的设备节点是 ...

随机推荐

  1. Grid++Report报表工具C/S实战篇(五)

    一.课程介绍 本次分享课程属于<C#高级编程实战技能开发宝典课程系列>中的第五部分,阿笨后续会计划将实际项目中的一些比较实用的关于C#高级编程的技巧分享出来给大家进行学习,不断的收集.整理 ...

  2. C#中类的属性的获取

    /// <summary> /// 将多个实体转换成一个DataTable /// </summary> /// <typeparam name="T" ...

  3. XML随笔:语法快速入门及当下流行的RSS简析

    今天是本人第一次写博客,之前闭门造车闹出过很多笑话,恰巧这几天刚刚重温了一遍XML的知识,决定把XML的知识再来从头到尾的理一遍,感触颇多,今天分享给大家.希望大家能多多注意其中的要点. 1.定义 首 ...

  4. UWP Button添加圆角阴影(三)

    原文:UWP Button添加圆角阴影(三) Composition DropShadow是CompositionAPI中的东西,使用Storyboard设置某个属性,就是频繁的触发put_xxx() ...

  5. git常用命令常用场景

    在使用git之前,一直用的是svn版本管理:与svn最大不同的是,git有两个仓库,一个是本地仓库,一个是服务器上共享的仓库:本地仓库是每个开发者自己独有的,即使commit提交也只是提交到本地仓库: ...

  6. java面试和笔试

    1.Java中异常处理机制和事件机制. 2.String是最基本的数据类型吗? 基本数据类型包括byte.int.char.long.float.double.boolean和short. java. ...

  7. 关于ajax访问webservice查询数据量稍微大一点,就会返回error500的解决方案

    只需要在web.config的configeration节点中增加如下子节点即可: <system.web.extensions>       <scripting>      ...

  8. 组件基础(插槽slot)—Vue学习笔记

    刚开始我们淡淡提过<slot></slot>现在深入了解一下. slot可以进行父组件传值到子组件. 比如:我们将hiboy通过<slot>传递到组件中. < ...

  9. markdown的学习记录

    一.markdown用处: 写博客,写微信公众号等等 二.准备工作: 工具使用:由于代码经常使用idea,所以继续使用idea编写markdown,但需要安装插件:MarkDown Navigator ...

  10. python学习笔记16-装饰器

    装饰器(函数) 1.函数作用域 2.高阶函数 把函数作为参数传入,这样的函数称为高阶函数,函数式编程就是指这种高度抽象的编程范式. 3.闭包  闭包就是能够读取其他函数内部变量的函数. 在本质上,闭包 ...