JFFS2文件系统的制作
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
使用新的busybox-1.13.3制作jffs2文件系统
由于之前使用的文件系统中的busybox是1.5版本,结果很多工具都没有完善,这一次,在上下载了当前的最新稳定版本,busybox-1.13.3来制作,总算搞定了,但也出现了一些问题,贴出我的过程跟大家分享一下,也给有需要的人一点帮助,希望如此。
全文如下:
2009-3-26
陈纪煌
今天尝试了移植新的文件系统,使用的是busybox-1.13.3稳定版本
由于之前所使用的版本是busybox-1.5.0,结果发现很多东西无法支持,比如nfs无法挂在,并且clear等工具无法正常使用
所以下了一个新的版本进行尝试
1.解压该包
tar xf busybox-1.13.3.tar.bz2
cd busybox-1.13.3
2.修改Makefile
找到
CROSS_COMPILE ?=
修改为CROSS_COMPILE ?=arm-linux-
找到
ARCH ?= $(SUBARCH)
修改为
ARCH ?= arm
3.进行默认配置
make defconfig
4.对配置信息进行修改
make menuconfig
检查Miscellaneous Utilities--->
taskset 是否已经去除
同时设置如下:
Busybox Settings --->
Build Options --->
[*]Build BusyBox as a static binry (no shared libs)
()Cross Compiler prefix=/usr/local/arm/3.4.1/bin/
Installation Options --->
[*]Don't use /usr
BusyBox installation=${PROJECT}/rootfs/rootfs_1.13
这几个设置对于之前做过相关工作的人来说是比较熟悉的,都很容易知道为何如此做。make
make install
编译出错
修改networking/interface.c 818行改为.type = -1
这样编译就能通过。我使用gcc来编译是能通过的,但是用arm-linux-gcc编译就无法通过,应该是编译起的函数库的问题。因为报错信息是关于网络协议中一个宏的定义,就好像socket中的AF_INET差不多。
编译结束后,在${PROJECT}/rootfs/下建立rootfs_1.13文件夹
并在其中建立如下路径
mkdir bin sbin lib etc dev mnt usr/bin usr/sbin usr/lib proc sys -p
并执行make install则将busybox安装
5.加入运行需要的库文件
写了一个脚本,把这个放在/usr/local/arm/3.4.1/arm-linux/lib/下执行,目的是将一些程序运行时需要的函数库复制到目标文件系统的lib路径下
=========以下是脚本内容===================
#!/bin/bash
#You should put this file cp.sh in $(CROSS-COMPILE)/lib/
ROOTFS_LIB=${PROJECT}/rootfs/rootfs_1.13/lib/
for file in libc libcrypt libdl libm libpthread libresolv libutil
do
cp $file-*.so ${ROOTFS_LIB}
cp -d $file.so.[*0-9] ${ROOTFS_LIB}
done
cp -d ld*.so* ${ROOTFS_LIB}
#end script
=============脚本结束========================
6.在${PROJECT}/rootfs/rootfs_1.13/etc/下建立如下文件或者路径
vi fstab
内容是:
proc /proc proc defaults 0 0
sysfs /sys sysfs defaults 0 0
vi priflie
内容是:
#!/bin/sh
#You should put this file profile into your $(CONFIG_PREFIX)/etc/
echo "Set seaech library in /etc/profile"
export LD_LIBRARY_PA TH=/lib:/usr/lib
echo "Set user path in /etc/profile"
export PA TH=/bin:/sbin:/usr/bin:/usr/sbin
alias ll='ls -l'
/sbin/ifconfig eth0 218.192.161.80 netmask 255.255.255.0
/sbin/ifconfig lo 127.0.0.0
echo "Configure net done"
mkdir init.d
cd init.d
vi rcS
内容是
#!/bin/sh
/bin/mount -a
这样就差不多大功告成了
7.制作jffs2文件系统
使用mkfs.jffs2
mkfs.jffs2 -r rootfs_1.13/ -o rootfs.jffs2 -p -l -n -e 0x8000 -m size
生成的文件rootfs.jffs2就是要烧写的文件系统
8.烧写过程
将生成的rootfs.jffs2放到tftpd服务路径下,我的是在/tftpboot/
启动u-boot
tftp 0x30008000 rootfs.jffs2
*****************************************************
nand erase 0x600000 0x3a00000
这里清除哪里就跟板的设置有关了
nand write 0x30008000 0x600000 xxxxx
xxxxx表示你下载的rootfs.jffs2的大小,16进制表示,当然,肯定是比0x3a00000小了
9.启动后,总是出现如下提示
can't open /dev/tty2: No such file or directory