用BusyBox制作Linux最小系統


1、下載busybox-1.30.1 地址:https://busybox.net/downloads/busybox-1.30.1.tar.bz2

2、解壓:tar xvf busybox-1.30.1.tar.bz2

3、安裝交叉編譯器

4、安裝libncurses5-dev:sudo apt-get install libncurses5-dev

5、配置busybox:make menuconfig

  使用默認的配置項就可以,下面是一些重要的配置項說明:

  Setting->Build Options->Build BusyBox as a static binary (no shared libs) 是否使用靜態編譯,如果不是靜態編譯,則busybox運行時還需要復制幾個動態庫文件,否則不能運行

  settings->build options->Cross compiler prefix設置交叉編譯前綴(如果設了環境變量CROSS_COMPILE或make指定了則這里不需要設置)

  settings->installation options->Destination path for 'make install'設置安裝目錄,默認是./_install

  Linux System Utilities->mdev支持mdev

6、編譯

  make CROSS_COMPILE=arm-linux-gnueabihf-

  make install

  就會安裝在_install目錄下有如下目錄:bin sbin usr,還有一個linuxrc指向bin/busybox

7、進入_install目錄創建目錄

  mkdir dev etc lib var proc tmp home root mnt sys

8、生成etc配置文件(在etc目錄下操作):
  再復制配置文件:cp -rf ~/busybox-1.30.1/examples/bootfloppy/etc/* .
  最終生成的配置文件如下:
  etc/inittab(開機免登錄):
    ::sysinit:/etc/init.d/rcS
    #::respawn:-/bin/sh
    #::respawn:-/bin/login
    console::askfirst:-/bin/sh
    ::ctrlaltdel:/bin/umount -a -r
  etc/inittab(開機需要登錄):
    ::sysinit:/etc/init.d/rcS
    #::respawn:-/bin/sh
    ::respawn:-/bin/login #如果這里加上 -f root 則自動登錄
    #console::askfirst:-/bin/sh
    ::ctrlaltdel:/bin/umount -a -r
    如果需要密碼,則:
      sudo cp /etc/passwd .
      sudo cp /etc/group .
      sudo cp /etc/shadow .
    再編輯這三個文件,只保留root那一行,這樣root的密碼與虛擬機(123456)相同,最終passwd,group,shadow三個文件內容依次為:
      root:x:0:0:root:/root:/bin/sh #將x去掉就root沒有密碼了
      root:x:0:
      root:$6$99hUh1hc$NptxbUGmNiX1zQYM08SAVq.2xbDHqEEy6rKbIHWozgJ2cjoIP39OjmkHgSkr2vR6fXRmy5BXfDQW4lgHH/

  ect/profile文件:
    export PATH=/bin:/sbin:/usr/bin:/usr/sbin
    PS1='\u@\w\$'
  etc/fstab文件:
    /dev/mmcblk0p2 / ext4 defaults 0 1
    proc /proc proc defaults 0 0
    devpts /dev/pts devpts defaults 0 0
    tmpfs /dev/shm tmpfs defaults 0 0
  etc/init.d/rc.S文件(添加自動執行命令,該文件需有執行屬性chmod +x rcS):
    #! /bin/sh

    /bin/mount -n -t ramfs ramfs /var
    /bin/mount -n -t ramfs ramfs /tmp
    /bin/mount -n -t sysfs none /sys
    /bin/mount -n -t ramfs none /dev
    /bin/mkdir /var/tmp
    /bin/mkdir /var/modules
    /bin/mkdir /var/run
    /bin/mkdir /var/log
    /bin/mkdir -p /dev/pts #telnet服務需要
    /bin/mkdir -p /dev/shm #telnet服務需要
    /bin/mount -a
    echo /sbin/mdev > /proc/sys/kernel/hotplug #USB自動掛載需要
    /sbin/mdev -s #啟動mdev在/dev下自動創建設備文件節點
    /bin/hostname maxonic
    #######配置網絡################################
    #/sbin/ifconfig lo 127.0.0.1 netmask 255.0.0.0
    #/sbin/ifconfig eth0 192.168.1.70
    #/sbin/ifconfig eth0 netmask 255.255.255.0
    #/sbin/route add default gw 192.168.1.1 eth0
    #/sbin/ifconfig eth1 192.168.1.71 netmask 255.255.255.0
    #/sbin/route add default gw 192.168.1.1 eth1
9、創建設備結點
  進入dev目錄,執行如下命令
  sudo mknod console c 5 1
  sudo mknod null c 1 3
  #sudo mknod ttySAC0 c 204 64
  #sudo mknod tty2 c 204 65
  #sudo mknod mtdblock0 b 31 0
  #sudo mknod mtdblock1 b 31 1
  #sudo mknod mtdblock2 b 31 2
10、復制引用的庫(如果是靜態編譯則不需要復制)

  如果busybox不是配置為靜態編譯,則需要復制使用到的動態庫,動態庫在交叉編譯器中有:

    arm-linux-gnueabihf-readelf -d bin/busybox #查看引用了哪些動態庫,發現有三個(再遞歸查看引用還有一個),復制四個庫到lib目錄
    sudo cp ~/Xilinx/SDK/2019.1/gnu/aarch32/lin/gcc-arm-linux-gnueabi/arm-linux-gnueabihf/libc/lib/libm.so.6 .
    sudo cp ~/Xilinx/SDK/2019.1/gnu/aarch32/lin/gcc-arm-linux-gnueabi/arm-linux-gnueabihf/libc/lib/libresolv.so.2 .
    sudo cp ~/Xilinx/SDK/2019.1/gnu/aarch32/lin/gcc-arm-linux-gnueabi/arm-linux-gnueabihf/libc/lib/libc.so.6 .
    sudo cp ~/Xilinx/SDK/2019.1/gnu/aarch32/lin/gcc-arm-linux-gnueabi/arm-linux-gnueabihf/libc/lib/ld-linux-armhf.so.3 .
  只需要復制這四個庫就可以了,當然也可直接整個lib目錄一起復制:
    sudo cp -a ~/Xilinx/SDK/2019.1/gnu/aarch32/lin/gcc-arm-linux-gnueabi/arm-linux-gnueabihf/libc/lib/* .

11、復制到目標盤
  進入_install目錄,執行如下命令:
    sudo cp -rfav * /mnt/disk
  進入目標盤然后執行:
    sudo chown root:root . -R

12、如果運行時停在:
  Run /sbin/init as init process
  random: fast init done
  則是console參數沒有傳對,所以串口顯示不了,更改內核啟動console參數即可

13、登錄時會打印出root login on 'UNKNOWN'看着不舒服,找到busybox源碼login.c注釋掉syslog(LOG_INFO, "root login%s", fromhost)即可

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM