设置编译器arm-linux-4.3.2,使用busybox版本busybox-1.22.1.tar.bz2.
解压tar -jxf busybox-1.22.1.tar.bz2。
make menuconfig
设置好编译器前缀:
Busybox Settings --->Build Options --->Cross Compiler prefix 输入:arm-none-linux-gnueabi-
设置编译后安装目录
Busybox Settings --->Installation Options ("make install" behavior) --->BusyBox installation prefix 输入:../mini_fs_1.22.1
配置完,make,make install
如下图示:
安装完之后进入mini_fs_1.22.1,创建相应目录 mkdir dev etc lib mnt proc sys tmp var
在etc下创建eth0-setting,输入
IP=10.168.10.121 Mask=255.255.0.0 Gateway=10.168.0.1 DNS=10.168.0.1 MAC=08:90:90:90:90:90
修改权限:chmod 755 eth0-setting
在etc下创建并进入init.d目录,vi ifconfig-eth0,chmod 755 ifconfig-eth0
#!/bin/sh echo -n Try to bring eth0 interface up......>/dev/ttySAC2 if [ -f /etc/eth0-setting ] ; then source /etc/eth0-setting if grep -q "^/dev/root / nfs " /etc/mtab ; then echo -n NFS root ... > /dev/ttySAC2 else ifconfig eth0 down ifconfig eth0 hw ether $MAC ifconfig eth0 $IP netmask $Mask up route add default gw $Gateway fi echo nameserver $DNS > /etc/resolv.conf else if grep -q "^/dev/root / nfs " /etc/mtab ; then echo -n NFS root ... > /dev/ttySAC2 else /sbin/ifconfig eth0 192.168.253.12 netmask 255.255.255.0 up fi fi echo Done > /dev/ttySAC2
在init.d下创建rcS,chmod 755 rcS
#! /bin/sh PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/bin: runlevel=S prevlevel=N umask 022 export PATH runlevel prevlevel # # Trap CTRL-C &c only in this shell so we can interrupt subprocesses. # trap ":" INT QUIT TSTP /bin/hostname iTOP-iMX6 #/bin/mount -n -t proc none /proc #/bin/mount -n -t sysfs none /sys #/bin/mount -n -t usbfs none /proc/bus/usb #/bin/mount -t ramfs none /dev [ -e /proc/1 ] || /bin/mount -n -t proc none /proc [ -e /sys/class ] || /bin/mount -n -t sysfs none /sys [ -e /dev/tty ] || /bin/mount -t ramfs none /dev echo /sbin/mdev > /proc/sys/kernel/hotplug /sbin/mdev -s #/bin/hotplug # mounting file system specified in /etc/fstab mkdir -p /dev/pts mkdir -p /dev/shm /bin/mount -n -t devpts none /dev/pts -o mode=0622 /bin/mount -n -t tmpfs tmpfs /dev/shm #/bin/mount -n -t ramfs none /tmp #/bin/mount -n -t ramfs none /var mkdir -p /var/empty mkdir -p /var/log mkdir -p /var/log/boa mkdir -p /var/lock mkdir -p /var/run mkdir -p /var/tmp #ln -sf /dev/ttyS2 /dev/tty2 #ln -sf /dev/ttyS2 /dev/tty3 #ln -sf /dev/ttyS2 /dev/tty4 syslogd /etc/rc.d/init.d/netd start echo " " > /dev/tty1 echo "Starting networking..." > /dev/tty1 #sleep 1 #/etc/rc.d/init.d/httpd start #echo " " > /dev/tty1 #echo "Starting web server..." > /dev/tty1 #sleep 1 #/etc/rc.d/init.d/leds start #echo " " > /dev/tty1 #echo "Starting leds service..." > /dev/tty1 #echo " " #sleep 1 #echo "*************************************" > /dev/ttySAC2 #echo " http://www.topeet.com.cn " > /dev/ttySAC2 #echo "*************************************" > /dev/ttySAC2 #echo "*************************************" #echo " http://www.topeet.com.cn " #echo "*************************************" mkdir /mnt/disk sleep 1 /sbin/ifconfig lo 127.0.0.1 /etc/init.d/ifconfig-eth0
在etc下创建passwd,chmod 755 passwd
root::0:0:root:/:/bin/sh bin:*:1:1:bin:/bin: daemon:*:2:2:daemon:/sbin: nobody:*:99:99:Nobody:/:
在etc下创建profile,chmod 755 profile
# Ash profile # vim: syntax=sh # No core files by default ulimit -S -c 0 > /dev/null 2>&1 USER="`id -un`" LOGNAME=$USER PS1='[$USER@$HOSTNAME]# ' PATH=$PATH HOSTNAME=`/bin/hostname` export USER LOGNAME PS1 PATH
在etc下
mkdir rc.d
cd rc.d/
mkdir init.d
cd init.d/在 init.d下创建netd,chmod 755 netd
#!/bin/sh base=inetd # See how we were called. case "$1" in start) /usr/sbin/$base ;; stop) pid=`/bin/pidof $base` if [ -n "$pid" ]; then kill -9 $pid fi ;; esac exit 0
拷贝arm-linux-gcc 库到lib下
cp -rd /usr/local/arm/arm-2009q3/arm-none-linux-gnueabi/libc/lib/* mini_fs_1.22.1/lib/
-d表示保留原有的链接关系
不加-d时可以节省空间
注意,编译busybox,内核,应用程序最好使用同一个编译器,保证所用的库相同。
到var目录,mkdir lib lock log run tmp
至此最小根文件系统就制作完成了。打包生成自己需要的格式的烧写文件。可以发现烧写文件很小,就是因为cp的时候加了-d。
tar -zcvf rootfs.tgz bin dev etc lib linuxrc mnt proc sbin sys tmp usr var