国产精品久久久aaaa,日日干夜夜操天天插,亚洲乱熟女香蕉一区二区三区少妇,99精品国产高清一区二区三区,国产成人精品一区二区色戒,久久久国产精品成人免费,亚洲精品毛片久久久久,99久久婷婷国产综合精品电影,国产一区二区三区任你鲁

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

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

3天內不再提示

利用Last Log(Ramoops)排查系統問題:配置與實踐指南

jf_44130326 ? 來源:Linux1024 ? 2026-02-05 13:54 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

嵌入式系統(如基于瑞芯微RK3399Android設備)開發或維護中,系統常因內核崩潰(Panic)、用戶空間異常等突發情況重啟,導致關鍵日志丟失。此時,Last Log(依托Linux內核的ramoops機制實現)可在系統異常時保存核心日志,為事后故障分析提供關鍵依據。本文將詳細介紹其配置方法與問題排查實踐,并通過具體案例演示實戰流程。

wKgZO2kajEOATXDkAACAZ1qoMz8050.png

一、Last Log的核心:Ramoops機制

ramoopsLinux內核的一項功能——它會預留一段固定內存區域,當系統發生異常(如內核Panic、意外重啟)時,自動將關鍵日志(內核日志、用戶空間日志、函數追蹤等)寫入該區域。由于這段內存的特殊性,系統重啟后數據不會丟失,可通過/sys/fs/pstore目錄訪問這些遺留日志,進而分析故障根因。

二、配置Ramoops,啟用Last Log

要啟用Last Log,需在**設備樹(DTS**中添加ramoops相關節點,為其分配內存并定義日志參數。

2.1設備樹節點添加

在設備樹源文件(.dts)中,添加以下兩個節點(需根據硬件內存布局調整參數):

ramoops_mem: ramoops_mem {  reg = <0x00x1100000x00xf0000>; /* 預留內存的起始地址與大小 */  reg-names ="ramoops_mem";    /* 內存區域命名,供后續引用 */};ramoops {  compatible ="ramoops";      /* 與內核ramoops驅動兼容 */  record-size = <0x00x20000>;   /* 單個日志記錄的大小 */  console-size = <0x00x80000>;   /* 內核控制臺日志(last_log)的空間 */  ftrace-size = <0x00x00000>;   /* 函數追蹤(ftrace)日志的空間 */  pmsg-size = <0x00x50000>;    /* 用戶空間日志(如Android logcat)的空間 */  memory-region = <&ramoops_mem>;  /* 引用上面定義的內存區域 */};

2.2節點參數詳解

?ramoops_mem節點:負責定義預留內存區域

?reg = <起始地址 地址長度...>:指定內存的起始地址與大?。ㄐ璐_保該區域不與其他模塊內存沖突)。

?reg-names = "ramoops_mem":為內存區域命名,方便ramoops節點引用。

?ramoops節點:負責配置ramoops的行為。

?compatible = "ramoops":聲明與內核ramoops驅動兼容,確保驅動能識別并使用該節點。

?record-size/console-size/ftrace-size/pmsg-size:分別指定單條日志”“內核控制臺日志”“函數追蹤日志”“用戶空間日志的預留空間大小。

?memory-region = <&ramoops_mem>:指定日志存儲的目標內存區域(即前面定義的ramoops_mem)。

三、查看與解析Last Log

系統重啟后,可通過/sys/fs/pstore目錄訪問Last Log文件。不同文件對應不同類型的日志,需結合場景選擇查看。

3.1訪問日志文件

通過命令行進入/sys/fs/pstore目錄,列出所有日志文件:

cd/sys/fs/pstorels

RK3399設備為例,通常會看到以下文件(不同場景下文件存在性不同):

?dmesg-ramoops-0內核Panic后保存的日志,記錄內核崩潰前的關鍵調用棧、錯誤信息。

?pmsg-ramoops-0用戶空間日志(如Android系統的logcat日志),記錄應用、系統服務的運行信息。

?ftrace-ramoops-0函數追蹤(ftrace)日志,記錄指定時間段內的函數調用流程,用于性能分析。

?console-ramoops-0上次啟動的內核日志(last_log,但僅保存優先級高于默認日志級別的日志。

3.2日志查看命令

根據日志類型,使用不同命令查看內容:

?查看內核Panic日志

catdmesg-ramoops-0

?查看上次內核高優先級日志(last_log

catconsole-ramoops-0

?解析用戶空間日志(如Android logcat

logcat-L pmsg-ramoops-0

(通過logcat工具解析后,日志格式更符合Android開發習慣)

?查看函數追蹤日志

catftrace-ramoops-0

四、實戰:用Last Log排查典型問題(含具體案例)

以下通過內核空指針、Android應用ANR、驅動初始化失敗三個典型場景,演示Last Log的排查流程。

案例1:內核空指針解引用導致系統Panic重啟

現象:設備運行過程中突然黑屏重啟,無明顯操作觸發。

排查步驟

1.系統重啟后,進入/sys/fs/pstore目錄,查看內核Panic日志:

catdmesg-ramoops-0

1.日志關鍵內容(示例):

Kernel panic - not syncing: Null pointer dereferenceCPU: 0 PID: 1234 Comm: problem_process Tainted: G    W ...Call trace:[<ffffffc0002a3450>] dump_backtrace+0x0/0x180[<ffffffc0002a3830>] show_stack+0x10/0x20[<ffffffc000a55080>] dump_stack+0xd8/0x134[<ffffffc0002f4f2c>] panic+0x18c/0x334[<ffffffc0000a2b50>] __do_page_fault+0x3a0/0x480...[<ffffffc0008b1234>] problematic_driver_function+0x20/0x80 [problematic_driver]

1.分析:日志中Null pointer dereference明確存在空指針解引用問題;Call trace的堆棧追蹤顯示,故障源于problematic_driver模塊的problematic_driver_function函數。由此可定位到該驅動存在未正確初始化指針就解引用的代碼邏輯問題,需修改驅動代碼(如增加指針有效性檢查)并重新測試。

案例2Android應用頻繁ANR(應用無響應)

現象:某社交應用打開后幾秒內提示應用無響應,強制關閉后再次打開仍異常。

排查步驟

1.應用觸發ANR后,進入/sys/fs/pstore目錄,解析用戶空間日志:

logcat-L pmsg-ramoops-0

1.日志關鍵內容(示例):

09-2214:30:00.12312345678E AndroidRuntime: FATAL EXCEPTION: main09-2214:30:00.12312345678E AndroidRuntime: Process: com.example.social, PID:123409-2214:30:00.12312345678E AndroidRuntime: java.lang.RuntimeException: ANR in com.example.social...09-2214:30:00.12312345678E AndroidRuntime: Caused by: android.os.DeadlineExceededException: Main thread idle timeout of5seconds expired...09-2214:30:00.12312345678E AndroidRuntime: at com.example.social.MainActivity.loadLargeImageSync(MainActivity.java:123)

1.分析:日志中ANRDeadlineExceededException表明主線程因耗時操作被阻塞;調用棧顯示,MainActivityloadLargeImageSync方法(同步加載大圖片)導致主線程卡頓超過5秒。需將該方法改為異步加載(如使用AsyncTask或線程池),避免主線程被長時間占用。

案例3:設備啟動卡在logo界面,驅動初始化失敗

現象:設備上電后,屏幕一直停留在廠商logo界面,無法進入系統。

排查步驟

1.強制重啟設備(或等待自動重啟)后,進入/sys/fs/pstore目錄,查看高優先級內核日志:

catconsole-ramoops-0

1.日志關鍵內容(示例):

[  2.345678] problematic_driver: probe of1-001a failed witherror-110[  2.345789] platform12340000.device: Driver problematic_driver failed to probe[  2.345890] Kernelpanic- not syncing: Essential driver failed to initialize

1.分析:日志中probe of 1-001a failed with error -110表明problematic_driver在探測硬件設備(I2C地址1-001a)時失?。ㄥe誤碼-110對應操作超時);且該驅動屬于核心驅動,直接導致內核Panic。需檢查兩方面:

?硬件層面:確認I2C設備是否存在、供電是否正常、硬件連線是否松動;

?驅動層面:修改驅動的探測超時時間,或增加硬件存在性檢測邏輯。

五、總結

通過配置ramoops啟用Last Log,能在系統異常時留存關鍵日志,為嵌入式系統(尤其是無持久化日志存儲的場景)的問題排查提供有力支持。結合/sys/fs/pstore下的不同日志文件,可覆蓋內核Panic、用戶空間異常、性能追蹤、啟動故障等多個維度的分析;再通過現象-操作-日志分析-根因定位的實戰流程,能高效解決各類系統問題,是提升系統穩定性的核心調試工具。

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

    關注

    41

    文章

    3747

    瀏覽量

    133622
  • 內核
    +關注

    關注

    4

    文章

    1467

    瀏覽量

    42872
  • 瑞芯微
    +關注

    關注

    27

    文章

    792

    瀏覽量

    54289
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    恩智浦解讀Zephyr log系統的使用 Zephyr的shell和log功能介紹

    之前 我們從 0 開始新建了一個簡單的 Zephyr 應用- 從0開始打造屬于自己的HelloWorld ,本期就 帶著大家熟悉一下 Zephyr 的 shell 和 log 系統。 首先給大家介紹
    的頭像 發表于 02-27 09:19 ?2050次閱讀
    恩智浦解讀Zephyr <b class='flag-5'>log</b><b class='flag-5'>系統</b>的使用 Zephyr的shell和<b class='flag-5'>log</b>功能介紹

    全棧開發進階指南:LuatOS-log庫從入門到實戰!

    本文將帶你深入探索LuatOS系統log庫的核心原理與實戰技巧,通過代碼示例解析日志管理、錯誤追蹤及性能優化的最佳實踐,助力全棧工程師構建更穩健的物聯網應用。 今天,我們一起來認識LuatOS
    的頭像 發表于 05-15 16:12 ?2857次閱讀
    全棧開發進階<b class='flag-5'>指南</b>:LuatOS-<b class='flag-5'>log</b>庫從入門到實戰!

    高速PCB布線實踐指南

    高速PCB布線實踐指南_(上)
    發表于 08-20 16:26

    機器學習實踐指南——案例應用解析

    機器學習實踐指南——案例應用解析
    發表于 04-13 16:40

    高速PCB布線實踐指南

    高速PCB布線實踐指南
    發表于 06-12 21:52

    Flink on YARN(下):常見問題與排查思路

    4j 的初始化和詳細加載流程:export JVM_ARGS="-Dlog4j.debug=true"▼ 客戶端疑難問題排查思路當客戶端日志無法正常定位時,可以修改 log4j 配置文件將
    發表于 10-10 14:14

    Flink on YARN(下):常見問題與排查思路

    log4j 配置文件將日志級別由 INFO 改為 DEBUG 后重新運行,看是否有 DEBUG 日志可以幫助排查問題。對于一些沒有日志或日志信息不完整的問題,可能需要開展代碼級調試,修改源碼重新打包替換
    發表于 10-14 15:04

    談一談Firefly Android系統的功能

    /pstore目錄下:console-ramoops-0 : last_log 上次啟動的 kernel log,但只保存里優先級比默認 log level 高的 logpmsg-
    發表于 07-08 14:59

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

    ;;memory-region = <&ramoops_mem>;};方式二:make menuconfig 配置$ make
    發表于 11-14 18:04

    自動化測試系統的最佳實踐指南秘籍

    自動化測試系統的最佳實踐指南秘籍 ,學習資料。
    發表于 03-21 16:02 ?0次下載

    Linux系統命令及shell腳本實踐指南

    Linux系統命令及shell腳本實踐指南資料下載。
    發表于 06-01 14:47 ?29次下載

    嵌入式系統log模塊設計

    對于開發嵌入式系統的工程師來說,log功能無疑是非常重要的功能模塊。這里講講嵌入式系統log模塊的基本設計框架。1、可以方便設置從不同的硬件接口輸出
    發表于 11-03 17:51 ?13次下載
    嵌入式<b class='flag-5'>系統</b><b class='flag-5'>log</b>模塊設計

    【C語言進階】利用assert高效排查你的C程序

    【C語言進階】利用assert高效排查你的C程序
    的頭像 發表于 08-31 13:27 ?3329次閱讀

    Linux主機排查腳本介紹

    _analysis.py?out.txt??#進行指定輸出至out.txt ? 查看輸出 cat out_log_analysis.txt? 在配置文件中添加需要執行的命令 vim log.cfg 可以在定時任務中設置每天
    的頭像 發表于 06-28 09:44 ?1067次閱讀
    Linux主機<b class='flag-5'>排查</b>腳本介紹

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

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