使用busybox-1.15.2制作jffs2文件系统

使用busybox-1.15.2制作jffs2文件系统


.编译并生成根文件系统文件
1.
解压该包
tar xf busybox-1.15.2.tar.bz2
cd busybox-1.15.2

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)           
        Installation Options --->
            [*]Don't use /usr
             
这几个设置对于之前做过相关工作的人来说是比较熟悉的,都很容易知道为何如此做。

 

#make

#make install

所生成的文件就在当前目录的 _install目录下。

 

二.准备制作jffs2文件系统的所有文件

编译结束后,自己随便找个目录,并在该目录下建立rootfs文件夹
并在其中建立如下路径
1.  #mkdir bin sbin lib etc dev mnt usr/bin usr/sbin usr/lib proc sys -p
2. 
把刚才编译busybox生成的在_install目录下的文件全部copyrootfs/目录下,注意用 cp命令带 –arf 参数

3.
加入运行需要的库文件
写了一个脚本,把这个放在/usr/local/arm/4.3.2/arm-none-linux-gnueabi/libc/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
=============脚本结束========================

4.
rootfs/etc/下建立如下文件或者路径

4.1.
vi fstab
内容是:

proc /proc proc defaults 0 0
sysfs /sys sysfs defaults 0 0
4.2.
vi proflie
内容是:
#!/bin/sh
#You should put this file profile into your $(CONFIG_PREFIX)/etc/
echo "Set seaech library in /etc/profile"
export LD_LIBRARY_PATH=/lib:/usr/lib
echo "Set user path in /etc/profile"
export PATH=/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"
4.3.
mkdir init.d
cd init.d
vi rcS
内容是
#!/bin/sh
/bin/mount –a

/bin/sh  /*这个一定要,不然进不了控制台*/

 

(执行chmod 777 rcS

 

4.4. etc下创建文件inittab,内容如下

console::sysinit:-/etc/init.d/rcS

 

4.5. rootfs/dev下面建立两个节点

#mknod -m 660 console c 5 1
#mknod -m 660 null c 1 3

这样就差不多大功告成了


. 制作jffs2文件系统

1.       使用mkfs.jffs2
mkfs.jffs2 -r rootfs -o rootfs1.jffs2 -e 0x4000 --pad=0x1000000 -s 0x200 –n
生成的文件rootfs.jffs2就是要烧写的文件系统

注意:--pad=0x1000000 这个值应该跟你文件系统分区的大小一样。

2.       我的linux启动参数 (Boot options)

mem=M root=/dev/mtdblock2 init=linuxrc console=ttySAC0 rootfstype=jffs2



补充说明:

1.在上文第二节的4.2小节中如果rcS缺少了/bin/mount –a那一句,那么启动后,总是出现如下提示
can't open /dev/tty2: No such file or directory
can't open /dev/tty3: No such file or directory
can't open /dev/tty4: No such file or directory

在源码路径下 grep "can't open" * -r
最后发现在init/init.c文件中有问题

经过分析,原因在于如下3句,
694        new_init_action(ASKFIRST,bb_default_login_shell,VC_2);
695        new_init_action(ASKFIRST,bb_default_login_shell,VC_3);
696        new_init_action(ASKFIRST,bb_default_login_shell,VC_4);
这三句会启动三个虚拟终端,如果你觉得你的的板上没这个必要,可以注释掉。

 

你可能感兴趣的:(使用busybox-1.15.2制作jffs2文件系统)