日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > linux >内容正文

linux

linux 内核 报错,根据epc定位linux内核报错.pdf

發布時間:2023/12/15 linux 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。