一、導(dǎo)讀
本文描述buildroot中支持的三種系統(tǒng)初始化方式以及buildroot在實(shí)際構(gòu)建過(guò)程中是如何工作的。
二、系統(tǒng)初始化的三種方式
我們已經(jīng)知道,在linux內(nèi)核啟動(dòng)后期會(huì)嘗試加載用戶空間的init程序,init程序是由內(nèi)核啟動(dòng)的第一個(gè)用戶空間程序(PID為1),該程序負(fù)責(zé)啟動(dòng)用戶空間的服務(wù)和程序(例如:Web服務(wù)、圖形應(yīng)用程序、其他網(wǎng)絡(luò)服務(wù)等)。
在使用buildroot構(gòu)建linux根文件系統(tǒng)時(shí),其支持三種不同類型的初始化系統(tǒng),可以在“System configuration”選項(xiàng)下的“Init system”選擇項(xiàng)中進(jìn)行選擇:
(1)第一種是“BusyBox”
BusyBox 實(shí)現(xiàn)了基本的 init 程序,對(duì)于大多數(shù)嵌入式系統(tǒng)而言,選擇這種方式已經(jīng)足夠了。啟用“BR2_INIT_BUSYBOX”將確保 BusyBox 會(huì)生成并安裝其 init 程序,這也是 Buildroot 的默認(rèn)解決方案。
BusyBox init程序會(huì)在啟動(dòng)時(shí)去讀取/etc/inittab文件。除了掛載一些重要的文件系統(tǒng)之外,默認(rèn)的 inittab 的主要工作是啟動(dòng)/etc/init.d/rcS shell腳本,并啟動(dòng)一個(gè) getty 程序(用于提供登錄提示)。
(2)第二種是“systemV”
該種解決方案使用傳統(tǒng)的sysvinit程序,位于Buildroot目錄package/sysvinit中,在Upstart或Systemd出現(xiàn)之前,這是大多數(shù)桌面Linux發(fā)行版使用的解決方案。Sysvinit同樣使用inittab文件(其語(yǔ)法與 BusyBox 中的語(yǔ)法略有不同)。與此init解決方案一起安裝的默認(rèn)inittab 位于package/sysvinit/inittab中。
(3)第三種是“systemd”
systemd是用于Linux的新一代init系統(tǒng)。它的功能遠(yuǎn)遠(yuǎn)超過(guò)傳統(tǒng)的init程序:強(qiáng)大的并行處理能力、使用socket和D-Bus激活啟動(dòng)服務(wù)、按需啟動(dòng)守護(hù)程序、使用Linux控制組跟蹤進(jìn)程、支持對(duì)系統(tǒng)狀態(tài)進(jìn)行快照和還原等等。
systemd在相對(duì)復(fù)雜的嵌入式系統(tǒng)上很有用,例如:需要D-Bus和服務(wù)之間相互通信的系統(tǒng)。值得注意的是systemd會(huì)帶來(lái)了大量的大型依賴項(xiàng),例如dbus、udev等。
buildroot如何工作
本小節(jié)描述buildroot的工作機(jī)制。
在《buildroot使用筆記-01 | 常規(guī)使用步驟》一文中,對(duì)buildroot的目錄結(jié)構(gòu)進(jìn)行了分析,可以明確知道:buildroot基本上是一組Makefile文件,這些文件可以對(duì)所需軟件進(jìn)行下載、配置和編譯。除此之外,buildroot中還包含了各種軟件包的補(bǔ)?。褐饕悄切┥婕敖徊婢幾g工具鏈的軟件包,例如:gcc、binutils和uClibc等。
對(duì)于軟件包來(lái)說(shuō),每個(gè)軟件包基本上只有一個(gè)Makefile文件,它們以.mk擴(kuò)展名進(jìn)行命名。在buildroot中,Makefile分成許多不同的部分:
toolchain/目錄包含與交叉編譯工具鏈相關(guān)的所有軟件的Makefile和相關(guān)文件:binutils、gcc、gdb、kernel-header 和 uClibc。
arch/目錄包含 Buildroot 支持的所有處理器體系架構(gòu)的定義。
package/目錄包含所有用戶空間的工具和庫(kù)(Buildroot 可以將它們編譯并添加到目標(biāo)根文件系統(tǒng))的 Makefile 和相關(guān)文件,每個(gè)軟件包都有一個(gè)子目錄。
linux/目錄包含 Linux 內(nèi)核的 Makefile 和相關(guān)文件。
boot/目錄包含 Buildroot 支持的 Bootloader 的 Makefile 和相關(guān)文件。
system/目錄包含對(duì)系統(tǒng)集成的支持,例如目標(biāo)文件系統(tǒng)框架 skeleton 和 init 系統(tǒng)的選擇。
fs/目錄包含與生成目標(biāo)根文件系統(tǒng)鏡像有關(guān)的軟件的 Makefile 和相關(guān)文件。
每個(gè)目錄至少包含2個(gè)文件:
xxx.mk 是用于下載、配置、編譯和安裝軟件包的Makefile。
Config.in 是配置工具描述文件的一部分,用于描述與軟件包相關(guān)的選項(xiàng)。
在buildroot配置完成后,主Makefile執(zhí)行的具體操作步驟如下:
(1)創(chuàng)建所有的輸出目錄:staging、target、build 等(默認(rèn)在output/目錄中,我們可以使用“O=”來(lái)指定另一個(gè)路徑)。
(2)生成工具鏈目標(biāo)。當(dāng)使用內(nèi)部工具鏈時(shí),這意味著buildroot會(huì)生成交叉編譯工具鏈。當(dāng)使用外部工具鏈時(shí),這意味著將檢查外部工具鏈的功能并將其導(dǎo)入到Buildroot環(huán)境中。
(3)生成TARGETS變量中列出的所有目標(biāo)。該變量由所有組件的 Makefile 填充。生成這些目標(biāo)時(shí)將生成用戶空間軟件包(庫(kù)、程序集)、內(nèi)核、引導(dǎo)加載程序的編譯以及根文件系統(tǒng)鏡像,在該過(guò)程中,會(huì)聯(lián)網(wǎng)命中、下載所需要的軟件包,然后對(duì)其進(jìn)行編譯構(gòu)建。在編譯構(gòu)建過(guò)程中,單個(gè)操作步驟一般會(huì)顯示對(duì)應(yīng)的下載進(jìn)度提示,過(guò)程進(jìn)度提示等。在執(zhí)行對(duì)應(yīng)的操作時(shí),還會(huì)有相應(yīng)的提示,類似于下圖所示的信息:
審核編輯:劉清
-
PID控制
+關(guān)注
關(guān)注
10文章
463瀏覽量
41949 -
LINUX內(nèi)核
+關(guān)注
關(guān)注
1文章
317瀏覽量
22864 -
gcc編譯器
+關(guān)注
關(guān)注
0文章
78瀏覽量
3876
原文標(biāo)題:buildroot使用筆記-03 | 系統(tǒng)初始化的三種方式和buildroot的工作方式
文章出處:【微信號(hào):嵌入式小生,微信公眾號(hào):嵌入式小生】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
RT-Thread自動(dòng)初始化詳解

自動(dòng)初始化機(jī)制原理詳解

PL-232驅(qū)動(dòng)--三種系統(tǒng)
STM32支持三種啟動(dòng)方式
RT-Thread系統(tǒng)初始化與啟動(dòng)流程詳細(xì)描述
手機(jī)模塊初始化向?qū)?/a>
LINUX系統(tǒng)引導(dǎo)和初始化-LINUX內(nèi)核解讀
8253初始化程序分享_8253應(yīng)用案例

霍爾無(wú)刷電機(jī)如何進(jìn)行程序初始化?
壓供電系統(tǒng)的三種運(yùn)行方式

FPGA的三種配置方式詳解
Armlinux內(nèi)核移植及系統(tǒng)初始化過(guò)程分析
GraniStudio:初始化例程

評(píng)論