busybox 根文件系統製作


busybox是構造文件系統最常用的軟件工具包它被非常形象地稱爲嵌入式Linux系統中的“瑞士軍刀”,因爲它將許多常用的Linux命令和工具結合到了一個單獨的可執行程序(busybox)中。


  雖然與相應的GNU工具比較起來,busybox所提供的功能和參數略少,但在比較小的系統(例如啓動盤)或者嵌入式系統中已經足夠了。


  busybox在設計上就充分考慮了硬件資源受限的特殊工作環境。它採用一種很巧妙的辦法減少自己的體積:所有的命令都通過“插件”的方式集中到一個可執行文件中,在實際應用過程中通過不同的符號鏈接來確定到底要執行哪個操作。採用單一執行文件的方式最大限度地共享了程序代碼,甚至連文件頭、內存中的程序控制塊等其他系統資源都共享了,對於資源比較緊張的系統來說,真是最合適不過了。在busybox的編譯過程中,可以非常方便地加減它的“插件”,最後的符號鏈接也可以由編譯系統自動生成。


【實驗目的】

      熟悉Linux文件系統目錄結構,創建自己的文件系統,通過NFS方式測試;用文件系統工具生成ramdisk文件系統映象文件。

【實驗環境】

主機:ubuntu 12.04發行版

目標機:FS210平臺

交叉編譯工具:arm-none-linux-gnueabi-gcc

【實驗步驟】

一、根文件系統製作

1、  源碼下載

我們選擇的版本是busybox-1.17.3.tar.bz2

下載路徑爲:http://busybox.net/downloads/

2、  解壓源碼

$ tar  xvf busybox-1.17.3.tar.bz2

3、  進入源碼目錄,修改Makefile

$ cd busybox-1.17.3

vim Makefile

ARCH = arm

CROSS_COMPILE = arm-none-linux-gnueabi-

4、  配置源碼

$ make menuconfig

Busybox Settings --->

      Build Options --->

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

              [ ] Force NOMMU build

              [ ] Build with Large File Support(for accessing files > 2 GB)

              ()Cross Compiler prefix

              () Additional CFLAGS

     Installation Options  --->

                   [*] Don't use /usr

                     Appletslinks (as soft-links)  --->

           (./_install) BusyBoxinstallation prefix (NEW)

5、  編譯

$ make

6、  安裝

$ make install

    busybox默認安裝路徑爲源碼目錄下的_install

7、  進入安裝目錄下

$ cd _install

$ ls

bin linuxrc  sbin

8、  創建其他需要的目錄

$ mkdir dev  etc  mnt proc  var  tmp sys  root  lib home usr

9、  添加動態庫

?  將工具鏈中的庫拷貝到_install目錄下的lib目錄

$cp -raf/usr/local/toolchain-4.5.1-farsight/arm-none-linux-gnueabi/lib/*  lib/

?  刪除庫文件中的符號表,也叫瘦身

$ rm -rf lib/*.a

$ arm-none-linux-gnueabi-strip  lib/*

10、 添加系統啓動文件

在_install/etc下添加文件inittab,文件內容如下:

::sysinit:/etc/init.d/rcS

::askfirst:-/bin/ash

::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, 進程如果意外終止,那麼不會重啓

11,在_install/etc下添加文件fstab,文件內容如下:

#device    mount-point     type        options         dump     fsck order

proc         /proc                proc          defaults     0                  0

tmpfs         /tmp              tmpfs         defaults         0                 0

sysfs         /sys                 sysfs           defaults         0                  0

tmpfs         /dev              tmpfs         defaults          0                  0

      這裏我們掛載的文件系統有三個proc、sysfs和tmpfs。在內核中proc和sysfs默認都支持,而tmpfs是沒有支持的,我們需要添加tmpfs的支持

修改內核配置:

File systems --->

      Pseudo filesystems --->

            [*] /proc file system support (NEW)

            [*] sysfs file system support(NEW)

            [*] Virtual memory file systemsupport (former shm fs)

            [*]   Tmpfs POSIX Access Control Lists

重新編譯內核

     

12,在_install/etc下創建init.d目錄,並在init.d下創建rcS文件,rcS文件內容爲:

    cd _install/etc   

    mkdir init.d

    vim init.d/rcS 

===============================================    

#!/bin/sh

echo ">>>>>>>>in/etc/init.d/rcS<<<<<<<<<<<<<<<<<"

/bin/mount -a

echo /sbin/mdev >/proc/sys/kernel/hotplug

/sbin/mdev -s

===============================================

mdev是用於自動創建設備節點  

       爲rcS添加可執行權限:

$ chmod   +x  init.d/rcS

13,在_install/etc下添加profile文件,文件內容爲:

#!/bin/sh

export HOSTNAME=farsight

export USER=root

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

14、 設備文件創建

根文件系統中有一個設備節點是必須的,在dev下創建console節點

$ mknod  dev/console  c  5  1

以上的步驟就完成了linux根目錄所需要的所有文件,可以直接使用


 NFS測試

1、將做好的根目錄複製成/opt/rootfs(如果你已經有這個目錄,就要注意啦)

$sudo  cp  -raf  _install  /opt/rootfs

2, 在ubuntu中將/opt/rootfs設置成nfs文件系統

    修改ubuntu的/etc/exports: 將/opt/rootfs設置成nfs文件系統格式

    /opt/rootfs           *(subtree_check,rw,no_root_squash,async)


    sudo service nfs-kernel-server restart


測試:

       sudo mount -t nfs 192.168.7.22:/opt/filesystem/ /mnt/nfs/


    設置uboot環境變量

===========================================================================

# setenv bootcmd  tftp  20800000 zImage \;  go  20800000

# setenv bootargs  root=nfs  nfsroot=192.168.7.100:/opt/rootfs  init=/linuxrc console=ttySAC0,115200  ip=192.168.7.200

# saveenv

===========================================================================

如果開機就運行一個自己可執行程序,可以做如下處理


1、編譯出一個可執行程序:/bin/hello_arm/

2、/etc/init.d/rcS中啓動可執行程序


方法一:直接在/etc/init.d/rcS添加一條:

          /bin/hello_arm

方法二:另外再寫一個腳本,然後在/etc/init.d/rcS中啓動這個腳本

寫一個腳本:/etc/local/mysrv.sh

#!/bin/ash

echo "my first app"

/bin/hello_arm

然後在/etc/init.d/rcS添加一條

       /etc/local/mysrv.sh

     重新啓動開發板,查看是否能夠正常掛載,功能是否正常


發佈了37 篇原創文章 · 獲贊 3 · 訪問量 4萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章