Buildroot構建指南——根檔案系統(Rootfs)

來源:互聯網
上載者:User

標籤:

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最後的名字

 

config BR2_TARGET_ROOTFS_TINY4412_EXT4                                                                                          bool"ext4 root filesystem for tiny4412"                                           help                                                                                 Build aext4 root filesystem specify for tiny4412                                                                                                           if BR2_TARGET_ROOTFS_TINY4412_EXT4                                                                                                                                                                                                                       config BR2_TARGET_ROOTFS_TINY4412_EXT4_LEN                                                 string"length of rootfs"                                                          default"397508608"                                                                                                                                                                                                                               config BR2_TARGET_ROOTFS_TINY4412_EXT4_MK_TOOL_PATH                                        string "make image toolpath"                                                      default"$(TOPDIR)/fs/tiny4412_ext4/make_ext4fs"                                                                                                                                                                                                  config BR2_TARGET_ROOTFS_TINY4412_EXT4_IMAGE_NAME                                          string"image name"                                                                default"rootfs_qtopia_qt4.img"                                            endif        

                     

8.      在tiny4412_ext4.mk指令碼中加入rootfs構建指令碼。製作指令碼的核心其實也就是ROOTFS_TINY4412_EXT4_CMD函數,它會在fs/common.mk指令碼中,被寫入fakeroot的執行指令碼,然後會在fakeroot環境中被執行。ROOTFS_TINY4412_EXT4_CMD 函數 調用make_ext4fs工具根據配置的參數,產生rootfs的image。

 

################################################################################                                        #                                                                                   # Build the TINY4412_EXT4 root filesystem image                                    #                                                                                  ################################################################################                                                                                   TINY4412_EXT4_OPTS := -s -l$(BR2_TARGET_ROOTFS_TINY4412_EXT4_LEN)                 TINY4412_EXT4_OPTS += -a root -L Linux                                                                                                                                ifeq ($(BR2_TARGET_ROOTFS_TINY4412_EXT4),y)                                        PACKAGES_PERMISSIONS_TABLE :=                                                      endif                                                                                                                                                                                                                                                    define ROOTFS_TINY4412_EXT4_CMD                                                           $(BR2_TARGET_ROOTFS_TINY4412_EXT4_MK_TOOL_PATH) $(TINY4412_EXT4_OPTS)[email protected]  $(TARGET_DIR)endef                                                                                                                                                                 $(eval $(call ROOTFS_TARGET,tiny4412_ext4))  


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系統。

Buildroot構建指南——根檔案系統(Rootfs)

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.