");if(bootde">
分析uboot是如何啟動(dòng)內(nèi)核的_收集

分析uboot是如何啟動(dòng)內(nèi)核的_收集

ID:6642607

大?。?5.50 KB

頁數(shù):6頁

時(shí)間:2018-01-21

分析uboot是如何啟動(dòng)內(nèi)核的_收集_第1頁
分析uboot是如何啟動(dòng)內(nèi)核的_收集_第2頁
分析uboot是如何啟動(dòng)內(nèi)核的_收集_第3頁
分析uboot是如何啟動(dòng)內(nèi)核的_收集_第4頁
分析uboot是如何啟動(dòng)內(nèi)核的_收集_第5頁
資源描述:

《分析uboot是如何啟動(dòng)內(nèi)核的_收集》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在行業(yè)資料-天天文庫。

1、分析uboot是如何啟動(dòng)內(nèi)核的1.uboot啟動(dòng)內(nèi)核的代碼縮減如下:s=getenv("bootcmd");debug("###main_loop:bootcmd="%s"",s?s:"");if(bootdelay>=0&&s&&!abortboot(bootdelay)){run_command(s,0);}2.假設(shè)bootcmd=nandread.jffs20x30007FC0kernel;bootm0x30007FC0<1>nandread.jffs20x30007FC0kernelnandread.jffs20x30007FC0kernel;從nand讀

2、出內(nèi)核:從哪里讀?從kernel分區(qū)放到哪里去?-0x30007FC0下面講解什么是分區(qū):就是將nand劃分為幾個(gè)區(qū)域,一般如下:bootloader-》params-》kernel-》root這些分區(qū)的劃分是在/include/configs/mini2440.h中寫死的:#defineMTDPARTS_DEFAULT"mtdparts=nandflash0:250k@0(bootloader),""128k(params),""5m(kernel),""-(root)"注:@0表示從0地址開始,250k的bootloader分區(qū)可能對(duì)某些uboot不夠用,這里只是舉例而已。將上面的信

3、息換算成十六進(jìn)制:#name大小在nand上的起始地址0bootloader0x000400000x000000001params0x000200000x000400002kernel0x002000000x000600003root0xfda000000x00260000那么上面的nandread.jffs20x30007FC0kernel就等價(jià)于:nandread.jffs20x30007FC00x000600000x00200000注:這里的read.jffs2并不是指定要什么特定的格式,而是用read.jffs2不需要塊/頁對(duì)齊,所以這個(gè)kernel的分區(qū)大小可以隨意定。<2>boot

4、m0x30007FC0關(guān)鍵函數(shù)do_bootm()flash上存的內(nèi)核:uImageuImage=頭部+真正的內(nèi)核頭部的定義如下:typedefstructimage_header{uint32_tih_magic;/*ImageHeaderMagicNumber*/uint32_tih_hcrc;/*ImageHeaderCRCChecksum*/uint32_tih_time;/*ImageCreationTimestamp*/uint32_tih_size;/*ImageDataSize*/uint32_tih_load;/*DataLoadAddress*/uint32_tih_ep;

5、/*EntryPointAddress*/uint32_tih_dcrc;/*ImageDataCRCChecksum*/uint8_tih_os;/*OperatingSystem*/uint8_tih_arch;/*CPUarchitecture*/uint8_tih_type;/*ImageType*/uint8_tih_comp;/*CompressionType*/uint8_tih_name[IH_NMLEN];/*ImageName*/}image_header_t;我們需要關(guān)心的是:uint32_tih_load;/*DataLoadAddress*/uint32_tih_ep

6、;/*EntryPointAddress*/ih_load是加載地址,即內(nèi)核運(yùn)行是應(yīng)該位于的地方ih_ep是入口地址,即內(nèi)核的入口地址這與uboot是類似的,uboot的加載地址是TEXT_BASE=0x33F80000;入口地址是start.S中的_start。其實(shí)我們把內(nèi)核中nand讀出來的時(shí)候是可以放在內(nèi)核的任何地方的,如0x31000000,0x32000000等等,只要它不破壞uboot所占用的內(nèi)存空間就可以了,如下圖:從0x33F4DF74-0x30000000都是可以用的。那么為什么既然設(shè)定好了加載地址和入口地址內(nèi)核還能隨意放呢?那是因?yàn)閡Image有一個(gè)頭部!頭部里有加載地址和

7、入口地址,當(dāng)我們用bootmxxx的時(shí)候,do_bootm這個(gè)函數(shù)會(huì)先去讀uImage的頭部以獲取該uImage的加載地址和入口地址,當(dāng)發(fā)現(xiàn)該uImage目前所處的內(nèi)存地址不等于它的加載地址時(shí),該函數(shù)會(huì)將該uImage移動(dòng)到它的加載地址上,在代碼中體現(xiàn)如下:caseIH_COMP_NONE::if(load!=image_start){memmove_wd((void*)load,(void*)i

當(dāng)前文檔最多預(yù)覽五頁,下載文檔查看全文

此文檔下載收益歸作者所有

當(dāng)前文檔最多預(yù)覽五頁,下載文檔查看全文
溫馨提示:
1. 部分包含數(shù)學(xué)公式或PPT動(dòng)畫的文件,查看預(yù)覽時(shí)可能會(huì)顯示錯(cuò)亂或異常,文件下載后無此問題,請(qǐng)放心下載。
2. 本文檔由用戶上傳,版權(quán)歸屬用戶,天天文庫負(fù)責(zé)整理代發(fā)布。如果您對(duì)本文檔版權(quán)有爭(zhēng)議請(qǐng)及時(shí)聯(lián)系客服。
3. 下載前請(qǐng)仔細(xì)閱讀文檔內(nèi)容,確認(rèn)文檔內(nèi)容符合您的需求后進(jìn)行下載,若出現(xiàn)內(nèi)容與標(biāo)題不符可向本站投訴處理。
4. 下載文檔時(shí)可能由于網(wǎng)絡(luò)波動(dòng)等原因無法下載或下載錯(cuò)誤,付費(fèi)完成后未能成功下載的用戶請(qǐng)聯(lián)系客服處理。