Linux-2.6.32.2内核在mini2440上的移植(四)

更新时间:2024-06-06 17:04:02 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

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的工具.

docfdisk flash_otp_info mkfs.jffs2.o nftl_format ubi-utils doc_loadbios flash_unlock mkfs.ubifs rbtree.o flashcp ftl_check mtd_debug recv_image [root@localhost mtdtools]#

其中mkfs.ubifs目录中存放的是制作ubifs文件系统映像的工具,ubi-utils目录中存放的是ubifs文件系统的操作工具。

接下来,将回到前面遗留问题即mtdblock分区加载和挂载根目录问题

本文来源:https://www.bwwdw.com/article/3mf6.html

Top