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格式的根文件系統製作完畢,可以下載到開發板上運行了