2 製作最小根檔案系統

2021-09-29 03:19:20 字數 2527 閱讀 5818

busybox中整合了幾百個命令,在一般系統中並不需要全部使用,所以可以通過配置busybox來選擇這些命令、指定某些命令的功能、指定busybox的連線方法以及指定busybox的安裝路徑。

①配置busybox,在busybox的頂層目錄中執行「make menuconfig」命令可以進入配置介面。

busybox setting----->

busybox liarary tuning --->

[*]tab completion      /*設定tab鍵補全*/

archival utilities----->各種壓縮解壓縮工具。

linux module utilities----> 使用可載入模組。

linux system utilities ---->支援mdev,這個可以很方便的構造/dev目錄,並且可以支援熱插拔裝置。

②編譯安裝busybox,在上述配置後,執行make arch= arm cross_compile =arm-linux- (沒有gcc字尾)可以編譯以及安裝在指定的目錄下。要是在配置時沒有指定安裝的路徑需要執行 make arch=arm cross_compile=arm-linux- config_prefix=dir(指定目錄)。編譯成功後會在指定的目錄中生成

③使用glibc庫構建根檔案系統,交叉編譯工具鏈裡面有glibc庫。交叉編譯工具鏈中的glibc庫的位置是:*/libc/usr/lib下,裡面存放的檔案可以分為:①載入器,如ld-2.3.6.so、ld-linux.so.2,動態程式啟動前,它們被用來載入動態庫。②目標檔案(.o),如ctrl.o,在生成應用程式時,這些檔案像一般的目標檔案一樣被連線。③靜態庫檔案(.a),編譯靜態程式時會連線它們。④動態庫檔案(.so、.so.[0-9]*),編譯動態程式時會用到這些檔案。⑤libtool庫檔案(.la),在連線庫檔案時,這些檔案會被用到,程式執行時無需這些檔案。⑥gconv裡面是有字符集的動態庫⑦ldscripts目錄,裡面存放各種連線指令碼,編譯應用程式時使用。

開發板上只需要載入器和動態庫,所以構建lib庫時只需要把動態庫檔案以及載入器複製過去就可以。動態庫根據應用程式對庫的依賴來選擇庫檔案。可以使用arm-linux-readelf -a "your binary" | grep "shared"命令來查詢依賴的庫檔案或者使用ldd.host 程式名來查詢依賴的庫檔案。

busybox會生成/bin 、/sbin、/usr/bin/、/usr/sbin 目錄檔案,加上上述移植了/lib庫檔案,基本上最小根檔案系統大部分檔案目錄、檔案已經建好。還剩下配置檔案、裝置檔案以及其它目錄檔案。

④構建etc目錄(主要檔案有inittab、init.d/rcs、fstab),init程序根據/etc/inittab檔案來建立其他子程序。

inittab可以仿照busybox中的example/inittab檔案。init.d/rcs檔案,是乙個指令碼檔案,可以在裡面新增自動執行的命令,如配置ip位址、掛載/ect/fstab指定的檔案系統(mount -a)。fstab檔案格式如下:

#device             mount-point          type              options                 dump             fsck order

proc                   /proc                        proc                defaults                 0                      0 

tmpfs                 /tmp                         tmpfs               defaults                 0                      0

⑤構建dev目錄,可以使用最原始的方法處理裝置,在/dev目錄下靜態建立各種節點。也可以使用mdev建立裝置檔案,mdev是udev的簡化版本,通過讀取核心資訊來建立裝置檔案。mdev主要用途有兩個:初始化/dev目錄、動態更新。支援熱插拔。要使用mdev,需要核心支援sysfs檔案系統,為了減少對flash的讀寫,還要支援tmpfs檔案系統。先確保核心已經設定了config_sysfs、config_tmpfs配置選項。

要在核心啟動時,自動執行mdev,需要修改etc/fstab來自動掛載檔案系統:

還需要修改init.d/rcs加入自動執行命令:

⑥在建立自己需要的目錄如mnt root home tmp sys proc 等。

note:mdev是通過init程序來啟動的,在使用mdev構造/dev之前,init程序至少要用到裝置檔案/dev/console、/dev/null所以這兩個裝置檔案需要自己手動建立。

根檔案系統製作好了,還需要把它製作為乙個檔案,即映像檔案,才能燒寫到儲存裝置上去。

製作最小根檔案系統

1.dev console dev null 2.init程序 一般 於busybox 3.etc inittab 4.配置檔案指定的程式 5.c庫 1.解壓busybox tar xjf busybox 1.20.0.tar.bz2 2.配置 make menuconfig 設定交叉編譯選項cro...

最小根檔案系統製作

一 移植busybox make menuconfig busybox settings build options build busybox as a static binary no shared libs 是否編譯成靜態庫,在這裡我沒選,使用動態庫 busybox library tunin...

最小根檔案系統製作

一 移植busybox 所謂製作根檔案系統,就是建立各種目錄,並且在裡面建立各種檔案。對於建立乙個最下根檔案系統,只需要在 dev目錄下建立必要的裝置節點 在 etc目錄下建立一些配置檔案就可以了,如果busybox使用動態鏈結庫,那還要在 lib目錄下包含庫檔案。busybox支援uclibc庫和...