簡體   English   中英

__turn_mmu_on階段之后如何調試Linux內核啟動過程?

[英]How to debug Linux kernel Boot process after __turn_mmu_on stage?

我正在嘗試在自定義硬件上基於Linux內核3.0.1引導Android 4.0.1(冰淇淋三明治)。

我可以使用串行端口調試Linux Kernel 3.0.1的啟動過程,直到在head.S中定義的__enable_mmu函數為止。

但是一旦執行__turn_mmu_on函數,我就無法調試引導過程。

我查看了linux-arm-kernel郵件列表檔案,並嘗試了他們的printascii()解決方法。 但是在__turn_mmu_on之后,我仍然無法在串行控制台上看到任何啟動日志。

在這里,我可以在__turn_mmu_on之前獲取日志,因此我的串行控制台端口可以正常工作。

還有一件事-我沒有JTAG。

誰能提供打開MMU后如何調試Linux內核啟動過程的解決方案?

--

嗨,在那里,我對您的問題一無所知,但有一些想法。

在Linux源代碼中,下面有幾點,

/ * *啟用MMU。 這完全改變了可見光的結構
*內存空間。 您將無法通過此跟蹤執行。
*如果對此有疑問, 檢查linux-arm-kernel
*在將另一個帖子發送到列表之前,郵件列表存檔。
*
* r0 = cp#15控制寄存器
* r1 =機器ID
* r2 =標記或dtb指針
* r9 =處理器ID
* r13 =完成時跳轉到的虛擬地址
*
*其他寄存器取決於完成時調用的功能
* / .align 5
.pushsection .idmap.text,“ ax”
ENTRY(__ turn_mmu_on)
....
....
__turn_mmu_on_end:
ENDPROC(__ turn_mmu_on)
.popsection

因此,在調用__turn_mmu_on之后無法跟蹤流似乎很正常。

但是,使用printascii()的結果是,您是否調試了為什么無法使用它?

您是否知道printascii()是否易於使用而無需任何配置? 使用前是否有任何必要的設置? 您是否為此提供了可運行的環境?

由於缺少JTAG,打印可能是剩下的唯一一種方法,因此調試printascii()可能對您來說是必須的。

謝謝。

最有可能您遇到了內存轉換配置問題。 在打開MMU之后,必須使用已映射到原始硬件地址(您以前使用的虛擬地址)的虛擬地址訪問串行設備。

要調試問題,您需要確保設置了正確的虛擬地址,並且內存映射配置是設備的。 通常,設備內存映射是靜態完成的,因此,如果您看不到源文件中的錯誤,則還應該能夠在調用__enable_mmu之前輸出值。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM