在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

實戰案例 | 基于ramoops的kernel panic故障定位技巧

眺望電子 ? 2025-06-06 08:33 ? 次閱讀


前言:

對于嵌入式產品的開發使用,盡管會經歷大量的測試和驗證,但在大批量生產中,硬件物料的適配一致性,應用軟件的異常消息隊列等因素,使得現場使用中存在極小概率發生意外狀況,出現如 kernel opps、panic等死機現象。這時系統日志無法及時寫入 flash,重啟后沒有存到任何關鍵信息,工程師也崩潰了。下文則基于眺望電子T113-i核心板產品為例,介紹如何在Linux系統上搭建并驗證ramoops, 以便在系統崩潰或異常時進行故障排查。



一、ramoops 簡介

ramoops 是一個 oops/panic 日志記錄器,它在系統崩潰之前將其日志寫入 RAM。它的工作原理是將 oops 和 panic 記錄在循環緩沖區中。ramoops 需要具有持久 RAM 的系統,以便該區域的內容在重啟后仍然存在。


e3c77d80-426d-11f0-986f-92fbcf53809c.png


二、ramoops 搭建

2.1環境說明

平臺: T113-I Tina

SDK : talowe-T113-I-Tina-sdk_2025_03_10.tar.gz

Kernel 版本: 5.4.61

查看系統內存

DRAM 類型: DDR3

[root@T113-I:/]# cat /proc/iomem

e3e71802-426d-11f0-986f-92fbcf53809c.png

可以看到SRAM地址為0x40000000~0x5FFFFFFF,共512M,可以選擇kernel code和kernel data以外的地址用作ramoops空間。


2.2內核配置修改

ramoops在內核里面叫pstore ram,源碼路徑為:

kernel/linux-5.4/fs/pstore/ram_core.c

kernel/linux-5.4/fs/pstore/ram.c

CONFIG_PSTORE_RAM=y # 下面的根據自己需求CONFIG_PSTORE_CONSOLE=y # 保存控制臺日志(上一次的)CONFIG_PSTORE_PMSG=y # 用戶信息存儲,可以往/dev/pmsg0節點寫入

設備樹配置

reserved-memory { #address-cells = <2>; #size-cells = <2>; ranges;
ramoops@5f000000 { compatible ="ramoops"; reg = <0?0x5f000000?0?0x100000>;//1M內存 record-size = <0x40000>; //oops/panic信息存儲 console-size = <0x4000>; //內核信息存儲 pmsg-size = <0x4000>; //用戶信息存儲 no-map; };};


使用參數解析:

reg = <0 0x5f000000 0 0x100000>; 從0x5f000000開始,劃分0x100000內存(也就是1M),用于ramoops

record-size = <0x40000>; 分配使用256K來存儲oops/panic信息,文件名稱為dmesg-ramoops-0

console-size = <0x4000>; 分配使用16K來存儲上一次的內核信息,文件名稱為console-ramoops-0

pmsg-size = <0x4000>; 分配使用16K來存儲用戶上一次向/dev/pmsg0節點寫入的信息,文件名稱為pmsg-ramoops-0

no-map; 必須添加,亦或者修改kernel的內存初始化,將這部分空間預留出來

其他參數:

lecc-size = ;

使用ecc糾錯機制,糾錯字節數為value,value為1時,使用16字節來糾錯,其他值會直接使用

使用ecc會消耗更多內存消耗的內存,消耗的內存與cnt有關,如下面注2,cnt為3,則會消耗3*ecc_value。


注1:size為2的冪向下取整

注2:如果內存劃分不規范,可能record的實際大小由(mem_size - console_size - pmsg_size) / record_size決定,如上面例子(0x100000 - 0x4000 - 0x4000)/0x40000,結果向下取整為3,所以record的大小為(0x100000 - 0x4000 - 0x4000)/ 3 ,結果向下取整為330k


2.3系統加載確認

2.3.1 驅動加載查看

將如上修改后的固件鏡像燒寫到T113-i核心板,進入系統后,使用以下指令查看ramoops內存分配是否成功,如下圖顯示:成功從0x5f000000開始分配了0x100000(既1M),未啟用ECC糾錯碼(設備樹添加ecc-size屬性可以開啟)

[root@T113-I:/]# dmesg | grep ramoops

e3fd3808-426d-11f0-986f-92fbcf53809c.png

[root@T113-I:/]# cat /proc/iomem

e410b720-426d-11f0-986f-92fbcf53809c.png

5f000000~5f052aa9:330K,用作存儲上一次oops/panic信息

5f052aaa~5f0a5553:330K,用作存儲上一次oops/panic信息

5f0a5554~5f0f7ffd:330K,用作存儲上一次oops/panic信息

5f0f7ffe~5f0fbffd:16K,用作存儲上一次系統的內核信息

5f0fbffe~5f0ffffd:16K,用于存儲上一次用戶自定義信息(向/dev/pmsg0寫入的信息)


注3:建議record按照實際大小分配一份即可,因為ramoops使用一個計數器來記錄多個轉儲,但計數器在重啟時重置(即,重啟后的新轉儲將覆蓋舊轉儲),所以每次都會將dmesg-ramoops-0覆蓋。


2.3.2查看ramoops起始地址(mem_address)

[root@T113-I:/]# cat /sys/module/ramoops/parameters/mem_address[root@T113-I:/]# printf "0x%x\n" $(cat /sys/module/ramoops/parameters/mem_address)

e4281ed8-426d-11f0-986f-92fbcf53809c.png

2.3.3查看ramoops分配大小(mem_size)

[root@T113-I:/]# cat /sys/module/ramoops/parameters/mem_size[root@T113-I:/]# printf "0x%x\n" $(cat /sys/module/ramoops/parameters/mem_size)

e4396f30-426d-11f0-986f-92fbcf53809c.png

2.3.4查看設備樹record-size設置(record_size)

[root@T113-I:/]# cat /sys/module/ramoops/parameters/record_size[root@T113-I:/]# printf "0x%x\n" $(cat /sys/module/ramoops/parameters/record_size)

e44d79a8-426d-11f0-986f-92fbcf53809c.png

既256K

2.3.5 查看設備樹console-size設置(console_size)

[root@T113-I:/]# cat /sys/module/ramoops/parameters/console_size[root@T113-I:/]# printf "0x%x\n" $(cat /sys/module/ramoops/parameters/console_size)

e4646424-426d-11f0-986f-92fbcf53809c.png

既16K

2.3.6 查看設備樹pmsg-size設置(pmsg_size)

[root@T113-I:/]# cat /sys/module/ramoops/parameters/pmsg_size[root@T113-I:/]# printf "0x%x\n" $(cat /sys/module/ramoops/parameters/pmsg_size)

e4797706-426d-11f0-986f-92fbcf53809c.png

既16K

2.3.7 查看是否開啟ecc糾錯(ecc)

[root@T113-I:/]# cat /sys/module/ramoops/parameters/ecc

e48f47c0-426d-11f0-986f-92fbcf53809c.png

0:未開啟

非0:開啟,使用該值的字節進行糾錯


2.3.8 查看存儲哪些的內核信息類型(dump_oops)

[root@T113-I:/]# cat /sys/module/ramoops/parameters/dump_oops

e4a3b124-426d-11f0-986f-92fbcf53809c.png

1:存儲panic和oops

2:跳過oops存儲,只存儲panic

其他:請查看kernel/linux-5.4/include/linux/kmsg_dump.h和ramoops的ramoops_pstore_write函數


三、ramoops機制驗證

3.1觸發panic測試

[root@T113-I:/]# echo 5 > /proc/sys/kernel/panic # 設置觸發panic時,5秒后重啟[root@T113-I:/]# echo c > /proc/sysrq-trigger# 觸發panic

e4b8997c-426d-11f0-986f-92fbcf53809c.png

重啟后,掛載pstore系統查看日志

[root@T113-I:/]# mount -t pstore pstore /sys/fs/pstore/[root@T113-I:/]# ls /sys/fs/pstore/[root@T113-I:/]# tail -n 20 /sys/fs/pstore/dmesg-ramoops-0#防止信息太多,只看之后20行

如下圖,可以看到前面的系統時間與內容和崩潰時打印的一模一樣,同時前面多了日志等級標記

e4ccad0e-426d-11f0-986f-92fbcf53809c.png

同時,console-ramoops-0也會有以上信息,這里只看最后10行方便對比

[root@T113-I:/]# tail -n 10 /sys/fs/pstore/dmesg-ramoops-0[root@T113-I:/]# tail -n 10 /sys/fs/pstore/console-ramoops-0

e4e0a714-426d-11f0-986f-92fbcf53809c.png

3.2ramoops文件對比

由上一小節panic的測試可以看到console-ramoops-0的日志內容和dmesg-ramoops-0的日志內容一模一樣,兩者的區別是console-ramoops-0為reboot前的內核所有信息,dmesg-ramoops-0為上一次觸發panic/oops時內核的所有信息

在上小節測試完成后,執行reboot,系統重新啟動后可以看到信息不一致,console為上一次內核信息

[root@T113-I:/]# mount -t pstore pstore /sys/fs/pstore/[root@T113-I:/]# tail -n 10 /sys/fs/pstore/dmesg-ramoops-0[root@T113-I:/]# tail -n 10 /sys/fs/pstore/console-ramoops-0

3.3用戶自定義pmsg-ramoops

寫入信息

[root@T113-I:/]# echo 123 > /dev/pmsg0[root@T113-I:/]# echo 456 > /dev/pmsg0[root@T113-I:/]# reboot[root@T113-I:/]# mount -t pstore pstore /sys/fs/pstore/[root@T113-I:/]# cat /sys/fs/pstore/pmsg-ramoops-0

e4f32bbe-426d-11f0-986f-92fbcf53809c.pnge5062ba6-426d-11f0-986f-92fbcf53809c.png


四、小結

以上則是基于ramoops在全志T113-i平臺上的簡單使用技巧,若您也有linux系統方面的問題或想了解更多相關技術知識或產品信息,請關注眺望電子公眾號并聯系我們,我們將竭誠為您服務!

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 嵌入式
    +關注

    關注

    5142

    文章

    19561

    瀏覽量

    315418
  • 故障定位
    +關注

    關注

    0

    文章

    145

    瀏覽量

    9741
  • Kernel
    +關注

    關注

    0

    文章

    49

    瀏覽量

    11562
收藏 人收藏

    評論

    相關推薦
    熱點推薦

    鴻蒙實戰開發:【FaultLoggerd組件】講解

    Faultloggerd部件是OpenHarmony中C/C++運行時崩潰臨時日志的生成及管理模塊。面向基于 Rust 開發的部件,Faultloggerd 提供了Rust Panic故障日志生成能力。系統開發者可以在預設的路徑下找到
    的頭像 發表于 03-12 16:22 ?1429次閱讀
    鴻蒙<b class='flag-5'>實戰</b>開發:【FaultLoggerd組件】講解

    掛載文件系統出現"kernel panic..." 史上最全解決方案

    defaults...Kernel panic - not syncing: No init found.Try passing init=optionto kernel. bootargs為
    發表于 08-01 16:31

    kernel移植報錯

    最近移植4.14的內核,燒到開發板中出現如下錯誤:---[ end trace 1c64f040d891693a ]---Kernel panic - not syncing: Attempted
    發表于 02-25 15:51

    如何精準定位電纜故障

    華天電力專業生產電纜故障測試儀,接下來為大家分享如何精準定位電纜故障。電力部門經常對電纜進行大修,遇到電纜故障時如何正確處理?下面是對電纜故障
    發表于 03-28 11:37

    Kernel panic - not syncing: No init found

    我按韋老師的教學視頻制作UBOOT\KERNEL,走了整個流程,最后甚至把老師的補丁拿來直接使用,只有文件系統是自己做的,但是,始終過不了“Kernel panic - not syncing
    發表于 05-14 07:45

    配置nfs啟動出現kernel panic

    an initial console.Failed to execute /linuxrc.Attempting defaults...Kernel panic - not syncing
    發表于 05-17 07:45

    分享幾種RK3399開啟ramoops查看kernel log的方法

    后端|-> Log panic/oops to a block device # pstore/blk 后端驗證step1:echo 1 > /proc/sys/kernel
    發表于 11-14 18:04

    nuc980不管如何都是開不起來kernel panic是怎么回事?

    ?) 010f16384 ram15(driver?) Kernel panic - not syncing: VFS: Unable to mount root fs on unknown-block(1,0
    發表于 06-13 08:19

    Linux Kernel Panic的產生的原因?

    時導致panic。 使用內核調試工具(kenrel debugger ,aka KDB) 如果跟蹤信息只有一部分且不足以用來定位問題的根本原因時,kernel debugger(KDB)就需要
    發表于 06-15 06:24

    筆記本啟動故障修復實戰

    筆記本啟動故障修復實戰 同學使用的一臺IBM T23筆記本電腦,一個月前出現了偶爾不能啟動的故障,由于出現故障的頻率不高所以并未
    發表于 01-23 11:21 ?654次閱讀

    kernel panic流程分析

    我們在項目開發過程中,很多時候會出現由于某種原因經常會導致手機系統死機重啟的情況(重啟分Android重啟跟kernel重啟,而我們這里只討論kernel重啟也就是 kernel panic
    的頭像 發表于 01-19 16:14 ?1455次閱讀
    <b class='flag-5'>kernel</b> <b class='flag-5'>panic</b>流程分析

    深入分析內核panic的內核錯誤處理方案

    die函數主要執行oops相關流程,且若異常為中斷流程中觸發或設置了panic_on_oops選項,則進一步通過panic將系統掛起。
    發表于 04-14 15:18 ?4352次閱讀

    嵌入式Linux上使用Ramoops的代碼應用

    ramoops 還沒有配置完成,需要在 device tree里創建對應的節點。在這之前先確定在內存中可以為 ramoops 預留的地址空間。在 Linux 運行下面命令。
    的頭像 發表于 12-06 11:18 ?1165次閱讀
    嵌入式Linux上使用<b class='flag-5'>Ramoops</b>的代碼應用

    配網行波故障預警與定位裝置的故障定位精度等級劃分

    今天江蘇宇拓電力科技來為大家說明一下配網行波故障預警與定位裝置的故障定位精度等級劃分。 摘要:隨著電力系統的不斷發展,配網行波故障預警與
    的頭像 發表于 12-22 15:02 ?3244次閱讀

    鴻蒙實戰開發學習【FaultLoggerd組件】

    Faultloggerd部件是OpenHarmony中C/C++運行時崩潰臨時日志的生成及管理模塊。面向基于 Rust 開發的部件,Faultloggerd 提供了Rust Panic故障日志生成能力。系統開發者可以在預設的路徑下找到
    的頭像 發表于 03-17 20:39 ?828次閱讀
    鴻蒙<b class='flag-5'>實戰</b>開發學習【FaultLoggerd組件】
    主站蜘蛛池模板: 一卡二卡卡四卡无人区中文 | 欧美一级片免费观看 | 欧美日韩伦理 | 色丁香婷婷 | a黄网站| 激情在线视频 | 玖玖爱在线播放 | 免费视频不卡一区二区三区 | 永久影视 | 男人天堂伊人网 | 97影院理论在线观看 | 日本免费人成黄页在线观看视频 | 韩国三级中文 | 久久频这里精品99香蕉久网址 | 男女做性无遮挡免费视频 | 一级特色黄色片 | 天堂网视频在线 | 亚洲欧美视频二区 | 色视频线观看在线播放 | 美女久久久 | 视色4se视频在线观看 | 高清国产美女在线观看 | 亚洲夜夜爱 | 国内精品久久久久久久久野战 | 亚洲成人网在线观看 | 亚洲美女激情视频 | 亚洲 丝袜 制服 欧美 另类 | 久久精品视频7 | 午夜资源| 久久久久久免费播放一级毛片 | 日本一区二区视频在线观看 | 国产色秀视频在线观看 | ssswww日本免费网站片 | 色妇视频 | 2021韩国理论片ok电影天堂 | 久久久久免费精品国产 | 成人亚洲综合 | 男人操女人免费网站 | 色无欲天天天影视综合网 | 免费成人看片 | 欧美性free|