2.移植3.4内核-使内核支持烧写yaffs2
本章主要内容如下:
- 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的更多相关文章
- 2.移植3.4内核-支持烧写yaffs2,裁剪内核并制作补丁
在上章-制作文件系统,并使内核成功启动jffs2文件系统了 本章主要内容如下: 1)使内核支持yaffs2文件系统 2)裁剪内核 3)制作内核补丁 1.首先获取yaffs2源码(参考git命令使用详解 ...
- 3.移植驱动到3.4内核-移植DM9000C驱动
在上章-使内核支持烧写yaffs2,裁剪内核并制作补丁了 本章,便开始移植以前2.6内核的驱动到3.4新内核 1.介绍 首先内核更新,有可能会重新定义新的宏,去除以前的宏,以前更改函数名等 所以移植驱 ...
- FL2440 Linux-3.0内核触摸屏的支持
---------------------------------------------------------------------------------------------------- ...
- 6.移植uboot-支持yaffs烧写,打补丁
在上一章,裁剪uboot以及分区后,本章主要使uboot支持yaffs以及制作补丁 1. 修改uboot支持yaffs 首先,每个命令都会对应一个文件,比如nand命令对应的common/cmd_na ...
- s3c2440 移值u-boot-2016.03 第6篇 支持mtd yaffs 烧写
1, 解决启动时的错误 Warning - bad CRC, using default environment 搜索发现 在 /tools/env/fw_env.c 中 /* 放在NAND FLAS ...
- 1.移植3.4内核-分析内核启动过程,重新分区,烧写jffs2文件系统
1.在上章-移植uboot里.我们来分析下uboot是如何进入到内核的 首先,uboot启动内核是通过bootcmd命令行实现的,在我们之前移植的bootcmd命令行如下所示: bootcmd=nan ...
- ARM-Linux内核移植之(一)——内核启动流程分析
内核版本:2.6.22 为什么要采用这样一个较低的版本进行移植了,因为韦东山大牛说了,低版本的才能学到东西,越是高版本需要移植时做的工作量越少,学的东西越少. 内核启动分为三个阶段,第一是运行hea ...
- [转帖]Linux内核为大规模支持100Gb/s网卡准备好了吗?并没有
Linux内核为大规模支持100Gb/s网卡准备好了吗?并没有 之前用 千兆的机器 下载速度 一般只能到 50MB 左右 没法更高 万兆的话 可能也就是 200MB左右的速度 很难更高 不知道后续的服 ...
- linux4.10.8 内核移植(三)---裁剪内核
一.裁剪内核 1.1 第一次修改 现在的内核大小为2.8M左右,要裁剪到2.0M以下,毕竟给内核分区就只有2.0M. 这两个设备我们没有,裁剪掉. 进入make menuconfig中,搜索mouse ...
随机推荐
- SQL奇技淫巧
1.SQL行列转换 问题:假设有张学生成绩表(tb)如下:姓名 课程 分数张三 语文 74张三 数学 83张三 物理 93李四 语文 74李四 数学 84李四 物理 94想变成(得到如下结果): 姓名 ...
- python中星号的意义(**字典,*列表或元组)
传递实参和定义形参(所谓实参就是调用函数时传入的参数,形参则是定义函数是定义的参数)的时候,你还可以使用两个特殊的语法:*.** . 调用函数时使用* ,** test(*args)中 * 的作用:其 ...
- java内存溢出问题
相信有一定java开发经验的人或多或少都会遇到OutOfMemoryError的问题,这个问题曾困扰了我很长时间,随着解决各类问题经验的积累以及对问题根源的探索,终于有了一个比较深入的认识. 在解决j ...
- 理解纯CSS画三角形
pure css draw a triangle code { display: inline-block; width: 300px; background-color: #E0E0E0 } .te ...
- table-cell实现未知宽高图片,文本水平垂直居中在div
<BODY> <h1>未知宽高的图片水平垂直居中在div</h1> <!--box-outer--> <div class="box-o ...
- linux常用基本命令整理小结
linux系统遵循的基本原则 由目标单一的小程序组成,组合小程序完成复杂任务: 一切皆文件: 尽量避免捕捉用户接口: 配置文件保存为纯文本文件: Linux命令行常识 命令格式 命令+选项+参数 选项 ...
- 分享用于学习C++音频处理的代码示例
与<分享用于学习C++图像处理的代码示例>为姊妹篇. 为了便于学习C++音频处理并研究音频算法, 俺写了一个适合初学者学习的小小框架. 麻雀虽小五脏俱全,仅仅考虑单通道处理. 采用Deco ...
- iOS 中使用 XIB 自定义cell 的两种方法 以及 编译出现常见 的错误 ++++(xcode6.0之后)
一. 注册cell 1.创建自定义cell并勾选 xib :(勾选xib就会自动生成与cell文件关联的xib) 2.在 tableViewController里注册自定义Cell (或者遵守tabl ...
- Linux 和Windows之间命令行实现目录或文件互传
在linux中,我们常用scp命令传输文件: 如以下实例,我们想把当前服务器文件abc.sql传输到192.168.1.1服务器上 我们可以执行以下命令: scp /home/person/hww/a ...
- 一些关于memcpy memmove函数的区别,和模拟实现
memcpy: 它是c和c++使用的内存拷贝函数,memcpy函数的功能是从源src所指的内存地址的起始位置开始拷贝n个字节到目标dest所指的内存地址的起始位置中. 函数原型:void* memcp ...