下載本文檔
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、嵌入式系統(tǒng)搭建過程中,對于系統(tǒng)平臺搭建工程師在完成Bootloader的調(diào)試之后就進(jìn)入Kernel裁減移植的階段,其中最重要的一步是 Kernel 啟動的調(diào)試,在調(diào)試 Kernel 過程中通常遇到最常見的問題是啟動異常 :Uncompressing Linux. done, booting the kernel.(掛死在此處 )注意:這里是arch/arm/boot/compressed/head.S的解壓過程,調(diào)用了錄下的 misc.c)->include/asm-arm/arch-xxx/uncompress.h的 putc()的,用的是物理地址,因為此時內(nèi)核還沒有起來。decomp
2、ress_kernel()(同目實現(xiàn)。這是在uboot 中初始化而 printascii則是調(diào)用了匯編。 printascii()位于 arch/arm/kernel/debug.S,他需要調(diào)用虛擬地址,此虛擬地址通過machine_start提供,而相關(guān)的宏在include/asm/arch-xxx/debug-macro.S現(xiàn),這下明白了。實10-05-14 添加: debug.s段的 head.s ,mmu是 1:1是虛擬地址了。里面需要判斷一下當(dāng)前是否打開了映射,目的是加快速度。到了內(nèi)核的mmu,然后指定 uart 的基址。在解壓階 head.s ,就是真正的 mmu了,此時就導(dǎo)致驅(qū)動
3、異常(啟動掛死)的原因有很多,如基于 EVM 板的 硬件做了修改(如更改了 FLASH 空間大小、地址和型號,更改了 SDRAM、DDR SDRAM空間大小、地址和型號,更改了晶振頻率等),板卡ID 號不支持等。那么如何進(jìn)行調(diào)試那,其實有兩種調(diào)試技術(shù)比較有效。Kernelkernel啟動調(diào)試技術(shù)之后 Kernel- 使用 printascii()函數(shù)跟蹤最先執(zhí)行的是start_kernel()start_kernel()有沒運行,在 booting the函數(shù),確認(rèn) start_kernel()有否執(zhí)行就是在其開始代碼段添加printascii("start_kernel"
4、),如果串口沒有打印出start_kernel,說明start_kernel()沒有運行,那么可能的原因有Bootloader配置的啟動參數(shù)錯誤、Kernel加載到(DDR) SDRAM的地址不正確,Kernel編譯時指定的 (DDR) SDRAM運行地址不正確等。這樣就需要一項一項排查錯誤,當(dāng)錯誤被排查完畢,通常打印出 start_kernel 是種必然,如果打印出這儀信息說明 Kernel 已 進(jìn)入到 start_kernel() 執(zhí)行,如果此時有串口啟動打印就比較成功了, 如果仍然沒有打印啟動信息,就需要另外一種調(diào)試技術(shù)。附代碼修改:init/main.c <<-extern
5、 void printascii(const char*); asmlinkage void _init start_kernel(void)/ Modifychar * command_line;extern struct kernel_param _start_param, _stop_param;printascii("start_kernel");/ Modifysmp_setup_processor_id();->>Kernel 啟動調(diào)試技術(shù) - 使用 printascii()函數(shù)打印 printk()緩存信息 ,如果 Kernel 已進(jìn)入到start
6、_kernel()執(zhí)行,仍然沒有啟動信息打印出來,說明串口波特率出問題的可能性比較大,啟動信息是暫時緩存到臨時 buffer-printk_buf中的,進(jìn)入 start_kernel()中會對串口波特率重新初始化,當(dāng)初始化完成后,緩存的系統(tǒng)啟動信息便打印出來,不能打印說明用于串口波特率初始化的系統(tǒng)時鐘源沒有初始化正確, 通常是系統(tǒng)時鐘源和實際的晶振頻率不一致導(dǎo)致的,通常排查和解決這個問題后,系統(tǒng)啟動信息是能正確打印的。 為了幫助解決問題, 可以使用 printascii()打印 printk_buf內(nèi)容。這樣就能把 printascii()打印的系統(tǒng)信息和預(yù)想的系統(tǒng)信息進(jìn)行比較,從而加快解決問
7、題的進(jìn)度。附代碼修改: kernel/printk.c<<-extern void printascii(const char*);/ Modifystatic char printk_buf1024;/ Modifyasmlinkage int printk(const char *fmt, .)va_list args;int r;va_start(args, fmt);r = vprintk(fmt, args);va_end(args);printascii(printk_buf);/ Modifyreturn r;static int recursion_bug;stat
8、ic int new_text_line = 1;/static char printk_buf1024;/ Modify->>如上是 Kernel 裁減移植過程中最重要的兩個啟動調(diào)試技術(shù),靈活使用將帶來工作效率的提升,不管硬件平臺是那種 ARM或者其它類型的 CPU ,也不管是哪個 Kernel 版本(如、等 都可以采用這兩個啟動調(diào)試技術(shù)解決實際問題。為了支持 printascii()函數(shù),需要在 Kernel裁減中( make menuconfig)添加 Kernel hacking ->? Kernel low - level debugging functions的支
9、持。我的補充 :1/可以在 /kernel/head.s里添加打印看是否跑到mmu開啟前 :_turn_mmu_on:/ 打印一個字符 a mov r9,r0mov r0,'a'blprintascii/該函數(shù)位于arch/arm/kernel/debug.s,調(diào)用了include/mach/debug-macro.Smov r0,r9/ 現(xiàn)在開啟 mmumovr0, r0mcrp15, 0, r0, c1, c0, 0 write control regmrcp15, 0, r3, c0, c0, 0 read id regmovr3, r3movr3, r3movpc, r13/* 實際調(diào)用了 _switch_data,在 head-common.s*/2/一般按樓上方法 , 在 startkernel就可以打印出來 , 如果 : 在第一步可以打印, 而開啟 mmu后不能打
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 馬鞍山學(xué)院《學(xué)習(xí)筑夢科技中國夢》2023-2024學(xué)年第一學(xué)期期末試卷
- 2024年三方借款協(xié)議書附借款合同履行監(jiān)督與報告義務(wù)3篇
- 2024年度雙方網(wǎng)絡(luò)安全合作協(xié)議書2篇
- 2024年度云計算環(huán)境下電子支付安全協(xié)議及技術(shù)優(yōu)化合同3篇
- 2025知識產(chǎn)權(quán)合同范本專賣店特許合同
- 2025年伊春道路貨物運輸駕駛員考試
- 2024年度原材料采購與回購合同協(xié)議3篇
- 單位人力資源管理制度精彩匯編
- 2024年標(biāo)準(zhǔn)技術(shù)合作合同書樣本版B版
- 2025機(jī)場配電箱合同
- JGJT334-2014 建筑設(shè)備監(jiān)控系統(tǒng)工程技術(shù)規(guī)范
- 2024年網(wǎng)格員考試題庫1套
- 生命科學(xué)前沿技術(shù)智慧樹知到期末考試答案章節(jié)答案2024年蘇州大學(xué)
- 2023年小兒推拿保健師考試真題試卷(含答案)
- 高血壓護(hù)理常規(guī)課件
- 心臟介入手術(shù)談話技巧
- 海南省三亞市吉陽區(qū)2022-2023學(xué)年六年級上學(xué)期期末數(shù)學(xué)試卷
- 辦公樓消防改造工程環(huán)境保護(hù)措施
- 2023-2024學(xué)年高一下學(xué)期家長會 課件
- 溯源與解讀:學(xué)科實踐即學(xué)習(xí)方式變革的新方向
- 班克街教育方案
評論
0/150
提交評論