日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 运维知识 > windows >内容正文

windows

Buildroot构建指南——根文件系统(Rootfs)

發(fā)布時(shí)間:2023/12/15 windows 44 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Buildroot构建指南——根文件系统(Rootfs) 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

Buildroot的Rootfs構(gòu)建流程有一個(gè)大框架,有些部分是Buildroot系統(tǒng)做好的,有些細(xì)節(jié)需要自己來(lái)實(shí)現(xiàn),Rootfs也是Buildroot中最為復(fù)雜的部分。
Rootfs的構(gòu)建流程概述

Rootfs的構(gòu)建流程如圖1所示。其中淺色框中為Buildroot實(shí)現(xiàn)的框架,深紫色框?yàn)橛脩魧?shí)現(xiàn)的腳本。

Figure 1 Buildroot系統(tǒng)的rootfs制作

需要?dú)w納的幾點(diǎn)如下:

1.????? 新版buildroot已經(jīng)把rootfs的/etc/init.d/的rcS等啟動(dòng)腳本移到了package/initscripts/目錄下。

2.????? 系統(tǒng)默認(rèn)的rcS腳本不會(huì)直接做系統(tǒng)用戶態(tài)啟動(dòng)初始化操作,而是會(huì)調(diào)用/etc/init.d/目錄下的SXX開頭的腳本執(zhí)行系統(tǒng)用戶態(tài)啟動(dòng)的流程,其中XX是數(shù)字,數(shù)字越小的腳本優(yōu)先于數(shù)字大的腳本被調(diào)用。用于實(shí)際的系統(tǒng)用戶態(tài)啟動(dòng)腳本應(yīng)該以SXX這這種格式命名,install到output/target/etc/init.d/目錄下。

3.????? fakeroot是一個(gè)主機(jī)上使用的軟件包,它會(huì)被buildroot下載編譯,用于為構(gòu)建rootfs提供一個(gè)虛擬的root權(quán)限環(huán)境,只有在root權(quán)限下,才能把output/target/中的目錄和文件變成root用戶,并創(chuàng)建dev節(jié)點(diǎn)。有了fakeroot環(huán)境,系統(tǒng)構(gòu)建者無(wú)需獲取主機(jī)的root權(quán)限,也能在fakeroot下把文件改為root用戶,并制作root方式。

4.????? 用戶特定格式的rootfs制作腳本,最后都會(huì)被寫到一個(gè)腳本中,該腳本會(huì)在fakeroot環(huán)境中執(zhí)行。
如何構(gòu)建自己的Rootfs

清楚流程后可以在Buildroot環(huán)境下構(gòu)建自己的Rootfs了,以友善的tiny4412開發(fā)板的rootfs為例,demo一次構(gòu)建自己的rootfs的流程。

友善官方提供的rootfs壓縮包在光盤中是rootfs_qtopia_qt4-20141213.tar.gz,這個(gè)rootfs非常臃腫,我們需要對(duì)它進(jìn)行裁剪,最好是能夠用busybox做一個(gè)最小的rootfs出來(lái),但是由于暫時(shí)沒(méi)有摸清楚它的每一個(gè)細(xì)節(jié),怕直接編譯的rootfs無(wú)法啟動(dòng),因而我們最好在它官方的/etc/init.d/目錄下的啟動(dòng)腳本的基礎(chǔ)上做進(jìn)一步裁剪,先保證系統(tǒng)能夠啟動(dòng)。

1.????? 在buildroot/system/目錄中,拷貝一份skeleon/目錄到tiny4412_skeleton/ ,同時(shí)拷貝一份device_table.txt到tiny4412_device_table.txt,因?yàn)閠iny4412的文件系統(tǒng)中有特殊的部分需要修改,為了不影響通用的模板,所以進(jìn)行拷貝。

Figure 2 拷貝后的system/目錄中內(nèi)容

2.??????根據(jù)友善官方的rootfs內(nèi)容,對(duì)tiny4412_skeleton/etc/目錄進(jìn)行一些刪減和修改,刪減修改后截圖如下

Figure 3 刪減修改后的tiny4412_skeleton/etc/目錄

3.????? 將官方文件系統(tǒng)中,/etc/init.d/中的腳本cp到tiny4412_skeleton/etc/init.d/中,其實(shí)rcS更名為S00_tiny4412以匹配SXX的格式,XX代表數(shù)字。

4.????? 將tiny4412_device_table.txt稍作修改,去掉passwd等一些最小系統(tǒng)中用不上的內(nèi)容。

Figure4 修改后的tiny4412_device_table.txt文件

5.????? 由于tiny4412的文件系統(tǒng)比較特別,使用了友善專用的make_ext4fs工具來(lái)制作的,并且這是個(gè)不開源的bin程序,把一些參數(shù)和節(jié)點(diǎn)都在里面寫死了,因而我們需要單獨(dú)在fs/中,為制作tiny4412的文件系統(tǒng)添加方法。

6.????? 在fs/目錄下添加tiny4412_ext4/目錄,將友善官方提供的make_ext4fs工具cp到該目錄下,當(dāng)然Config.in文件和tiny4412_ext4.mk腳本是必不可少的的。別忘了在fs/Config.in中將新添加的配置文件Config.in? source進(jìn)去哦!

?Figure5 專為制作tiny4412 ext4文件系統(tǒng)而添加的腳本目錄

Figure6 tiny4412_ext4/目錄中的內(nèi)容

?

?Figure7 在fs/Config.in中將新加入的Config.in關(guān)聯(lián)進(jìn)去

7.????? 在tiny4412_ext4/Config.in中加入以下的配置代碼,其中BR2_TARGET_ROOTFS_TINY4412_EXT4是必不可少,讓系統(tǒng)能夠識(shí)別的文件系統(tǒng)類型的變量。剩下的變量則是可在menuconfig中配置的,文件系統(tǒng)大小,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構(gòu)建腳本。制作腳本的核心其實(shí)也就是ROOTFS_TINY4412_EXT4_CMD函數(shù),它會(huì)在fs/common.mk腳本中,被寫入fakeroot的執(zhí)行腳本,然后會(huì)在fakeroot環(huán)境中被執(zhí)行。ROOTFS_TINY4412_EXT4_CMD 函數(shù) 調(diào)用make_ext4fs工具根據(jù)配置的參數(shù),生成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)$@ $(TARGET_DIR) endef $(eval $(call ROOTFS_TARGET,tiny4412_ext4))

?9.????? 接下來(lái)是make menuconfig的配置了。在menuconfig -->? Systemconfiguration中,customer skeleton path 和 path to permissiontable 這兩項(xiàng)填充為1—4步驟中,我們所拷貝修改過(guò)的tiny4412_skeleton和tiny4412_device_table.txt。

Figure8 menuconfig -->? Systemconfiguration的配置

10.? 在menuconfig -->?? Filesystemimages中,選中我們剛剛特制的ext4 rootfs tor tiny4412,剩下的參數(shù)估計(jì)被make_ext4fs工具程序內(nèi)部寫死了,用默認(rèn)的就行。另外,在該選項(xiàng)中,busybox被默認(rèn)選中,所以busybox中的所有軟件默認(rèn)都被當(dāng)做應(yīng)用編譯和install到output/target/目錄下。

Figure9 menuconfig --> ??Filesystem images的配置

11.? 保存之后,make rootfs-tiny4412_ext4 就生成我們自己的文件系統(tǒng)了。用tiny4412的SD卡燒錄進(jìn)去,是可以boot起來(lái)的,對(duì)S00_tiny4412腳本進(jìn)行進(jìn)一步裁剪后,我們可以得到一個(gè)在tiny4412開發(fā)板上最小的能boot起來(lái)的Linux系統(tǒng)。


原文鏈接:https://blog.csdn.net/zhou_chenz/article/details/52357550

?

?

?

總結(jié)

以上是生活随笔為你收集整理的Buildroot构建指南——根文件系统(Rootfs)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。