Linux-2.6.32.2内核在mini2440上的移植(四)---根文件系统制作(2)yaffs
移植环境(红色粗字体字为修改后内容,蓝色粗体字为特别注意内容) 1,主机环境:VMare下CentOS 5.5 ,1G内存。 2,集成开发环境:Elipse IDE
3,编译编译环境:arm-linux-gcc v4.4.3,arm-none-linux-gnueabi-gcc v4.5.1。 4,开发板:mini2440,2M nor flash,128M nand flash。 5,u-boot版本:u-boot-2009.08 6,linux 版本:linux-2.6.32.2 7,参考文章:
嵌入式linux应用开发完全手册,韦东山,编著。 Mini2440 之Linux 移植开发实战指南
http://linux.chinaunix.net/techdoc/system/2009/08/24/1131864.shtml 接上篇,问题的解决
解题思路:用tar 压缩我自己做的rootfs根文件系统打包, 这个系统是可以启动到NFS的,所以东西是全的。然后用nand flash 工具将nand flash的mtdblock3分区格式化后挂载,再将打包的rootfs下所有子目录和文件解压到此分区。 【4】挂载分区测试
按照之前内核引导参数的设定方式,将u-boot的bootgars参数设为nfs启动 [root@mini2440 /]#mount -t yaffs /dev/mtdblock1 /mnt/yaffs yaffs: dev is 32505857 name is \yaffs: passed flags \
mount: mounting /dev/mtdblock1 on /mnt/yaffs failed: Invalid argument [root@mini2440 /]#mount -t yaffs /dev/mtdblock0 /mnt/yaffs yaffs: dev is 32505856 name is \yaffs: passed flags \
mount: mounting /dev/mtdblock0 on /mnt/yaffs failed: Invalid argument [root@mini2440 /]#umount /mnt/yaffs
[root@mini2440 /]#mount -t yaffs /dev/mtdblock2 /mnt/yaffs yaffs: dev is 32505858 name is \yaffs: passed flags \
[root@mini2440 /]#ls -a /mnt/yaffs . .. lost+found
[root@mini2440 /]#umount /mnt/yaffs
[root@mini2440 /]#mount -t yaffs /dev/mtdblock3 /mnt/yaffs yaffs: dev is 32505859 name is \yaffs: passed flags \
[root@mini2440 /]#ls -a /mnt/yaffs . .. lost+found
[root@mini2440 /]#cat proc/mtd dev: size erasesize name mtd0: 00040000 00020000 \mtd1: 00020000 00020000 \mtd2: 00500000 00020000 \mtd3: 07aa0000 00020000 \mtd4: 08000000 00020000 \[root@mini2440 /]#
根据挂载的反馈信息,可以确定mtdblock0和mtdblock1分别是u-boot和其参数的分区而不能够被挂载,mtdblock2和mtdblock3分别是内核kernel和根文件系统rootfs分区能够被挂载。虽然成功挂载了yaffs文件系统,但不能从中读取因存在的文件信息。 【5】制作在nand flash操作工具mtd-utils工具 参考文章
mtd-utils工具的编译和使用 mtd-utils 及 i-utils 交叉编译
mtd-utils交叉编译 UBI文件系统简介
在ubuntu 10.04上交叉编译编译 mtd-utils 交叉编译libz, lzo, mtd-utils的脚本
对于mtd-utils工具的编译,可谓是费了不少周折,着重参考了上面几篇文章,可以用以下两种办法来解决其libz,lzo,uuid库的依赖问题 <1>手动安装mtd-utils所需要的库 A ,下载源代码:
zlib和lzo是编译mtd-utils所需库文件,需提前交叉编译完成,以供mtd-utils编译时调用 zlib:
http://www.zlib.net/zlib-1.2.5.tar.gz
http://www.dnaphp.com/downloads/server/linux/30-zlib-1-2-5-tar lzo:
http://www.oberhumer.com/opensource/lzo/download/,这里下载是lzo-2.05.tar.gz E2fsprogs:
http://e2fsprogs.sourceforge.net/,这里下载的是e2fsprogs-1.41.14.tar.gz mtd-utils:
ftp://ftp.infradead.org/p /mtd-utils/ 下载后
[root@localhost linux-test]# cd mtdtools
[root@localhost mtdtools]# ls
e2fsprogs-1.41.14.tar.gz mtd-utils-1.4.4.tar.bz2 lzo-2.05.tar.gz zlib-1.2.5.tar.gz
可以在打开的页面中下载最新版本,分别对其进行解压 [root@localhost mtdtools]# tar -zxf zlib-1.2.5.tar.gz [root@localhost mtdtools]# tar -zxf lzo-2.05.tar.gz
[root@localhost mtdtools]# tar -jxf mtd-utils-1.4.4.tar.bz2 -C ./ B,编译安装zlib
[root@localhost linux-test]# cd zlib-1.2.5
[root@localhost zlib-1.2.5]#CC=arm-linux-gcc ./configure --enable-static --disable-shared --prefix=/usr/local/arm/4.4.3/arm-none-linux-gnueabi [root@localhost zlib-1.2.5]# make [root@localhost zlib-1.2.5]# make install
检查: zconf.h 和 libz.a 都安装到了工具链目录.
其中-prefix指定zlib的安装路径,需要指定到交叉编译器所在路径,而且是与命令执行的bin文件夹同一级别的目录下而非软连接的bin目录! C,编译安装lzo
[root@localhost zlib-1.2.5]# cd ../lzo-2.05
[root@localhost lzo-2.05]#CC=arm-linux-gcc ./configure --host=arm-linux --enable-static --disable-shared --prefix=/usr/local/arm/4.4.3/arm-none-linux-gnueabi [root@localhost lzo-2.05]# make [root@localhost lzo-2.05]# make install 检查:liblzo2.a 已经拷贝到工具链的lib目录.
解决错误现象:error: lzo/lzo1x.h: No s h file or director D,编译安装e2fsprogs
配置e2fsprogs
[root@localhost e2fsprogs-1.41.14]#CC=arm-linux-gcc ./configure --host=arm-linux --prefix=/usr/local/arm/4.4.3/arm-none-linux-gnueabi 编译
[root@localhost e2fsprogs-1.41.14]# make
安装,因为我们只需要 uuid 库, 所以不需要完全安装, 查看 Makefile文件, 所以只执行make install-libs
[root@localhost e2fsprogs-1.41.14]# make install-libs
检查,可以在工具链目录看到, uuid/uuid.h 文件已经安装. libuuid.a 已经安装. 解决错误现象:uuid/uuid.h: No s h file or directory E,编译安装mtd-uitls
进入到mtd-uitls目录所在的目录,在make时需要指定交叉编译工具 [root@localhost lzo-2.05]# cd ../mtd-utils-1.4.4 [root@localhost mtd-utils-1.4.4]# mkdir mtd_install
[root@localhost mtd-utils-1.4.4]# export CROSS=arm-linux- [root@localhost mtd-utils-1.4.4]# export WITHOUT_XATTR=1 [root@localhost mtd-utils-1.4.4]# export DESTDIR=./mtd_install
需要指定WITHOUT_XATTR=1 是由于在编译 mkfs.jffs2使其不调用acl.h而是用zlib的库,否则出现
sys/acl.h:mkfs.jffs2.c:69:21: error: sys/acl.h: No s h file or directory 直接编译: make make install
检查1:mtdtools/mtd-utils-1.4.4/arm-linux(即所指定的CROSS)目录已经拷贝了所有mtd-utils的工具.