linux 内核 报错,根据epc定位linux内核报错.pdf
根據epc定位linux內核報錯.pdf
韓?衛@吉林師范?學
2014.12.10
轉載請表明出處
*****************************************************
關于內核報錯 “Unable to handle kernel paging request at virtual address” 的問題, 絕?多數都是
由于程序使?了不可?的指針?引起的, 定位這類問題的辦法很簡單,也希望我的描述?夠簡單實?.
以我下?的?個實例說明:
epc :exception program counter , 異常程序計數器, ra : return address 返回地址
我們可以根據 “CPU 0 Unable to handle kernel paging request at virtual address
0000000000000078, epc == ffffffff805e96e8, ra == ffffffff80ec73d0” 找到epc的具體位置, 再根據具
體的匯編程序定位出引起epc的具體原因, 另外, 如有必須知道全部的調?路徑. 那么重復定位epc的
?法,根據call trace 逐步定位即可.
在編譯linux 的時候, 會產??個System.map , vmlinux, 以及vmlinux.o
我們使?System.map 和vmlinux.o 即可. 因為vmlinux可能是被特定壓縮?具壓縮過的(根據您的
make?le), ?法使?objdump?具做反匯編.
先打開System.map:
將 epc == ffffffff805e96e8 ?的 ffffffff805e96e8 地址拷?下來, 直接在System.map ??查找, 如果沒
有找到, 那么將ffffffff805e96e8 最后兩位刪掉, 即ffffffff805e96, 查找這個地址, 絕?多數情況都可以找
到, 我的如下:
看起來, 問題是出在 add_mtd_device 這個函數??.
epc 的位置是在ffffffff805e96e8, add_mtd_device 的地址是在ffffffff805e96c0 , 那么應該是在
add_mtd_device?的ffffffff805e96e8 - ffffffff805e96c0 = 0x28 這個偏移位置出了問題.
現在我們需要觀察 vmlinux.o 的匯編代碼, 找到 add_mtd_device 函數的匯編, 觀察 0x28 位置的匯編
語?.
先使?xxx-objdump(xxx 為具體的交叉編譯?具前綴) 將vmlinux.o 反匯編出來, 我的做法是:
mips64-octeon-linux-gnu-objdump -dr vmlinux.o >> linux-dr
之后打開linux-dr 這個?件, 找到 add_mtd_device 的定義處:
可以看到, 0x28 位置的匯編:
28: dc820078 ld v0,120(a0)
ld v0, 120(a0) 的含義是:
先取寄存器a0的數值的地址, 再將該地址后120字節處的數值加載到v0 寄存器.
(a0)是取a0寄存器的地址, a0是負責傳遞函數的第?個參數的寄存器.
dc820078 就是ld v0, 120(a0) 對應的機器碼.
根據CPU 0 Unable to handle kernel paging request at virtual address 0000000000000078 這句話
的提?可以知道, 是在對a0的0x78(120) 地址取值的時候發?了錯誤, 很可能是a0地址本?不可?.
如果能確認的話, 就可以證明add_mtd_device的第?個參數使??個不可?的指針.
這時候就可以檢查源代碼, 相信您有能?很快到定位問題.
但如果該函數很?, 不容易定位, 那么我們可以通過120這個信息定位到該函數?具體的語句.
我的實例:
打開linux內核源代碼, 計算120字節在add_mtd_device() 第?個參數類型?的位置, 得到參數成員:
vi -t add_mtd_device
如下圖:
找到第?個參數的類型struct mtd_info 定義, 通過逐步計算每個成員偏移(注意填充字節), 可以算出
第120字節的成員為backing_dev_info. 那么, 在代碼?, 出現epc的程序就是第?個出現該成員的地
?.
如果這個偏
創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎總結
以上是生活随笔為你收集整理的linux 内核 报错,根据epc定位linux内核报错.pdf的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 如何在网上办理银行卡 银行卡怎么在网上办
- 下一篇: 嵌入式linux+io+优化,嵌入式Li