20121020linux內(nèi)核啟動(dòng)內(nèi)核自解壓分析

20121020linux內(nèi)核啟動(dòng)內(nèi)核自解壓分析

ID:27548328

大?。?16.03 KB

頁數(shù):36頁

時(shí)間:2018-12-03

20121020linux內(nèi)核啟動(dòng)內(nèi)核自解壓分析_第1頁
20121020linux內(nèi)核啟動(dòng)內(nèi)核自解壓分析_第2頁
20121020linux內(nèi)核啟動(dòng)內(nèi)核自解壓分析_第3頁
20121020linux內(nèi)核啟動(dòng)內(nèi)核自解壓分析_第4頁
20121020linux內(nèi)核啟動(dòng)內(nèi)核自解壓分析_第5頁
資源描述:

《20121020linux內(nèi)核啟動(dòng)內(nèi)核自解壓分析》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在學(xué)術(shù)論文-天天文庫。

1、內(nèi)核自解壓過程分析本章代碼的主要工作是將zlmage解壓,并把解壓后的內(nèi)核拷貝的正確的執(zhí)行位置。在解壓之前cpu有幾項(xiàng)工作要完成:1.將bootloard傳入的參數(shù)保存起來2.進(jìn)入管理模式,并將中斷關(guān)閉3.判斷各段代碼指針是否有偏移,有偏移的話就要更改指針地址4.清楚bass段,打開髙速緩存,設(shè)置棧的開始地址和結(jié)束地址,大小為64k5.接下來要判斷解壓后各段數(shù)據(jù)是否有重疊,具體做法是(比較解壓后內(nèi)核的開始地址(執(zhí)行內(nèi)核的首地址)是否比設(shè)置的棧的結(jié)束地址大,如果大則跳轉(zhuǎn)到vvont.overwrite,否則比較解壓后內(nèi)核的結(jié)束地址是否比Image的開始地址小,如果小則跳轉(zhuǎn)到wont_ov

2、erwrite。Wont_overwrite的作用是設(shè)置參數(shù)解壓內(nèi)核、運(yùn)行解壓后的內(nèi)核)如果有重疊的話,做一些工作(這些工作很簡(jiǎn)單在代碼中能見到)然后解壓內(nèi)核,解壓之后要重新搬移內(nèi)核到正確的位置,在搬移過程中可能有解壓內(nèi)核和搬移內(nèi)核的代碼相重疊,所以在搬移之前要將這段代碼搬移到一個(gè)安全的地址,然后可以開始內(nèi)核的搬移,搬移完內(nèi)核之后要刷新cache,之后關(guān)閉cache然后開始運(yùn)行內(nèi)核。下面是內(nèi)核自解壓過程的完整代碼和分析:*linux/arch/arm/boot/compressed/head.S氺*Copyright(C)1996-2002RussellKing*Copyright(C

3、)2004HyokS.Choi(MPUsupport)*Thisprogramisfreesoftware;youcanredistributeitand/ormodify*itunderthetermsoftheGNUGeneralPublicLicenseversion2as*publishedbytheFreeSoftwareFoundation.*/#include/**Debuggingstuff氺*Notethatthesemacrosmustnotcontainanycodewhichisnot*100%relocatable(重定位).

4、Anyattempttodosowillresultinacrash.*Pleaseselectoneofthefollowingwhenturningondebugging.*/#ifdefDEBUG/*調(diào)試宏中間層#ifdefined(CONFIG_DEBUG_ICEDCC)/*使用內(nèi)部調(diào)試協(xié)處理器*/#ifdefCONFIG_CPU_V6.macroloadsp,rb

5、teb,ch,rbmcrpl4,0,ch,c8,c0,0.endm#else?macroloadsp,rb?endm.macrovvriteb,ch,rbmcrpl4,0,ch,cl,c0,0.endm#endif#else#include/*包含架構(gòu)相關(guān)的調(diào)試宏的匯編文件調(diào)試宏?底層*/.macrowriteb,ch,rbsenduartch,rb.endm#ifdefined(CONFIG_ARCH_SAHOO).macroloadsp,rbmovrb,#0x8⑽00000@physicalbaseaddress#ifdefCONF

6、IG_DEBUG_LL_SER3addrb,rb,#0x00050000@Ser3#elseaddrb,rb,#0x00010000@Seri#endif.endm#elifdefined(CONFIG_ARCH_S3C2410)?macroloadsp,rbmovrb,#0x50000000addrb,rb,#0x4000*CONFIG_S3C_LOWLEVEL_UART_PORT.endm#else.macroloadsp,rbaddruartrb?endm#endif#endif#endif.macrokputc,valmovrO,valblputc?endm.

7、macrokphex,val,IenmovrO,valmovrl,#lenblphex.endm.macrodebug_reloc_start#ifdefDEBUGkputc#ffkphexr6,8/*processorid*/kputc#*:*kphexr7,8/*architectureid*/#ifdefCONFIG_CPU_CP15kputcr:1mrcpl5,0,rO,cl,cOkphexr0,8/*controlreg*/#

當(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)系客服處理。