一. 主机环境
Red Hat Linux 9.0 gcc version 3.4.5
二. 用Busybox创建文件系统
1.解压busybox-1.12.2.tar.bz2,路径为:
[root@localhost 2410-s]# pwd
/root/2410-s
[root@localhost 2410-s]# cp /mnt/hgfs/arm/rootfs/busybox-1.12.2.tar.bz2 ./
[root@localhost 2410-s]# tar -xjvf busybox-1.12.2.tar.bz2
[root@localhost 2410-s]# cd busybox-1.12.2
[root@localhost busybox-1.12.2]# vi Makefile
修改Makefile中的ARCH和CROSS_COMPILE与本机的路径一致:
CROSS_COMPILE ?= arm-softfloat-linux-
。。。。。。。。。。。。。。。。。。。。。。。
ARCH ?= arm
2.编译busybox。先make menuconfig,修改以下:
[root@localhost 2410-s]#make menuconfig
Busybox Settings --->
Build Options --->
[*] Build BusyBox as a static binary (no shared libs)
//直接编译成静态库,省事点
/opt/crosstool/gcc-3.4.5-glibc-2.3.6/arm-softfloat-linux/bin/arm-softfloat-linux-与编译文件Makefile里保持一致,应该写的一处就这行了
Installation Options --->
[ ] Don't use /usr
Busybox Library Tuning --->
[*] Fancy shell prompts
//一定要选上,否则很多转意字符无法识别
Shells --->
Choose your default shell (ash) --->
//这里选择shell为ash,应该是默认选中的
--- ash
//把ash这档的选项全部选上
Miscellaneous Utilities --->
[ ] inotifyd
//不选
保存退出直接
[root@localhost 2410-s]#make
[root@localhost busybox-1.12.2]# make install
执行make install安装
安装成功后在_install目录下可以看到如下目录:
[root@localhost busybox-1.12.2]# ls _install/
bin linuxrc sbin usr
[root@localhost busybox-1.12.2]#
3.用shell脚本创建根文件系统的目录结构,并在想要建立根文件系统的地方运行此脚本。我的用root用户登陆的,直接创建来了设备节点。
[root@localhost 2410-s]# mkdir root_stand
[root@localhost 2410-s]# cd root_stand/
[root@localhost root_stand]# pwd
/root/2410-s/root_stand
[root@localhost root_stand]# vi build_fs.sh
#!/bin/sh
echo "making rootdir"
mkdir rootfs
cd rootfs
echo "making dir:bin dev etc lib proc sbin sys usr"
mkdir bin dev etc lib proc sbin sys usr #8 dirs
mkdir usr/bin usr/lib usr/sbin lib/modules
#Don't use mknod, unless you run this Script as
mknod -m 600 dev/console c 5 1
mknod -m 666 dev/null c 1 3
echo "making dir:mnt tmp var"
mkdir mnt tmp var
chmod 1777 tmp
mkdir mnt/etc mnt/jiffs2 mnt/yaffs mnt/data mnt/temp
mkdir var/lib var/lock var/log var/run var/tmp
chmod 1777 var/tmp
echo "making dir:home root boot"
mkdir home root boot
echo "done
执行这个sh:
[root@localhost root_stand]# sh build_fs.sh
4.创建出一个主文件夹rootfs,里面有一批文件:
[root@localhost root_stand]# cd rootfs/
[root@localhost rootfs]# ls
bin boot dev etc home lib mnt proc root sbin sys tmp usr var
[root@localhost rootfs]#
[root@localhost rootfs]# cd etc/
[root@localhost etc]# ls
[root@localhost etc]# cp -a /root/2410-s/busybox-1.12.2/examples/bootfloppy/etc/* ./[root@localhost etc]# ls
fstab init.d inittab profile
[root@localhost etc]#
5.修改拷贝过来的profile文件
[root@localhost etc]# vi profile
# /etc/profile: system-wide .profile file for the Bourne shells
echo "Processing /etc/profile... "
# no-op
#Set search library patch
echo "Set search library path"
export LD_LIBRARY_PATH = /lib:/usr/lib
#Set user path
echo "Set user path"
PATH = /bin:/sbin:/usr/bin:/usr/sbin
export PATH
#Set PSI
echo "Set PS1"
HOSTNAME = /bin/hostname
export PS1 = "\\e[32m[$USER@HOSTNAME \\w\\a]\\$ \\e[00;37m"
echo "All Done"
echo
6.修改初始化文件inittab和fstab
[root@localhost etc]# vi inittab
::sysinit:/etc/init.d/rcS
::respawn:-/bin/sh
::restart:/sbin/init
tty2::askfirst:-/bin/sh
::ctrlaltdel:/bin/umount -a -r
::shutdown:/bin/umount -a -r
::shutdown:/sbin/swapoff –a
[root@localhost etc]# vi fstab
proc /proc proc defaults 0 0
none /tmp ramfs defaults 0 0
mdev /dev ramfs defaults 0 0
sysfs /sys sysfs defaults 0 0
7.修改初始化的脚本文件init.d/rcS
[root@localhost etc]# vi init.d/rcS
#! /bin/sh
echo "Processing etc/init.d/rc.S"
#hostname ${HOSTNAME}
hostname up tech
echo "Mount all"
/bin/mount -a
echo "Start mdev...."
/bin/echo /sbin/mdev > proc/sys/kernel/hotplug
mdev -s
echo "****************************************************"
echo " rootfs by NFS, s3c2410 "
echo " Created by chenboqiang_uptech @ 2010.11.19 "
echo " Good Luck "
echo " blog:http://chenboqiang.blog.51cto.com "
echo " chen_boiqang@163.com "
8.创建一个空的mdev.conf文件,在挂载根文件系统时会用到的
[root@localhost etc]# touch mdev.conf
9.从本机拷贝passwd、shadow、group文件
[root@localhost etc]# cp /etc/passwd .
[root@localhost etc]# cp /etc/shadow .
[root@localhost etc]# cp /etc/group .
修改passwd文件,把第一行和最后一行的bash修改成ash。
10.把busybox默认安装目录中的文件全部复制到这里的rootfs中。会发现多了linuxrc->/bin/busybox文件,这是挂载文件系统需要执行的。
[root@localhost etc]# cd ..
[root@localhost rootfs]# cp -rfv /root/2410-s/busybox-1.12.2/_install/* ./
OK,以上用busybox创建了一个基本的文件系统。
PS:
如果编译busybox时选择动态库方式编译,则需要查看生成的busybox使用哪些动态库,然后它们拷贝到rootfs/lib目录下。
[root@localhost etc]#arm-linux-readelf –d ../bin/busybox
可以看出,使用了libm.so.6和libc.so.6两个库。发现只拷贝这两个库还不够,还需要ld-linux.so.2和libgcc_s.so.1,也就是我编译出来的这个busybox需要4个动态库文件。
这样,使用动态库可以节省一半左右的空间,不过效率有所降低。
11.制作cramfs的文件系统
[root@localhost rootfs]# cd ..
[root@localhost root_stand]# mkcramfs rootfs/ root.cramfs
一.测试
注意:前提是已烧写好uboot和内核镜像