根文件系統的構建
- 硬件平臺:韋東山嵌入式Linxu開發板(S3C2440.v3)
- 軟件平臺:運行於VMware Workstation 12 Player下UbuntuLTS16.04_x64 系統
- 參考資料:《嵌入式Linux應用開發手冊》
- 開發環境:Linux 2.6.22.6 內核、arm-linux-gcc-3.4.5-glibc-2.3.6工具鏈
目錄
一、前言
在嵌入式系統中,u-boot的目的是爲了啓動內核,而內核的目的是爲了啓動應用程序。
提問:應用程序保存到哪裏呢?
解答:應用程序保存在根文件系統中。
1、那什麼是根文件系統呢?
(摘抄於《嵌入式Linux應用開發手冊》第十七章)
與Window的C盤類似,Linux一樣要在一個分區上存放系統啓動多必需的文件,比如內核映象文件,內核啓動後運行的第一個程序(init)、給用戶提供操作界面的shell程序、應用程序所以來的庫等。這些必須、基本的文件合稱爲根文件系統。
2、最小的根文件系統由什麼組成?
組成部分:
-
① /dev/console 與 /dev/null 設備節點
/dev/console 這個設備代表的是系統控制檯。錯誤信息和診斷信息通常會被髮送到這個設備。
/dev/null 這個是一個空設備文件,所有寫到這個文件中的數據都會被丟棄掉。 -
② /etc/inittab 啓動配置文件
init進程根據 /etc/inittab 文件來創建其他子進程,比如調用腳本文件配置IP地址、掛接其他文件系統、最後啓動shell等。 -
③ 配置文件中的指定程序
-
④ C庫lib
該目錄下存放共享庫和可加載模塊(驅動程序)。 -
⑤ Busybox
是一個遵循GPL v2協議的開源項目,將衆多的UNIX命令集合進一個很小的可執行程序中。在創建最小根文件系統時,利用Busybox,只需要在/dev目錄下創建必要的設備節點、在/etc目錄下創建一些配置文件就可以了。
二、配置編譯Busybox
1、下載busgbox壓縮包到Linux系統上並解壓
tar xjf busybox-1.7.0.tar.bz2
在解壓後的busybox-1.7.0
目錄下找到這個INSTALL
文件
其中說明了編譯的步驟
2、創建配置文件
指令爲:
make menuconfig # This creates a file called ".config"
遇到問題:
這個時候由於系統的make工具太新,make的舊版規則已經無法兼容新版,會出現以下錯誤:
解決方法:
根據報錯信息,修改makefile文件405行和1242行的代碼:
405行修改爲:%config: scripts_basic outputmakefile FORCE
1242行修改爲:%/: prepare scripts FORCE
成功後出現以下畫面:
接下來的配置:
按需配置自己所需要的配置項,這裏介紹如何配置交叉編譯工具
由於在配置項中尋找不到交叉編譯工具的配置項,故通過修改makefile文件的方式進行配置。
- 添加
arm-linux-
前綴到如下位置:
3、make文件
在目錄爲busybox-1.7.0
執行make
命令
這個過程會比較久,成功後會出現以下界面
4、安裝
由於我們是在PC機上進行配置安裝,如果執行make install
會默認安裝到PC目錄下,破環系統。
正確步驟如下:
- 創建一個名爲
first_fs
文件夾(可在任意目錄下):mkdir -p /home/book/nfs_root/first_fs
- 執行安裝命令
make CONFIG_PREFIX=/home/book/nfs_root/first_fs install
注意執行安裝時目錄爲busybox-1.7.0
如何判斷是安裝成功?
- 進入你所新建的文件夾下,查看是否有如下文件:
- 進行如下操作,看看是否可以成功busybox鏈接
以上就是全部的配置安裝busybox步驟了。
三、創建/console和/null設備文件
1、在創建設備文件時,可以先查看當前PC機上該設備文件的屬性ls /dev/console /dev/null -l
解釋:
crw------- 1 root root 5, 1 4月 10 14:50 /dev/console
2、在安裝~/first_fs
下創建屬性相同的/dev/console
和/dev/null
sudo mknod console c 5 1
sudo mknod null c 1 3
如圖:
四、構造/etc/inittab
1、在/first_fs目錄下
創建/ect文件mkdir etc
2、在/first_fs/etc
目錄下創建可編輯文件vi inittab
添加內容爲:console::askfirst:-/bin/sh
五、加載C庫
1、在/first_fs
目錄下新建lib文件mkdir lib
2、執行如下命令
cd /work/tools/gcc-3.4.5-glibc-2.3.6/arm-linux/lib
cp *.so* /home/book/nfs_root/first_fs/lib -d
最終lib文件下如圖:
六、製作yaffs2映像文件
提問:上述步驟所構建的最小根文件系統,如何燒寫到開發板中呢?
解答:需要製作yaffs2映像文件。
1、解壓yaffs工具壓縮包
進入到/work/system
裏面有一個文件,進行解壓得到Development_util_ok
文件
命令:tar xjf yaffs_source_util_larger_small_page_nand.tar.bz2
2、make yaffs2工具
進入到解壓文件Development_util_ok
中的/work/system/Development_util_ok/yaffs2/utils
進行make
命令
結果如下:其中mkyaffs2image
是我們所用到的工具
3、拷貝mkyaffs2image
到/usr/local/bin
命令:sudo cp mkyaffs2image /usr/local/bin
sudo chmod +x /usr/local/bin/mkyaffs2image
4、創建文件系統映像
回到/homr/book/nsf_root
目錄下創建,使用方式可以輸入mkyaffs2image
查詢
輸入指令mkyaffs2image first_fs first_fs.yaffs2
,就會生成first_fs.yaffs2
映像根文件系統
七、燒寫映像根文件系統
通過服務器把生成的first_fs.yaffs2
文件下載下來,通過USB下載口燒寫到開發版上,最終結果如下: