1.准备制作jffs2根文件系统的工具mkfs.jffs2;
2.建立目录;
3.编译busybox;
4.拷贝动态链接库到lib目录中;
5.创建/etc/init.d/rcS、/etc/profile、/etc/fstab、/etc/inittab文件,并且拷贝主机中的/etc/passwd、/etc/shadow、/etc/group文件到相应的目录中;
6.移植bash,将其复制到/bin目录中;
7.执行mkfs.jffs2 -r ./rootfsM/ -o rootfs.jffs2.m9 -n -e 0x20000,生成jffs2根文件系统镜像。
下面将详细描述每一步的执行过程:
1. 准备制作jffs2根文件系统的工具mkfs.jffs2;
(1) 从http://www.zlib.net/zlib-1.2.3.tar.gz 下载文件zlib-1.2.3.tar.tar,放入/usr/local/src目录,然后按照如下步骤操作:
[root@localhost src]# pwd
/usr/local/src
[root@localhost src]# ls
mtd-utils-1.0.0.tar.gz zlib-1.2.3.tar.tar
[root@localhost src]# tar xvf zlib-1.2.3.tar.tar
[root@localhost src]# cd zlib-1.2.3
[root@localhost zlib-1.2.3]# ./configure --prefix=/usr/local/arm/arm-linux –shared
[root@localhost zlib-1.2.3]# vi Makefile
将CC=gcc 改为 CC=arm-linux-gcc
将LDSHARED=gcc -shared -Wl,-soname,libz.so.1 改为 LDSHARED=arm-linux-gcc -shared -Wl,-soname,libz.so.1并保存退出。
[root@localhost zlib-1.2.3]# make all
[root@localhost zlib-1.2.3]# make install
注意:这里是安装在/usr/local/arm/arm-linux目录下,由于交叉编译mtd工具时需要zlib.h文件,所以在编译之前先安装zlib库文件。
(2)从ftp://ftp.infradead.org/pub/mtd-utils/mtd-utils-1.0.0.tar.gz 下载文件mtd-utils/mtd-utils-1.0.0.tar.gz,放入/usr/local/src目录,然后按照如下步骤操作:
[root@localhost src]# tar zxvf mtd-utils-1.0.0.tar.gz
[root@localhost src]# cd mtd-utils-1.0.0
[root@localhost mtd-utils-1.0.0]# vi Makefile
将#CROSS=arm-linux- 改为CROSS=arm-linux-
将CFLAGS := -I./include -O2 –Wall 改为 CFLAGS := -I./include -O2 –Wall –I/usr/local/arm/arm-linux/include
将$(CC) $(LDFLAGS) -o $@ $^ -lz 改为 $(CC) $(LDFLAGS) -o $@ $^ -L/usr/local/arm/arm-linux/lib -lz
并保存退出。
[root@localhost mtd-utils-1.0.0]# make all
[root@localhost mtd-utils-1.0.0]# PATH=$PATH:/usr/local/src/mtd-utils-1.0.0
至此,将会在当前目录下生成制作jffs2根文件系统的工具mkfs.jffs2文件。
2.创建根文件系统的目录
[root@localhost src]# pwd
/usr/local/src
[root@localhost src]# mkdir jffs2 jffs2/rootfs jffs2/rootfs_build
[root@localhost src]# cd jffs2/rootfs
[root@localhost rootfs]# mkdir {bin,dev,etc,usr,lib,sbin,proc,sys,tmp}
[root@localhost rootfs]# mkdir usr/{bin,sbin,lib}
3.编译busybox
从http://www.busybox.net/downloads/busybox-1.15.2.tar.bz2下载文件busybox-1.15.2.tar.bz2,放入/usr/local/src目录,然后按照如下步骤操作:
[root@localhost src]# tar jxvf busybox-1.15.2.tar.bz2
[root@localhost busybox-1.15.2]# vi Makefile
修改下面两行
CROSS_COMPILE ?=/usr/local/arm/4.3.2/bin/arm-linux- (这个视你的交叉编译工具所在路径而定)
ARCH ?= arm
[root@localhost busybox-1.15.2]# make menuconfig
Busybox Settings --->
Build Options --->
[*] Build BusyBox as a static binary (no shared libs)
[ ] Force NOMMU build
[*] Build with Large File Support (for accessing files > 2 GB)
() Cross Compiler prefix
() Additional CFLAGS
Installation Options --->
[*] Don't use /usr
Applets links (as soft-links) --->
(./_install) BusyBox installation prefix
[root@localhost busybox-1.15.2]# make
[root@localhost busybox-1.15.2]# make install
[root@localhost busybox-1.15.2]# cd _install/
[root@localhost _install]# pwd
/usr/local/src/busybox-1.15.2/_install
[root@localhost _install]# cp -a * /usr/local/src/jffs2/rootfs/
4.拷贝动态链接库到lib目录中
[root@localhost rootfs]# cd lib
[root@localhost lib]# pwd
/usr/local/src/jffs2/rootfs/lib
[root@localhost lib]# cp /usr/local/arm/arm-none-linux-gnueabi/libc/lib/* .
5.创建etc/init.d/rcS、etc/profile、etc/fstab、etc/inittab、dev/console、dev/null文件,并且拷贝主机中的/etc/passwd、/etc/shadow、/etc/group文件到etc目录中,步骤如下:
[root@localhost rootfs]# cd etc/init.d
[root@localhost init.d]# pwd
/usr/local/src/jffs2/rootfs/etc/init.d
[root@localhost init.d]# vi rcS
#!/bin/sh
ifconfig eth0 192.168.1.1
#setting host name
. /etc/sysconfig/network
hostname ${HOSTNAME}
#echo "----mount all"
/bin/mount -a
/bin/mkdir /dev/pts
#echo "------Starting mdev..."
/bin/mount -t devpts devpts /dev/pts
/bin/echo /sbin/mdev >/proc/sys/kernel/hotplug
mdev -s
echo "**************************"
echo "at91sam9260 rootfs"
echo "**************************"
[root@localhost init.d]# cd ..
[root@localhost etc]# vi inittab
::sysinit:/etc/init.d/rcS
::restart:/sbin/init
::respawn:-/bin/bash
::ctrlaltdel:/sbin/reboot
::shutdown:/bin/umount -a -r
::shutdown:/sbin/swapoff –a
[root@localhost etc]# vi profile
#/etc/profile: sys
#echo "Processing /etc/profile..."
#echo "Set search library path in /etc/profile"
export LD_LIBRARY_PATH=/lib:/usr/lib
#echo "Set usr path in /etc/profile"
PATH=/bin:/sbin:/usr/bin:/usr/sbin
export PATH
#echo "Set PS1 in /etc/profile"
export PS1="[\u@\h \W]\$"
#echo "Done"
[root@localhost etc]# vi fstab
proc /proc proc defalts 0 0
tmpfs /tmp tmpfs defaults 0 0
sysfs /sys sysfs defaults 0 0
tmpfs /dev tmpfs defaults 0 0
[root@localhost etc]# mkdir sysconfig
[root@localhost etc]# cd sysconfig/
[root@localhost sysconfig]# pwd
/usr/local/src/jffs2/rootfs/etc/sysconfig
[root@localhost sysconfig]# vi network
HOSTNAME=sam9260//设置主机名称
[root@localhost sysconfig]# cd ..
[root@localhost etc]# pwd
/usr/local/src/jffs2/rootfs/etc
[root@localhost etc]# cp /etc/passwd .
[root@localhost etc]# cp /etc/shadow .
[root@localhost etc]# cp /etc/group .
[root@localhost etc]# cd ../dev
[root@localhost dev]# mknod –m 600 console c 5 1
[root@localhost dev]# mknod –m 666 null c 1 3
6.移植bash,首先从http://down1.chinaunix.net/distfiles/bash-3.2.tar.gz下载文件bash-3.2.tar.gz,然后按照如下步骤操作:
[root@localhost src]# tar zxvf bash-3.2.tar.gz
[root@localhost src]# cd bash-3.2
[root@localhost bash-3.2]# ./configure --host=arm-linux
[root@localhost bash-3.2]# make
[root@localhost bash-3.2]# arm-linux-strip bash
[root@localhost bash-3.2]# cp bash /usr/local/src/jffs2/rootfs/bin/
7.生成jffs2根文件系统镜像。
[root@localhost jffs2]# pwd
/usr/local/src/jffs2
[root@localhost jffs2]# mkfs.jffs2 -r ./rootfs -o rootfs.jffs2.m9 -n -e 0x20000
Mkfs.jffs2命令各参数含义如下,具体使用方法可以使用-h参数查看。
-r 指定内含根文件系统的目录
-o 指定文件系统映象的输出文件名称
-p 表示在映像的结尾用0x0补全到block
-l 存储格式为小端格式
-n 每个擦除的block中不添加clreanmarker
-e 擦除block的大小
至此,已经jffs2格式的根文件系统制作完毕,可以下载到开发板上运行了