版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1第4章嵌入式linux的構(gòu)建2嵌入式開發(fā)流程建立交叉編譯環(huán)境啟動(dòng)代碼Bootloader的實(shí)現(xiàn)/移植kernel的配置/移植/編譯根文件系統(tǒng)Cramfs的實(shí)現(xiàn)33主要內(nèi)容4.1嵌入式Bootloader技術(shù)4.2嵌入式根文件系統(tǒng)構(gòu)建4.3Linux內(nèi)核及啟動(dòng)流程4.4基于ARM目標(biāo)板的Linux系統(tǒng)及應(yīng)用程序燒定4第4章嵌入式linux的構(gòu)建-Bootloader4.1Bootloader簡(jiǎn)介4.2常用Bootloader
的介紹4.3Bootloader
的燒寫和使用5第4章嵌入式linux的構(gòu)建-BootloaderBootloader簡(jiǎn)介常用Bootloader
的介紹Bootloader
的燒寫和使用64.1Bootloader簡(jiǎn)介4.1.1Bootloader的概念 4.1.2Bootloader
的啟動(dòng)4.1.3Bootloader
的種類 74.1.1Bootloader的概念引入:對(duì)于計(jì)算機(jī)系統(tǒng)來說,從開機(jī)上電到操作系統(tǒng)啟動(dòng)需要一個(gè)引導(dǎo)過程。嵌入式Linux系統(tǒng)同樣離不開引導(dǎo)程序,這個(gè)引導(dǎo)程序就叫做BootLoader。對(duì)比:回憶一下PC的體系結(jié)構(gòu)我們可以知道,PC機(jī)中的引導(dǎo)加載程序由BIOS(其本質(zhì)就是一段固件程序)和位于硬盤MBR(MasterBootRecord,引導(dǎo)記錄)中的引導(dǎo)程序一起組成。BIOS在完成硬件檢測(cè)和資源分配后,將硬盤MBR中的引導(dǎo)程序讀到系統(tǒng)的RAM中,然后將控制權(quán)交給引導(dǎo)程序。引導(dǎo)程序的主要運(yùn)行任務(wù)就是將內(nèi)核映象從硬盤上讀到RAM中然后跳轉(zhuǎn)到內(nèi)核的入口點(diǎn)去運(yùn)行,也即開始啟動(dòng)操作系統(tǒng)。84.1.1Bootloader的概念而在嵌入式系統(tǒng)中,通常并沒有像BIOS那樣的固件程序。因此整個(gè)系統(tǒng)的加載啟動(dòng)任務(wù)就完全由BootLoader來完成.比如在一個(gè)基于ARM4TDMIcore的嵌入式系統(tǒng)中,系統(tǒng)在上電或復(fù)位時(shí)都從地址0x00000000開始執(zhí)行.而在這個(gè)地址處安排的通常就是系統(tǒng)的BootLoader程序。
94.1.1Bootloader的概念Bootloader的概念和功能BootLoader是一段匯編代碼,存放在MBR主引導(dǎo)記錄中,它的主要作用就是將操作系統(tǒng)啟動(dòng)代碼讀入內(nèi)存。從功能上看,Bootloader就是在操作系統(tǒng)內(nèi)核或用戶應(yīng)用程序運(yùn)行之前運(yùn)行的一段小程序。通過這段小程序可以初始化硬件設(shè)備、建立內(nèi)存空間的映射圖,從而將系統(tǒng)的軟硬件環(huán)境帶到一個(gè)合適的狀態(tài),以便為最終調(diào)用操作系統(tǒng)內(nèi)核或用戶應(yīng)用程序準(zhǔn)備好正確的環(huán)境。104.1.1Bootloader的概念每種CPU體系結(jié)構(gòu)都有不同的BootLoader。有些BootLoader也支持多種體系結(jié)構(gòu)的CPU,比如U-Boot就同時(shí)支持ARM體系結(jié)構(gòu)和MIPS體系結(jié)構(gòu)。除了依賴于CPU的體系結(jié)構(gòu)外,BootLoader實(shí)際上也依賴于具體的嵌入式板級(jí)設(shè)備的配置。這也就是說,對(duì)于兩塊不同的嵌入式板而言,即使它們是基于同一種CPU而構(gòu)建的,要想讓運(yùn)行在一塊板子上的BootLoader程序也能運(yùn)行在另一塊板子上,通常也都需要修改BootLoader的源程序。114.1.1Bootloader的概念Bootlaoder的不統(tǒng)一性/不通用性特別是在嵌入式領(lǐng)域,為嵌入式系統(tǒng)建立一個(gè)通用的BootLoader是很困難的。當(dāng)然,我們可以歸納出一些通用的概念來,以便我們了解特定BootLoader的設(shè)計(jì)與實(shí)現(xiàn)。當(dāng)前在嵌入式Linux系統(tǒng)中,有了一些流行和通用的Bootloader框架?,F(xiàn)實(shí)開發(fā)中,我們都是采用現(xiàn)有的BootLoader進(jìn)行修改Vivi,blob,u-boot是最常見的,它們都是開源的Vivi是三星公司的,我們的實(shí)驗(yàn)板子就是使用的它124.1.2Bootloader的啟動(dòng)嵌入式Linux系統(tǒng)也是通過Bootloader引導(dǎo)啟動(dòng)的。一上電,就要執(zhí)行Bootloader來初始化系統(tǒng)。系統(tǒng)加電或復(fù)位后,所有CPU都會(huì)從某個(gè)地址開始執(zhí)行,具體的地址值是由處理器設(shè)計(jì)決定的。比如,基于ARM4TDMIcore的CPU在復(fù)位時(shí)通常都從地址0x00000000取它的第一條指令。而基于ARM處理器構(gòu)建的嵌入式系統(tǒng)通常都有某種類型的固態(tài)存儲(chǔ)設(shè)備(比如:ROM、EEPROM或FLASH等)被映射到這個(gè)預(yù)先安排的地址上。因此在系統(tǒng)加電后,CPU將首先執(zhí)行Bootloader程序。1313典型存儲(chǔ)空間分配結(jié)構(gòu)bootloader啟動(dòng)參數(shù)內(nèi)核根文件系統(tǒng)144.1.2Bootloader的啟動(dòng)主機(jī)和目標(biāo)機(jī)之間一般通過串口建立連接,BootLoader軟件在執(zhí)行時(shí)通常會(huì)通過串口來進(jìn)行I/O,比如:輸出打印信息到串口,從串口讀取用戶控制字符等。Bootloader多數(shù)是兩階段的啟動(dòng)過程第一個(gè)啟動(dòng)階段是和硬件平臺(tái)相關(guān)的,大都采用匯編程序編寫,以達(dá)到短小精悍的目的。第二個(gè)啟動(dòng)階段是和硬件平臺(tái)無關(guān)的,大都采用C語(yǔ)言編寫,這樣可以實(shí)現(xiàn)復(fù)雜的功能,而且代碼會(huì)具有更好的可讀性和可移植性。154.1.2Bootloader的啟動(dòng)大多數(shù)Bootloader都包含兩種不同的操作模式:“啟動(dòng)加載”模式和“下載”模式。最終用戶的角度看,BootLoader的作用就是用來加載操作系統(tǒng)。16Bootloader-啟動(dòng)舉例17Bootloader-啟動(dòng)舉例18Bootloader-啟動(dòng)舉例194.1.2Bootloader的啟動(dòng)網(wǎng)絡(luò)啟動(dòng)方式
20諸如u-boot的BootLoader本身集成網(wǎng)絡(luò)功能支持這種方式開發(fā)板不需要配置較大的存儲(chǔ)介質(zhì),跟無盤工作站有點(diǎn)類似。但是使用這種啟動(dòng)方式之前,需要把BootLoader安裝到板上的EPROM或者Flash中。BootLoader通過以太網(wǎng)接口遠(yuǎn)程下載Linux內(nèi)核映象或者文件系統(tǒng)。
BootLoader下載文件一般都使用TFTP網(wǎng)絡(luò)協(xié)議,還可以通過DHCP的方式動(dòng)態(tài)配置IP地址。
4.1.2Bootloader的啟動(dòng)214.1.2Bootloader的啟動(dòng)磁盤啟動(dòng)方式傳統(tǒng)的Linux系統(tǒng)運(yùn)行在臺(tái)式機(jī)或者服務(wù)器上,這些計(jì)算機(jī)一般都使用BIOS引導(dǎo),并且使用磁盤作為存儲(chǔ)介質(zhì)。Linux傳統(tǒng)上是通過Lilo(LinuxLoader)引導(dǎo)的,后來又出現(xiàn)了GNU的軟件Grub(GrandUnifiedBootloader)。這兩種Bootloader廣泛應(yīng)用在X86的Linux系統(tǒng)上。在嵌入式系統(tǒng)領(lǐng)域應(yīng)用的并不多。224.1.2Bootloader的啟動(dòng)Flash啟動(dòng)方式大多數(shù)嵌入式系統(tǒng)上都使用Flash存儲(chǔ)介質(zhì),NORFlash(線性Flash)使用最為普遍。Bootloader一般放在Flash的底端或者頂端,這需要根據(jù)處理器的復(fù)位向量來進(jìn)行設(shè)置??梢耘渲贸蒑TD設(shè)備來訪問Flash分區(qū)。
234.1.3Bootloader的種類嵌入式系統(tǒng)世界已經(jīng)有各種各樣的Bootloader,種類劃分的方法也不是唯一的。一般可以按照它所支持處理器體系結(jié)構(gòu)不同進(jìn)行劃分。
具體參見表4.1嵌入式比較常見的Uboot,vivi和blobPC系統(tǒng)上是grub和lilo24Bootloader的種類BootloaderMonitor描述X86ARMPowerPCLilo否Linux磁盤引導(dǎo)程序是否否Grub否GNU引導(dǎo)的Lilo替代程序是否否Loadlin否從DOS引導(dǎo)Linux是否否ROLO否從ROM引導(dǎo)Linux而不需要BIOS是否否Etherboot否通過以太網(wǎng)卡啟動(dòng)Linux引導(dǎo)程序是否否LinuxBIOS否完全替代BUIS的Linux引導(dǎo)程序是否否Blob否LART等硬件平臺(tái)的引導(dǎo)程序否是否U-Boot是通用引導(dǎo)程序是是是RedBoot是基于eCos的引導(dǎo)程序是是是25第4章嵌入式linux的構(gòu)建4.1Bootloader簡(jiǎn)介4.2常用Bootloader
的介紹4.3Bootloader
的燒寫和使用264.2常用Bootloader的介紹1、vivivivi是韓國(guó)Mizi公司開發(fā)的Bootloader,適用于ARM9處理器。2、RedBootRedBoot也稱作紅帽(RedHat)嵌入式調(diào)試引導(dǎo)程序,是一種用于嵌入式系統(tǒng)的獨(dú)立開放源代碼引導(dǎo)/裝載器。3、U-BootU-Boot(UniversalBootloader)是一款目前功能較為強(qiáng)大的開源Bootloader程序,它支持多種處理器平臺(tái),包括ARM、MIPS等。274.2.2U-BootU-Boot支持的處理器構(gòu)架包括PowerPC,ARM,MIPS,x86U-Boot的功能強(qiáng)大,涵蓋了絕大部分處理器構(gòu)架,提供大量外設(shè)驅(qū)動(dòng),支持多個(gè)文件系統(tǒng),附帶調(diào)試、腳本和引導(dǎo)等工具
U-boot可配置性非常強(qiáng)
,它所支持的命令也可以通過配置來增減。U-boot的命令主要包括以下幾類:信息類命令、環(huán)境變量類命令、存儲(chǔ)器命令、Flash專用命令、載類命令、啟動(dòng)類命令和Cache類命令,參見表4.228vivi簡(jiǎn)介vivi是由韓國(guó)MIZI公司開發(fā)的專門用于SAMSUNGARM架構(gòu)的一種Bootloader
。它同樣支持啟動(dòng)加載模式和下載工作模式。在下載模式下,vivi為用戶提供一個(gè)命令行人機(jī)接口,通過這個(gè)人機(jī)接口可以使用vivi提供的一些命令。29vivi簡(jiǎn)介如果嵌入式系統(tǒng)沒有鍵盤和顯示,那么可以利用vivi中的串口,將其和宿主機(jī)連接起來,利用宿主機(jī)中的串口軟件(如windows中的超級(jí)終端或者Linux中的minicom)來控制。30vivi的啟動(dòng)過程分析Bootloader的啟動(dòng)過程分兩個(gè)階段-stage1和stage2。依賴CPU體系結(jié)構(gòu)的代碼通常放在stage1中,而且通常用匯編語(yǔ)言實(shí)現(xiàn)。stage2中的代碼通常用C語(yǔ)言實(shí)現(xiàn),這樣可以實(shí)現(xiàn)更復(fù)雜的功能,而且代碼會(huì)具有更好的可讀性和可移植性。Bootloader技術(shù)內(nèi)幕31Bootloader的stage1通常包括以下步驟:
1、硬件設(shè)備初始化
2、為加載stage2準(zhǔn)備RAM空間
3、復(fù)制stage2到RAM空間
4、設(shè)置好堆棧
5、跳轉(zhuǎn)到stage2的C入口點(diǎn)vivi的啟動(dòng)過程分析32Bootloader的stage2通常包括以下步驟:
1、初始化本階段要用到的硬件設(shè)備
2、檢測(cè)系統(tǒng)內(nèi)存映射
3、將kernel映像和根文件系統(tǒng)映像從
Flash上讀到RAM空間
4、為內(nèi)核設(shè)置啟動(dòng)參數(shù)
5、調(diào)用內(nèi)核vivi的啟動(dòng)過程分析3333把內(nèi)核(kernel)從flash復(fù)制到RAM,然后啟動(dòng)它;初始化硬件;下載程序并寫入flash(通常由串口或者網(wǎng)口先把內(nèi)核下載到RAM中,然后寫入flash);檢測(cè)目標(biāo)板(bootloader會(huì)有一些簡(jiǎn)單的代碼用以測(cè)試目標(biāo)板硬件的好壞)。vivi的作用3434vivi代碼分析vivi的第一階段主要完成了依賴于CPU的體系結(jié)構(gòu)硬件初始化,包括禁止中斷、初始化串口、復(fù)制第二階段到RAM中等。由于這些代碼是和硬件緊密相關(guān)的,因此要求大家在閱讀時(shí)需要對(duì)照S3C2410處理器的數(shù)據(jù)手冊(cè),查閱相關(guān)的寄存器的描述,以便更好地理解。這些匯編代碼全部就集中在vivi\arch\s3c2410目錄下的head.S這一個(gè)匯編文件中,當(dāng)然還有相關(guān)的頭文件。35vivi的第二階段的入口就是init/main.c,按照源代碼的組織流程,根據(jù)模塊化劃分的原則,共分為8個(gè)功能模塊即八個(gè)步驟,在源代碼的注釋中以step非常清晰的給出了區(qū)分。第一步:vivi從main()函數(shù)開始執(zhí)行,函數(shù)開始通過putstr(vivi_bannner)打印出vivi的版本。第二步:對(duì)開發(fā)板初始化board_init函數(shù),主要完成時(shí)鐘初始化(init_time())和通用I/O口設(shè)置(set_gpios()),在/arch/s3c2410/smdk.c中vivi代碼分析3636第三步:進(jìn)行內(nèi)存映射初始化和內(nèi)存管理單元(MMU)的初始化工作,在mmu.c文件中。第四步:初始化堆,函數(shù)heap_init()定義在\lib\heap.c文件中。第五步:初始化mtd設(shè)備,用mtd_dev_init()函數(shù)第六步:配置參數(shù),主要是init_priv_data函數(shù)。第七步:提供vivi人機(jī)接口的各種命令。第八步:進(jìn)入Bootloader的兩種模式之一。vivi代碼分析3737如何進(jìn)入vivi界面1、進(jìn)行硬件連接連接電源,將5V電源線的連到UP-NETARM2410-S的電源接口;連接串口線,一端連接PC的串口,另一端連接到UP-NETARM2410-S的串口(上面的);連接網(wǎng)線,將隨機(jī)附帶的交叉網(wǎng)線把UP-NETARM2410-S靠近于電源接口的網(wǎng)口和PC機(jī)的網(wǎng)口連接好。38如何進(jìn)入vivi界面2、進(jìn)入宿主機(jī)中的串口軟件:windows中的超級(jí)終端/Linux中的minicom運(yùn)行Windows系統(tǒng)下(以WindowsXP為例)開始→所有程序→附件→通訊→超級(jí)終端(HyperTerminal)。請(qǐng)大家注意:在windowsxp操作系統(tǒng)下,當(dāng)初次建立超級(jí)終端的時(shí)候,會(huì)出現(xiàn)如下對(duì)話框,請(qǐng)?jiān)凇踔写蛏稀?并選擇“否”39如何進(jìn)入vivi界面新建一個(gè)通信終端。如果要求輸入?yún)^(qū)號(hào)、電話號(hào)碼等信息請(qǐng)隨意輸入,出現(xiàn)如圖5.2.1所示對(duì)話框時(shí),為所建超級(jí)終端取名為arm,可以為其選一個(gè)圖標(biāo)。單擊“確定”按鈕。圖5.2.1創(chuàng)建超級(jí)終端40如何進(jìn)入vivi界面選擇ARM開發(fā)平臺(tái)實(shí)際連接的PC機(jī)串口(如COM1),按確定后出現(xiàn)如圖5.2.2所示的屬性對(duì)話框,設(shè)置通信的格式和協(xié)議。這里波特率為115200,數(shù)據(jù)位8,無奇偶校驗(yàn),停止位1,無數(shù)據(jù)流控制。圖5.2.2設(shè)置串行口41如何進(jìn)入vivi界面完成新建超級(jí)終端的設(shè)置以后,可以選擇超級(jí)終端文件菜單中的另存為,把設(shè)置好的超級(jí)終端保存在桌面上,以備后用。用串口線將PC機(jī)串口和平臺(tái)正確連接后,就可以在超級(jí)終端上看到程序輸出的信息了.42如何進(jìn)入vivi界面3、打開電源開關(guān),系統(tǒng)會(huì)由VIVI開始引導(dǎo)。正常啟動(dòng)時(shí)會(huì)顯示啟動(dòng)信息到“PressReturntostarttheLINUXnow,anyotherkeyforvivi”,不進(jìn)行任何操作等待30S或按回車則啟動(dòng)進(jìn)入linux系統(tǒng),按除回車鍵外的其它鍵則進(jìn)入vivi控制臺(tái),如圖5.3.1。在這里輸入“boot”,進(jìn)入LINUX系統(tǒng);輸入“bootucos”進(jìn)入ucos系統(tǒng)。43圖5.3.1vivi控制臺(tái)輸入“boot”后會(huì)引導(dǎo)kernel,啟動(dòng)linux系統(tǒng),見5.3.2.
44在該應(yīng)用程序目錄下,可以掛載nfs文件系統(tǒng),通過“l(fā)s”查看應(yīng)用程序45vivi的文件結(jié)構(gòu)(1)arch:此目錄包括了所有VIVI支持的目標(biāo)板的子目錄,存儲(chǔ)了與CPU架構(gòu)有關(guān)的代碼文件。(第一階段源碼在arch中的head.S文件中,都是匯編語(yǔ)言)(2)Documentation:存放了許多文檔,包括VIVI使用指南。(3)drivers:目標(biāo)板的各種設(shè)備驅(qū)動(dòng)程序,比如串口、NandFlash和NorFlash等,實(shí)現(xiàn)對(duì)設(shè)備的讀寫和控制。46vivi的文件結(jié)構(gòu)(4)include:頭文件的公共目錄,所有vivi源代碼所需的頭文件目錄(5)init:此目錄只有main.c和version.c兩個(gè)文件。與普通的C程序一樣,VIVI將從main函數(shù)開始執(zhí)行(vivi第二階段的入口函數(shù)),main函數(shù)調(diào)用lib下的函數(shù)實(shí)現(xiàn)第二階段工作。(6)lib:一些平臺(tái)公共的接口代碼,第二階段的初始化代碼和vivi常用命令的實(shí)現(xiàn)。47vivi的文件結(jié)構(gòu)(7)scripts:此目錄存放了配置所需的腳本文件,如Menuconfig和Configure文件,以方便對(duì)VIVI的配置。(8)test:存放一些測(cè)試代碼文件。(9)util:存放與NANDFlash燒寫image相關(guān)的工具實(shí)現(xiàn)代碼48第4章嵌入式linux的構(gòu)建4.1Bootloader簡(jiǎn)介4.2常用Bootloader
的介紹4.3Bootloader
的燒寫和使用494.3Bootloader(vivi)的燒寫和使用linux系統(tǒng)的移植主要包括四個(gè)部分:燒寫2410-Slinux
操作系統(tǒng)包括燒寫vivi,kernel,root三個(gè)步驟,除此我們還要燒寫yaffs.tar,這四個(gè)文件為:vivi----linux操作系統(tǒng)啟動(dòng)的bootloader;zImage----linux操作系統(tǒng)內(nèi)核;root.cramfs----根文件系統(tǒng);yaffs.tar----應(yīng)用程序50燒寫Vivi既可通串口燒寫也可通過jtag來燒寫;zImage和root.cramfs通過串口來燒寫;應(yīng)用程序壓縮包通過網(wǎng)口來下載。514.3.1Bootloader(vivi)的燒寫vivi的燒寫有兩種方式:通過JTAG口燒寫和通過串口燒寫。
在Flash被格式化且內(nèi)存里也沒有Bootloader的時(shí)候,此時(shí)目標(biāo)板是一個(gè)完全干凈的開發(fā)板,就需要通過JTAG口把Bootloader燒寫到板子上串口燒寫主要用于更新和升級(jí)Bootloader。在Windows下可以通過超級(jí)終端來訪問目標(biāo)板來進(jìn)行燒寫,在Linux下可以通過MiniCom燒寫。52板子上沒有任何東西(包括BootLoader)的時(shí)候,需要專門的工具對(duì)vivi等BootLoader進(jìn)行燒寫B(tài)ootloader-舉例手冊(cè)第9-19頁(yè)53板子上有諸如vivi等BootLoader后,再進(jìn)行升級(jí),就可以利用Target上已經(jīng)存在的(舊的)BootLoader了Bootloader-舉例544.3.2Bootloader的使用工作正常的時(shí)候,Bootloader處于加載模式或者交換模式如使用vivi的時(shí)候,其交互模式的界面是55利用vivi升級(jí)內(nèi)核Bootloader-舉例56利用vivi升級(jí)文件系統(tǒng)Bootloader-舉例574.4Linux內(nèi)核及啟動(dòng)過程Linux內(nèi)核結(jié)構(gòu)Linux內(nèi)核配置、編譯Linux內(nèi)核移植58Linux系統(tǒng)實(shí)際上由兩個(gè)比較獨(dú)立的部分組成,即內(nèi)核部分和系統(tǒng)部分(根文件系統(tǒng))。59Linux內(nèi)核主要由5個(gè)子系統(tǒng)組成:進(jìn)程調(diào)度內(nèi)存管理虛擬文件系統(tǒng)網(wǎng)絡(luò)接口進(jìn)程間通信。Linux內(nèi)核結(jié)構(gòu)60Linux內(nèi)核結(jié)構(gòu)-Linux源碼位置61/include子目錄包含了建立內(nèi)核代碼時(shí)所需的大部分包含文件,/init子目錄包含了內(nèi)核的初始化代碼-內(nèi)核工作起點(diǎn)。/arch子目錄包含了所有硬件結(jié)構(gòu)特定的內(nèi)核代碼。如:arm、i386、alpha。/drivers子目錄包含了內(nèi)核中所有的設(shè)備驅(qū)動(dòng)程序,如塊設(shè)備和SCSI設(shè)備。/fs子目錄包含了所有的文件系統(tǒng)的代碼,如:ext2,vfat等。/net子目錄包含了內(nèi)核的連網(wǎng)代碼。/mm子目錄包含了所有內(nèi)存管理代碼。/ipc子目錄包含了進(jìn)程間通信代碼。/kernel子目錄包含了主內(nèi)核代碼。Linux內(nèi)核結(jié)構(gòu)-Linux內(nèi)核子目錄62Linux內(nèi)核配置系統(tǒng)的組成1、Makefile:頂層和各源代碼中的makefile2、配置文件.config文件,包含配置選項(xiàng),存放內(nèi)核配置后結(jié)果。Rules.make:規(guī)則文件,被所有的Makefile使用。Linux內(nèi)核配置編譯63Linux內(nèi)核配置系統(tǒng)的組成3、配置工具基于字符的界面make
config:進(jìn)入命令行,可以一行一行的配置,但使用不十分方便?;?/p>
Ncurses
的文本模式圖形用戶界面make
menuconfig:大多數(shù)開發(fā)人員使用的Linux內(nèi)核編譯菜單,使用方便?;?/p>
Xwindows
圖形界面的用戶配置界面make
xconfig。Linux內(nèi)核配置編譯6464Linux內(nèi)核配置與裁減下載Linux內(nèi)核源碼到/usr/src目錄下 解壓該文件進(jìn)入/usr/src/linux-2.x.xx目錄,執(zhí)行makemenuconfig命令就可以進(jìn)入配置界面。Linux內(nèi)核配置編譯65Makemenuconfig的圖形配置界面6666Linux內(nèi)核配置與裁減在啟動(dòng)配置菜單后,選擇相應(yīng)的配置時(shí),有三種選擇方式,它們分別代表的含義如下。N——不將該功能編譯進(jìn)內(nèi)核Y——將該功能編譯進(jìn)內(nèi)核M——將該功能編譯成可以在需要時(shí)動(dòng)態(tài)插入到內(nèi)核中的模塊Linux內(nèi)核配置編譯6767Linux內(nèi)核編譯在完成內(nèi)核的裁減之后,內(nèi)核的編譯要執(zhí)行以下命令:makedep:對(duì)內(nèi)核原代碼的文件進(jìn)行完整性和依賴性進(jìn)行檢驗(yàn),確保關(guān)鍵文件在正確的位置。makeclean:編譯內(nèi)核之前先把環(huán)境給清理干凈。有時(shí)也可用makerealclean或makemrproper來徹底清除相關(guān)依賴,保證沒有不正確的.o文件存在。makezImage:創(chuàng)建內(nèi)核鏡像文件makemodules:創(chuàng)建內(nèi)核模塊,若不創(chuàng)建內(nèi)核模塊,這步可以不要。Linux內(nèi)核配置編譯6868Linux移植Linux移植其實(shí)質(zhì)是獲取某一版本的Linux內(nèi)核源碼,根據(jù)具體目標(biāo)平臺(tái)對(duì)這源碼進(jìn)行必要的改寫(主要是修改體系結(jié)構(gòu)相關(guān)部分),然后添加一些外設(shè)的驅(qū)動(dòng),打造一款適合于目標(biāo)平臺(tái)的新操作系統(tǒng),對(duì)該系統(tǒng)進(jìn)行針對(duì)目標(biāo)平臺(tái)的交叉編譯,生成一個(gè)內(nèi)核映象文件,最后通過一些手段把該映象文件燒寫(安裝)到目標(biāo)平臺(tái)中?;贏RM開發(fā)板的Linux內(nèi)核移植69交叉編譯環(huán)境的搭建修改Linux內(nèi)核源碼linux
的移植主要包含啟動(dòng)代碼的修改,內(nèi)核的鏈接及裝入,參數(shù)傳遞,內(nèi)核引導(dǎo)幾個(gè)部分?;贏RM目標(biāo)板的Linux內(nèi)核配置裁減與編譯基于ARM開發(fā)板的Linux內(nèi)核移植70704.2嵌入式Linux根文件系統(tǒng)構(gòu)建Linux文件系統(tǒng)介紹根文件系統(tǒng)的目錄結(jié)構(gòu)BusyBox生成工具集根文件系統(tǒng)啟動(dòng)流程7171文件系統(tǒng)簡(jiǎn)單說就是一種目錄結(jié)構(gòu),linux操作系統(tǒng)中的設(shè)備是以文件的形式存在的,將這些文件進(jìn)行分類管理以及提供和內(nèi)核交互的接口,就形成文件系統(tǒng)。Linux文件系統(tǒng)介紹7272根文件系統(tǒng)是一種特殊的文件系統(tǒng),是內(nèi)核啟動(dòng)時(shí)掛載的第一個(gè)文件系統(tǒng)。該文件系統(tǒng)就要包括Linux啟動(dòng)時(shí)所必須的目錄和關(guān)鍵性的文件。例如:Linux啟動(dòng)時(shí)都需要有init目錄下的相關(guān)文件,在Linux掛載分區(qū)時(shí)Linux一定會(huì)找/etc/fstab這個(gè)掛載文件等,根文件系統(tǒng)中還包括了許多的應(yīng)用程序bin目錄等。任何包括這些Linux系統(tǒng)啟動(dòng)所必須的文件都可以稱為根文件系統(tǒng)。內(nèi)核代碼的映像文件保存在根文件系統(tǒng)中。系統(tǒng)引導(dǎo)啟動(dòng)程序會(huì)在根文件系統(tǒng)掛載之后從中把一些初始化腳本(如rcS,inittab)和服務(wù)加載到內(nèi)存中去運(yùn)行。根文件系統(tǒng)介紹73根文件系統(tǒng)介紹文件系統(tǒng)和內(nèi)核是完全獨(dú)立的兩個(gè)部分。在嵌入式中移植的內(nèi)核下載到開發(fā)板上,是沒有辦法真正的啟動(dòng)Linux操作系統(tǒng)的(會(huì)出現(xiàn)無法加載文件系統(tǒng)的錯(cuò)誤),啟動(dòng)成功之后可以自動(dòng)或手動(dòng)掛載其他的文件系統(tǒng)。74根文件系統(tǒng)在系統(tǒng)啟動(dòng)中到底是什么時(shí)候掛載的呢?先將/dev/ram0掛載,而后執(zhí)行/linuxrc.等其執(zhí)行完后,切換根目錄,再掛載具體的根文件系統(tǒng).根文件系統(tǒng)執(zhí)行完之后,也就到了Start_kernel()函數(shù)【在init/main.c文件中有個(gè)函數(shù)叫start_kernel,它是用來啟動(dòng)內(nèi)核的主函數(shù)】的最后,執(zhí)行init的進(jìn)程,也就第一個(gè)用戶進(jìn)程。對(duì)系統(tǒng)進(jìn)行各種初始化的操作。7576對(duì)比linux文件系統(tǒng)和根文件系統(tǒng)的目錄結(jié)構(gòu)Linux根文件系統(tǒng)嵌入式Linux系統(tǒng)的根文件系統(tǒng)/bin:存放二進(jìn)制可執(zhí)行命令的目錄。/dev:存放設(shè)備文件和目錄。/etc:存放系統(tǒng)管理和配置文件和目錄。/home:用戶主目錄,比如用戶user的主目錄就是/home/user,可以用~user來表示。/lib:存放動(dòng)態(tài)鏈接共享庫(kù)的目錄。/sbin:存放系統(tǒng)管理員使用的管理程序的目錄。/tmp:公用的臨時(shí)文件存儲(chǔ)點(diǎn)。/root:系統(tǒng)管理員的主目錄。/mnt:用以臨時(shí)掛載其他的文件系統(tǒng)。/proc:虛擬文件系統(tǒng),可直接訪問這個(gè)目錄來獲取系統(tǒng)信息。/var:某些大文件溢出區(qū)。/usr:存放應(yīng)用程序和文件。/bin/dev/etc/lib/tmp/mnt
/proc/var/usr由于受系統(tǒng)資源的限制,一般沒有Linux根文件系統(tǒng)那么復(fù)雜,僅保留一些常用的目錄即可,對(duì)于嵌入式系統(tǒng),必須選擇一個(gè)合適的根文件系統(tǒng)以使系統(tǒng)運(yùn)行最佳。*嵌入式系統(tǒng)通常都不是針對(duì)多用戶的77根文件系統(tǒng)存放二進(jìn)制文件的目錄主要有四個(gè):/bin,/sbin,/usr/bin和/usr/sbin,二進(jìn)制文件要放在哪個(gè)目錄,與它在系統(tǒng)中所扮演的角色有很大的關(guān)系。如果這個(gè)是用于和系統(tǒng)管理員必備的二進(jìn)制文件,就會(huì)放在/bin。如果這是系統(tǒng)管理員必備,但是一般用戶根本不會(huì)用到的二進(jìn)制文件,就會(huì)放在/sbin,如果不是用戶必備的二進(jìn)制文件,多半會(huì)放在/usr/bin;如果不是系統(tǒng)管理必備的工具,多半會(huì)放在/usr/sbin中。78根文件系統(tǒng)鏈接庫(kù)目錄lib,同樣如此,系統(tǒng)引導(dǎo)以及執(zhí)行最基本命令需要的鏈接庫(kù)會(huì)在/lib,所有其他的鏈接庫(kù)會(huì)放在/usr/lib,通常在套件安裝時(shí),會(huì)在/usr/lib中產(chǎn)生子目錄,以便放它自己的鏈接庫(kù)。79補(bǔ)充:掛載/掛裝mount命令在Linux中將一個(gè)文件系統(tǒng)與一個(gè)存儲(chǔ)設(shè)備關(guān)聯(lián)起來的過程稱為掛裝(mount)。使用mount命令將一個(gè)文件系統(tǒng)附著到當(dāng)前文件系統(tǒng)層次結(jié)構(gòu)中(根)。命令mount[-參數(shù)][設(shè)備名稱][掛載點(diǎn)]例:mount/dev/sdb1/mnt80#使用不帶參數(shù)的mount命令來顯示所有已經(jīng)掛載上了的文件系統(tǒng)#也可將掛載配置寫入/etc/fstab中,也實(shí)現(xiàn)自動(dòng)掛載81根文件系統(tǒng)的類型嵌入式Linux根文件系統(tǒng)主要的根文件系統(tǒng)類型(基于存儲(chǔ)設(shè)備的文件系統(tǒng)類型)有:JFFS2YAFFS/YAFFS2Cramfs等Romfs
RAMDISK82(1)JFFS2JFFS嵌入式系統(tǒng)文件系統(tǒng)最早是由瑞典AxisCommunications公司基于Linux2.0的內(nèi)核為嵌入式系統(tǒng)開發(fā)的文件系統(tǒng)。JFFS2,日志閃存嵌入式系統(tǒng)文件系統(tǒng)版本2(JournallingFlashFileSystemv2),是RedHat公司基于JFFS開發(fā)的閃存文件系統(tǒng)。特點(diǎn)是:可讀寫的、支持?jǐn)?shù)據(jù)壓縮的、基于哈希表的日志型文件系統(tǒng),并提供了崩潰/掉電安全保護(hù)等。缺點(diǎn)主要是當(dāng)文件系統(tǒng)已滿或接近滿時(shí),因?yàn)槔占年P(guān)系而使jffs2的運(yùn)行速度大大放慢。目前jffs3正在開發(fā)中。
83(3)Cramfs:CompressedROMFileSystemCramfs是Linux的創(chuàng)始人Linus
Torvalds參與開發(fā)的一種只讀的壓縮文件系統(tǒng)。它也基于MTD驅(qū)動(dòng)程序。在cramfs文件系統(tǒng)中,每一頁(yè)(4KB)被單獨(dú)壓縮,可以隨機(jī)頁(yè)訪問,其壓縮比高達(dá)2:1,為嵌入式系統(tǒng)節(jié)省大量的Flash存儲(chǔ)空間,使系統(tǒng)可通過更低容量的FLASH存儲(chǔ)相同的文件,從而降低系統(tǒng)成本,而且系統(tǒng)的可靠性較好。由于以上特性,Cramfs在嵌入式系統(tǒng)中應(yīng)用廣泛。然而它的只讀屬性同時(shí)又是它的一大缺陷,使得用戶無法對(duì)其內(nèi)容對(duì)進(jìn)擴(kuò)充。84(2)yaffs:YetAnotherFlashFileSystemyaffs/yaffs2是專為嵌入式系統(tǒng)使用NAND型閃存而設(shè)計(jì)的一種日志型文件系統(tǒng)。與jffs2相比,它減少了一些功能(例如不支持?jǐn)?shù)據(jù)壓縮),所以速度更快,掛載時(shí)間很短,對(duì)內(nèi)存的占用較小。另外,它還是跨平臺(tái)的文件系統(tǒng),除了Linux和eCos,還支持WinCE,pSOS和ThreadX等操作系統(tǒng)。
858686/bin:必要的用戶命令(二進(jìn)制文件)。*/boot:引導(dǎo)加載程序使用的靜態(tài)文件。/dev:設(shè)備文件及其他特殊文件。/etc:系統(tǒng)配置文件。*/home:用戶主目錄。/lib:必要的鏈接庫(kù),例如:C鏈接庫(kù)、內(nèi)核模塊。/mnt:臨時(shí)掛載的文件系統(tǒng)的掛載點(diǎn)。*/opt:附加軟件的安裝目錄。proc:提供內(nèi)核和進(jìn)程信息的proc文件系統(tǒng)。*/root:root用戶主目錄。sbin:必要的系統(tǒng)管理員命令。tmp:臨時(shí)文件目錄。usr:大多數(shù)用戶使用的應(yīng)用程序和文件目錄。var:監(jiān)控程序和工具程序存放的可變數(shù)據(jù)。根文件系統(tǒng)的目錄結(jié)構(gòu)8787很小的應(yīng)用程序提供完整的工具集的功能init進(jìn)程:由內(nèi)核啟動(dòng)的第一個(gè)也是惟一的一個(gè)用戶進(jìn)程,它根據(jù)配置文件決定啟動(dòng)哪些程序.在嵌入式領(lǐng)域,通常使用Busybox集成的init程序.嵌入式根目錄下的bin,sbin和usr目錄以及l(fā)inuxc通常就是Busybox文件系統(tǒng)、網(wǎng)絡(luò)系統(tǒng)等等的工具集在/downloads/下載Busybox:busybox-1.12.2.tar.bz2解壓后,進(jìn)入配置菜單:
makemenuconfigBusyBox生成工具集8888BusyBox生成工具集89BusyBox生成工具集選擇Busybox的編譯方式:BuildOptions BuildBusyBoxasastaticbinary(nosharedlibs)缺省配置為使用鏈接庫(kù)配置交叉編譯器:BuildOptions[*]DoyouwanttobuildBusyBoxwithaCrossCompiler?(/opt/crosstools/gcc-3.4.6-glibc-2.3.6/bin/arm-linux-)CrossCompilerprefix安裝路徑:InstallationOptions(./_install)BusyBoxinstallationprefix90BusyBox生成工具集配置其他工具集:ArchivalUtilitiesCoreutilsConsoleUtilitiesDebian
UtilitieEditorsFindingUtilitiesInitUtilitiesLogin/PasswordManagementUtilitiesMiscellaneousUtilitiesLinuxModuleUtilitiesNetworkingUtilitiesProcessUtilitiesShellsSystemLoggingUtilitiesLinuxSystemUtilities91BusyBox生成工具集配置其他工具集:ArchivalUtilities
工具
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 古代科舉那些事
- 2025 小學(xué)六年級(jí)科學(xué)上冊(cè)美育融入作品展示方案課件
- 2025年江蘇工程職業(yè)技術(shù)學(xué)院馬克思主義基本原理概論期末考試模擬題含答案解析(奪冠)
- 2025年山東水利職業(yè)學(xué)院?jiǎn)握新殬I(yè)適應(yīng)性考試題庫(kù)帶答案解析
- 2025年青海柴達(dá)木職業(yè)技術(shù)學(xué)院?jiǎn)握新殬I(yè)技能考試題庫(kù)附答案解析
- 2026年云南經(jīng)貿(mào)外事職業(yè)學(xué)院?jiǎn)握新殬I(yè)傾向性測(cè)試模擬測(cè)試卷帶答案解析
- 2025年河南工業(yè)職業(yè)技術(shù)學(xué)院馬克思主義基本原理概論期末考試模擬題及答案解析(奪冠)
- 吳文君親子導(dǎo)師班課件
- 2025年南京理工大學(xué)泰州科技學(xué)院馬克思主義基本原理概論期末考試模擬題及答案解析(奪冠)
- 2024年隴東學(xué)院馬克思主義基本原理概論期末考試題及答案解析(奪冠)
- 危重癥專科護(hù)理小組工作總結(jié)
- 百千萬工程行動(dòng)方案(3篇)
- 山洪災(zāi)害監(jiān)理工作報(bào)告
- 數(shù)字推理試題及答案下載
- 學(xué)?!暗谝蛔h題”學(xué)習(xí)制度
- 運(yùn)輸管理實(shí)務(wù)(第二版)李佑珍課件第6章 集裝箱多式聯(lián)運(yùn)學(xué)習(xí)資料
- 水泵維修更換申請(qǐng)報(bào)告
- 機(jī)械設(shè)備運(yùn)輸合同
- 《分布式光伏并網(wǎng)啟動(dòng)方案》
- 酒店委托管理合同范本
- 5.第五章-透鏡曲率與厚度
評(píng)論
0/150
提交評(píng)論