Buildroot构建指南——根文件系统(Rootfs)
Buildroot的Rootfs構建流程有一個大框架,有些部分是Buildroot系統做好的,有些細節需要自己來實現,Rootfs也是Buildroot中最為復雜的部分。
Rootfs的構建流程概述
Rootfs的構建流程如圖1所示。其中淺色框中為Buildroot實現的框架,深紫色框為用戶實現的腳本。
Figure 1 Buildroot系統的rootfs制作
需要歸納的幾點如下:
1.????? 新版buildroot已經把rootfs的/etc/init.d/的rcS等啟動腳本移到了package/initscripts/目錄下。
2.????? 系統默認的rcS腳本不會直接做系統用戶態啟動初始化操作,而是會調用/etc/init.d/目錄下的SXX開頭的腳本執行系統用戶態啟動的流程,其中XX是數字,數字越小的腳本優先于數字大的腳本被調用。用于實際的系統用戶態啟動腳本應該以SXX這這種格式命名,install到output/target/etc/init.d/目錄下。
3.????? fakeroot是一個主機上使用的軟件包,它會被buildroot下載編譯,用于為構建rootfs提供一個虛擬的root權限環境,只有在root權限下,才能把output/target/中的目錄和文件變成root用戶,并創建dev節點。有了fakeroot環境,系統構建者無需獲取主機的root權限,也能在fakeroot下把文件改為root用戶,并制作root方式。
4.????? 用戶特定格式的rootfs制作腳本,最后都會被寫到一個腳本中,該腳本會在fakeroot環境中執行。
如何構建自己的Rootfs
清楚流程后可以在Buildroot環境下構建自己的Rootfs了,以友善的tiny4412開發板的rootfs為例,demo一次構建自己的rootfs的流程。
友善官方提供的rootfs壓縮包在光盤中是rootfs_qtopia_qt4-20141213.tar.gz,這個rootfs非常臃腫,我們需要對它進行裁剪,最好是能夠用busybox做一個最小的rootfs出來,但是由于暫時沒有摸清楚它的每一個細節,怕直接編譯的rootfs無法啟動,因而我們最好在它官方的/etc/init.d/目錄下的啟動腳本的基礎上做進一步裁剪,先保證系統能夠啟動。
1.????? 在buildroot/system/目錄中,拷貝一份skeleon/目錄到tiny4412_skeleton/ ,同時拷貝一份device_table.txt到tiny4412_device_table.txt,因為tiny4412的文件系統中有特殊的部分需要修改,為了不影響通用的模板,所以進行拷貝。
Figure 2 拷貝后的system/目錄中內容
2.??????根據友善官方的rootfs內容,對tiny4412_skeleton/etc/目錄進行一些刪減和修改,刪減修改后截圖如下
Figure 3 刪減修改后的tiny4412_skeleton/etc/目錄
3.????? 將官方文件系統中,/etc/init.d/中的腳本cp到tiny4412_skeleton/etc/init.d/中,其實rcS更名為S00_tiny4412以匹配SXX的格式,XX代表數字。
4.????? 將tiny4412_device_table.txt稍作修改,去掉passwd等一些最小系統中用不上的內容。
Figure4 修改后的tiny4412_device_table.txt文件
5.????? 由于tiny4412的文件系統比較特別,使用了友善專用的make_ext4fs工具來制作的,并且這是個不開源的bin程序,把一些參數和節點都在里面寫死了,因而我們需要單獨在fs/中,為制作tiny4412的文件系統添加方法。
6.????? 在fs/目錄下添加tiny4412_ext4/目錄,將友善官方提供的make_ext4fs工具cp到該目錄下,當然Config.in文件和tiny4412_ext4.mk腳本是必不可少的的。別忘了在fs/Config.in中將新添加的配置文件Config.in? source進去哦!
?Figure5 專為制作tiny4412 ext4文件系統而添加的腳本目錄
Figure6 tiny4412_ext4/目錄中的內容
?
?Figure7 在fs/Config.in中將新加入的Config.in關聯進去
7.????? 在tiny4412_ext4/Config.in中加入以下的配置代碼,其中BR2_TARGET_ROOTFS_TINY4412_EXT4是必不可少,讓系統能夠識別的文件系統類型的變量。剩下的變量則是可在menuconfig中配置的,文件系統大小,image制作工具的路徑,以及image最后的名字
?
8.????? 在tiny4412_ext4.mk腳本中加入rootfs構建腳本。制作腳本的核心其實也就是ROOTFS_TINY4412_EXT4_CMD函數,它會在fs/common.mk腳本中,被寫入fakeroot的執行腳本,然后會在fakeroot環境中被執行。ROOTFS_TINY4412_EXT4_CMD 函數 調用make_ext4fs工具根據配置的參數,生成rootfs的image。
?
?9.????? 接下來是make menuconfig的配置了。在menuconfig -->? Systemconfiguration中,customer skeleton path 和 path to permissiontable 這兩項填充為1—4步驟中,我們所拷貝修改過的tiny4412_skeleton和tiny4412_device_table.txt。
Figure8 menuconfig -->? Systemconfiguration的配置
10.? 在menuconfig -->?? Filesystemimages中,選中我們剛剛特制的ext4 rootfs tor tiny4412,剩下的參數估計被make_ext4fs工具程序內部寫死了,用默認的就行。另外,在該選項中,busybox被默認選中,所以busybox中的所有軟件默認都被當做應用編譯和install到output/target/目錄下。
Figure9 menuconfig --> ??Filesystem images的配置
11.? 保存之后,make rootfs-tiny4412_ext4 就生成我們自己的文件系統了。用tiny4412的SD卡燒錄進去,是可以boot起來的,對S00_tiny4412腳本進行進一步裁剪后,我們可以得到一個在tiny4412開發板上最小的能boot起來的Linux系統。
原文鏈接:https://blog.csdn.net/zhou_chenz/article/details/52357550
?
?
?
總結
以上是生活随笔為你收集整理的Buildroot构建指南——根文件系统(Rootfs)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: windows操作无法完成错误0x000
- 下一篇: Buildroot构建指南——Linux