Linux 利用busybox制作根文件系統


busybox版本:1.17.3

官網下載路徑:https://busybox.net/downloads/

網盤下載路徑:https://pan.baidu.com/s/1nvrEa73 密碼:7y4r

交叉編譯工具:arm-2009q3.tar.bz2

網盤下載路徑:http://pan.baidu.com/s/1dE7P9rb 密碼:300i

 

1、創建根文件系統目錄

xxx@ubuntu:~$ mkdir myrootfs
xxx@ubuntu:~$ cd myrootfs/
xxx@ubuntu:~/myrootfs$ mkdir rootfs
xxx@ubuntu:~/myrootfs$ cd rootfs/
xxx@ubuntu:~/myrootfs/rootfs$ mkdir bin sbin lib etc sys dev proc root home usr mnt tmp opt var
xxx@ubuntu:~/myrootfs/rootfs$ ls
bin dev etc home lib mnt opt proc root sbin sys tmp usr var

 

2、拷貝busybox到myrootfs中並解壓

xxx@ubuntu:~/myrootfs$ ls
busybox-1.17.3.tar.bz2 rootfs
xxx@ubuntu:~/myrootfs$ tar -xvf busybox-1.17.3.tar.bz2

 

3、配置交叉工具鏈

xxx@ubuntu:~/myrootfs$ cd busybox-1.17.3/
xxx@ubuntu:~/myrootfs/busybox-1.17.3$ vim Makefile

修改以下,保存退出:

  CROSS_COMPILE ?= arm-none-linux-gnueabi-

  ARCH ?= arm

 

4、配置menuconfig並保存

xxx@ubuntu:~/myrootfs/busybox-1.17.3$ make menuconfig

  Busybox Settings  --->

    Build Options  ---> 

      [*] Build BusyBox as a static binary (no shared libs) 

    Installation Options  --->  

      [*] Don't use /usr  

 

5、 編譯並安裝

xxx@ubuntu:~/myrootfs/busybox-1.17.3$ make

xxx@ubuntu:~/myrootfs/busybox-1.17.3$ make install

 

6、將拷貝到制作的文件系統目錄中

xxx@ubuntu:~/myrootfs/busybox-1.17.3$ cd _install/
xxx@ubuntu:~/myrootfs/busybox-1.17.3/_install$ ls
bin linuxrc sbin
xxx@ubuntu:~/myrootfs/busybox-1.17.3/_install$ cp -raf * ../../rootfs/

 

7、拷貝交叉編譯工具鏈中的庫,交叉工具鏈的位置與自己安裝路徑有關,詳見:Linux 安裝交叉編譯工具鏈

xxx@ubuntu:~/myrootfs/busybox-1.17.3/_install$ cd ../../rootfs/
xxx@ubuntu:~/myrootfs/rootfs$ cp -raf /usr/local/arm/arm-2009q3/arm-none-linux-gnueabi/libc/lib/* lib/
xxx@ubuntu:~/myrootfs/rootfs$ du -h lib/
3.8M lib/

 

8、為交叉編譯工具鏈瘦身

xxx@ubuntu:~/myrootfs/rootfs$ chmod a+w lib/*
xxx@ubuntu:~/myrootfs/rootfs$ arm-none-linux-gnueabi-strip lib/*
xxx@ubuntu:~/myrootfs/rootfs$ du -h lib/
3.0M lib/

 

9、參照 busybox 源碼中的 busybox-1.17.3/examples/inittab 例子編寫 inittab

xxx@ubuntu:~/myrootfs/rootfs$ cd etc/
xxx@ubuntu:~/myrootfs/rootfs/etc$ touch inittab
xxx@ubuntu:~/myrootfs/rootfs/etc$ vim inittab 

  ::sysinit:/etc/init.d/rcS
  ::askfirst:-/bin/sh
  ::ctrlaltdel:/sbin/reboot
  ::shutdown:/sbin/swapoff -a
  ::shutdown:/bin/umount -a -r
  ::restart:/sbin/init

格式說明:
<id>:<runlevels>:<action>:<process> : 在什么時間啟動什么進程
id: 進程所使用的終端名
runlevels:不用填寫
<action>: Valid actions include: sysinit, respawn, askfirst, wait, once, restart, ctrlaltdel, and shutdown.\
sysinit: 系統初始化的時候,放在最前面
respawn,askfirst是一樣的,如果process意外終止啦,系統會講其重啟
askfirst 會有提示Please press Enter to activate this console
wait: 該進程一定要執行完,才能執行下一個
once, 進程如果意外終止,那么不會重啟
restart:每次重啟時都要執行
ctrlaltdel:按組合鍵時執行
shutdown:關機時執行

 

10、創建 init.d/rcS 腳本,並添加可執行權限

xxx@ubuntu:~/myrootfs/rootfs/etc$ mkdir init.d
xxx@ubuntu:~/myrootfs/rootfs/etc$ cd init.d/
xxx@ubuntu:~/myrootfs/rootfs/etc/init.d$ touch rcS
xxx@ubuntu:~/myrootfs/rootfs/etc/init.d$ chmod a+x rcS
xxx@ubuntu:~/myrootfs/rootfs/etc/init.d$ vim rcS

  #! /bin/sh
  
  echo "-----myrootfs start-----"
  # 掛載 etc/fstab 中指定的所有文件系統
  /bin/mount -a

  # insmod 加載驅動是,會在 /dev 下創建設備節點
  /sbin/mdev -s
  
  echo "-----myrootfs end -----"

 

11、創建 etc/fatab 文件

xxx@ubuntu:~/myrootfs/rootfs/etc/init.d$ cd ..
xxx@ubuntu:~/myrootfs/rootfs/etc$ touch fstab
xxx@ubuntu:~/myrootfs/rootfs/etc$ vim fstab

  # <file system> <mount point> <type> <options> <dump> <pass>
  proc /proc proc defaults 0 0
  dev /dev tmpfs defaults 0 0
  sys /sys sysfs defaults 0 0
  tmp /tmp tmpfs defaults 0 0

 

12、創建 /etc/profile 文件,命令提示符前會添加用戶名和主機

xxx@ubuntu:~/myrootfs/rootfs/etc$ touch profile
xxx@ubuntu:~/myrootfs/rootfs/etc$ vim profile

  #!/bin/sh
  export HOSTNAME=ubuntu
  export USER=xxx
  export HOME=root
  export PS1="[$USER@$HOSTNAME \W]\# "
  PATH=/bin:/sbin:/usr/bin:/usr/sbin
  LD_LIBRARY_PATH=/lib:/usr/lib:$LD_LIBRARY_PATH
  export PATH LD_LIBRARY_PATH

Linux 文件系統目錄結構


免責聲明!

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



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