用busybox構建乙個最小根檔案系統

2021-07-17 06:01:27 字數 3637 閱讀 4755

p

用busybox

構建乙個最小根檔案系統

15年4月4月23月23日23日日15:11:30

(一)乙個最小根檔案系統包括:

(1)/dev/console

/dev/null

(2)init => busybox

(3)/etc/inittab

(4)配置檔案制定的程式

(5)c庫

(二)下面寫步驟:

(1)解壓配置

busybox

先解壓

「cd /work/system」

「tar xjf busybox-1.7.0.tar.bz2」

解壓出來

busybox-1.7.0

資料夾,在

busybox-1.7.0

目錄下執行「

make menuconfig」

命令即可進入配置介面。一般選擇預設配置就行,我新增乙個

tab補全功能:

busybox settings------>

busybox library turning------>

[*]tab completion

(2)編譯安裝

busybox

編譯前先修改

makefile

然後執行「

make」

命令編譯

busybox。

最後是安裝,在交叉編譯環境,千萬不要直接

make install

,這樣會破壞我們的作業系統。我們構建的最小根檔案系統在

/work/nfs_root/first_fs

下面,安裝的目的是在

/work/nfs_root/first_fs

資料夾下面生成乙個工具集,包括了我們常用的工具。

busybox

是所有命令的集合體,在開發板上執行ls和

busybox ls

命令是一樣的。

所以執行

「make config_prefix=/work/nfs_root/first_fs install」

,完成後,就會在這個資料夾下面生成

bin,

sbin

, usr

, linuxrc->bin/busybox

四個檔案目錄。

(2)安裝c

庫 在開發板上面只需要載入器和動態庫:

「mkdir -p /work/nfs_root/first_fs/lib」

「cd /work/tools/gcc-3.4.5-glibc-2.3.6/arm-linux/lib」

「cp *.so* /work/nfs_root/first_fs/lib -d」 其中

-d不要丟,

-d表示如果本來是個鏈結檔案,則拷貝時繼續保持為鏈結檔案,而不是真正的檔案。

(3)構建etc目錄

init

程序根據

/etc/inittab

檔案來建立其他子程序,

etc目錄下的內容取決與要執行的程式,本次只需要建立

3個檔案:

etc/inittab, etc/init.d/rcs, etc/fstab。

1.建立

etc/inittab

建立etc/init.d/rcs

檔案建立etc/fstab檔案

(4)構建

dev目錄 使用

mdev

機制建立裝置檔案,需要修改

etc/fstab

來自動掛載檔案系統,修改

etc/init.d/rcs

加入要自動執行的命令,我直接在上一步做好了,截圖看上面的。

mdev

是通過init

程序來啟動的,在使用

mdev

構造/dev

之前,init

程序至少要用到裝置檔案

/dev/console /dev/null

,所以要先建立這兩個裝置檔案: 在

first_fs

下建立乙個

dev資料夾,執行

「mkdir -p /work/nfs_root/first_fs/dev」

「cd /work/nfs_root/first_fs/dev」

「sudo mknod console c 5 1」

「sudo mknod null c 1 3」

即可。

這兩個裝置結點的主次裝置號

,檔案型別等資訊,是通過檢視本機的這兩個裝置結點來確定的「

ls -l /dev/console」「ls -l /dev/null」

來確定的。

(5)構建其他目錄

「cd /work/nfs_root/first_fs」

「mkdir proc mnt tmp sys root」

通過上面幾步,就構造出來乙個最小的根檔案系統,如果想要燒到開發板裡面,需要將它製作為乙個檔案,稱為映像檔案。

(三)製作

yaffs2

檔案系統映像檔案 在

/work/system/

資料夾下面有乙個韋老師做好的

yaffs2

製作工具,直接解壓

「sudo tar xjf yaffs_source_util_larger_small_page_nand.tar.bz2 」

解壓後得到

development_util_ok

資料夾,進入

yaffs2

後在utils

檔案裡面執行

make

命令,生成

mkyaffs2image

工具,將它拷貝到

/usr/local/bin

目錄下:

「sudo cp mkyaffs2image /usr/local/bin」

「sudo chmod +x /usr/local/bin/mkyaffs2image」

然後在/work/nfs_root

目錄下面製作

first_fs.yaffs2

映像檔案:

「cd /work/nfs_root」

「mkyaffs2image first_fs first_fs.yaffs2」

製作成功,可以看到

first_fs.yaffs2

映像檔案,可以燒到開發板上。

(四)一些注意事項

busybox1.7.0

,當時用的

4.4.3

的交叉編譯鏈,在執行過程中遇到一些問題,可以在網上搜尋到答案,一般是新增標頭檔案等內容。

最需要注意的是,當初自己做的時候,用的是韋老師提供的核心映像,而用自己配置的根檔案系統,這個根檔案系統是用

4.4.3

的交叉編譯鏈做的,韋老師的核心使用

3.4.5

的交叉編譯鏈做的,出現根檔案系統就沒法執行等問題。當時檢視了很多資料,發現

etc,

dev等檔案都沒有錯誤,最後只能確定是

busybox

自動生成的

linuxrc

,bin

等檔案有錯誤,所以核心映像跟

busybox

一定要用同乙個版本的交叉編譯器,要不會出現很多意想不到的問題。

0 給主人留下些什麼吧!~~

移植busybox構建最小根檔案系統

busybox 瑞士軍刀,裡面裝有很多小命令。step 1 構建目錄結構 建立根檔案系統目錄,主要包括以下目錄 dev etc lib usr var proc tmp home root mnt bin sbin sys mkdir home rootfs cd home rootfs mkdir...

構建乙個 synchronized

校對 智多芯 定稿 numbbbbb,cmb synchronized在 objective c 中是一種控制結構。它接受乙個物件指標作為引數,後面跟著一段 塊。物件指標充當鎖,在任何時候 synchronized 塊中只允許有乙個執行緒使用該物件指標。這是一種使用鎖進行多執行緒程式設計的簡單方法。...

構建乙個學習演算法

構建乙個學習演算法的推薦方法 1.先設計乙個簡單快速實現的演算法,實現該演算法並通過交叉驗證集測試該演算法 2.繪製學習曲線,通過觀察學習曲線,判斷模型是欠擬合還是過擬合,然後決定通過增加測試集,增加特徵,或者其他有效方法 3.進行誤差分析,人工檢查交叉驗證集中演算法判斷錯誤的例項,看看這些例項是否...