歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux編程 >> Linux編程

使用busybox制作根文件系統的小腳本

翻出了很久很久以前使用busybox制作根文件系統的腳本程序,在此記錄一下

#!/bin/bash
SHELL_DIR=$(cd $(dirname ${0});pwd)
cd ${SHELL_DIR}

if [ "" = "$1" ];then
    echo "<Usage> CMD clean/nfs/ramdisk"
    exit
fi
CPU_NUM=$(grep processor /proc/cpuinfo | awk '{field=$NF};END{print field+1}')
export ARCH=arm
export CROSS_COMPILE=/opt/arm-cross-compile/arm-none-linux-gnueabi-2014-05/bin/arm-none-linux-gnueabi-
COMPILE_DIR=/opt/arm-cross-compile/arm-none-linux-gnueabi-2014-05/bin/

if [ "clean" = "$1" ];then
    make clean
    exit
fi
make clean
make menuconfig
make -j${CPU_NUM}
make install 

cd ./_install/
mkdir -p dev etc mnt proc var tmp sys root lib/modules/4.8.5

    

#拷貝交叉編譯工具的庫文件,如果使用共享庫編譯,那麼busybox運行的時候需要,這些庫還可以支持運行編譯器版本相差不多的應用程序
cp -a /opt/arm-cross-compile/arm-none-linux-gnueabi-2014-05/arm-none-linux-gnueabi/libc/lib/ .
rm -f lib/*.a

#去除符號表,節省空間,但是不能反匯編了
#${COMPILE_DIR}arm-none-linux-gnueabi-strip lib/*

#創建sbin/init的配置文件/etc/inittab
cat <<INITTAB_END >./etc/inittab
# Boot-time system configuration/initialization script.
# This is run first except when booting in single-user mode.
#
::sysinit:/etc/init.d/rcS

# Start an "askfirst" shell on the console (whatever that may be)
::askfirst:-/bin/sh     #直接進shell
#::askfirst:-/bin/login     #需要登錄,粗糙
#::respawn:/sbin/getty -L ttySAC2 115200 vt100  #需要登錄,會調用上一句,更嚴謹

# Stuff to do when restarting the init process
::restart:/sbin/init

# Stuff to do before rebooting
::ctrlaltdel:/sbin/reboot
::shutdown:/bin/umount -a -r
::shutdown:/sbin/swapoff -a
INITTAB_END

mkdir -p ./etc/init.d/
cat <<RCS_END >./etc/init.d/rcS
#!/bin/sh

mount -a
echo /sbin/mdev > /proc/sys/kernel/hotplug
/sbin/mdev -s

mkdir -p /dev/pts
mount -t devpts devpts /dev/pts

LIBDIR=/lib/modules/`uname -r`
if [ ! -e $LIBDIR ] ; then
    mkdir -p $LIBDIR
fi

echo -e "\033[0;31;1m\t\t\t#----------------------XJ tech------------------------#\033[0m" 

#關閉黑屏
echo -e "\033[9;0]" > /dev/tty0
#顯示光標
echo -e "\033[?25h" > /dev/tty0
#隱藏光標
echo -e "\033[?25l" > /dev/tty0

echo -e "\033[0;31;1m\t\t\t#----------------------XJ tech------------------------#\033[0m" > /dev/tty0

dmesg -n 1

if [ -e /etc/init.d/ifconfig-eth0 ] ; then
    /etc/init.d/ifconfig-eth0
else
    echo "eth0 Not enable"
fi

RCS_END


cat <<FSTAB_END >./etc/fstab
#device mount-point type    options     dump    fsck    order
proc    /proc       proc    defaults    0   0
sysfs   /sys        sysfs   defaults    0   0
mdev    /dev        tmpfs   defaults    0   0
none    /tmp        tmpfs   defaults    0   0
none    /var        tmpfs   defaults    0   0
#for mmc
/dev/mmcblk1p2 /mnt     ext2    defaults    0   0
FSTAB_END


cat <<PROFILE_END >./etc/profile
#!/bin/sh

# No core files by default
ulimit -S -c 0 > /dev/null 2>&1

PS1='\u@\h:\w\$ '

PATH=$PATH:/sbin:/bin:/usr/bin:usr/sbin
runlevel=S
prevlevel=N
umask 022

export runlevel prevlevel PS1 PATH
PROFILE_END


chmod +x etc/init.d/rcS
if [ "nfs" == "$1"  ];then 
    #拷貝_install中的所有內容到nfs共享目錄
    sudo cp -a  * /nfs
elif [ "ramdisk" == "$1" ];then
    #創建ramdisk
    cd ../
    dd if=/dev/zero of=ramdisk bs=1k count=8192
    mkfs.ext2 -F ramdisk
    if [ ! -d /mnt/mnt_ramdisk ];then
    sudo mkdir /mnt/mnt_ramdisk
    fi
    sudo mount -t ext2 ramdisk /mnt/mnt_ramdisk/
    sudo cp -a  _install/* /mnt/mnt_ramdisk/
    sudo umount /mnt/mnt_ramdisk
    gzip --best -c ramdisk >ramdisk.gz
    mkimage -n "ramdisk" -A arm -O linux -T ramdisk -C gzip -d ramdisk.gz ramdisk.img
    mv ramdisk.img /tftp
    #############################################################################
    #需要配置內核與之配合
    #File system --->
    #   <*>Second extended fs support
    #Device Drivers
    #   SCSI device support --->
    #       <*>SCSI disk support
    #   Block devices --->
    #       <*>RAM block device support
    #       (16)Default number of RAM disks
    #       (8192)Default RAM disk size(kbytes)
    #General setup --->
    #   [*]Initial RAM filesystem and RAM disk (initramfs/initrd)support
    #############################################################################
fi

移植Busybox與構建根文件系統 http://www.linuxidc.com/Linux/2011-10/44886.htm

BusyBox各版本下載 http://www.linuxidc.com/Linux/2011-08/40704.htm

Copyright © Linux教程網 All Rights Reserved