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.進行誤差分析,人工檢查交叉驗證集中演算法判斷錯誤的例項,看看這些例項是否...