Busybox 制作最小文件系统

设置编译器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


猜你喜欢

转载自blog.csdn.net/qq1113231395/article/details/84777515
今日推荐