chinese直男口爆体育生外卖, 99久久er热在这里只有精品99, 又色又爽又黄18禁美女裸身无遮挡, gogogo高清免费观看日本电视,私密按摩师高清版在线,人妻视频毛茸茸,91论坛 兴趣闲谈,欧美 亚洲 精品 8区,国产精品久久久久精品免费

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

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

3天內(nèi)不再提示

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

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

掃碼添加小助手

加入工程師交流群

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

wKgZO2kajEOATXDkAACAZ1qoMz8050.png

一、Last Log的核心:Ramoops機制

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

二、配置Ramoops,啟用Last Log

要啟用Last Log,需在**設(shè)備樹(DTS**中添加ramoops相關(guān)節(jié)點,為其分配內(nèi)存并定義日志參數(shù)。

2.1設(shè)備樹節(jié)點添加

在設(shè)備樹源文件(.dts)中,添加以下兩個節(jié)點(需根據(jù)硬件內(nèi)存布局調(diào)整參數(shù)):

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

2.2節(jié)點參數(shù)詳解

?ramoops_mem節(jié)點:負責定義預(yù)留內(nèi)存區(qū)域

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

?reg-names = "ramoops_mem":為內(nèi)存區(qū)域命名,方便ramoops節(jié)點引用。

?ramoops節(jié)點:負責配置ramoops的行為。

?compatible = "ramoops":聲明與內(nèi)核ramoops驅(qū)動兼容,確保驅(qū)動能識別并使用該節(jié)點。

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

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

三、查看與解析Last Log

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

3.1訪問日志文件

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

cd/sys/fs/pstorels

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

?dmesg-ramoops-0內(nèi)核Panic后保存的日志,記錄內(nèi)核崩潰前的關(guān)鍵調(diào)用棧、錯誤信息。

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

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

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

3.2日志查看命令

根據(jù)日志類型,使用不同命令查看內(nèi)容:

?查看內(nèi)核Panic日志

catdmesg-ramoops-0

?查看上次內(nèi)核高優(yōu)先級日志(last_log

catconsole-ramoops-0

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

logcat-L pmsg-ramoops-0

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

?查看函數(shù)追蹤日志

catftrace-ramoops-0

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

以下通過內(nèi)核空指針、Android應(yīng)用ANR、驅(qū)動初始化失敗三個典型場景,演示Last Log的排查流程。

案例1:內(nèi)核空指針解引用導(dǎo)致系統(tǒng)Panic重啟

現(xiàn)象:設(shè)備運行過程中突然黑屏重啟,無明顯操作觸發(fā)。

排查步驟

1.系統(tǒng)重啟后,進入/sys/fs/pstore目錄,查看內(nèi)核Panic日志:

catdmesg-ramoops-0

1.日志關(guān)鍵內(nèi)容(示例):

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函數(shù)。由此可定位到該驅(qū)動存在未正確初始化指針就解引用的代碼邏輯問題,需修改驅(qū)動代碼(如增加指針有效性檢查)并重新測試。

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

現(xiàn)象:某社交應(yīng)用打開后幾秒內(nèi)提示應(yīng)用無響應(yīng),強制關(guān)閉后再次打開仍異常。

排查步驟

1.應(yīng)用觸發(fā)ANR后,進入/sys/fs/pstore目錄,解析用戶空間日志:

logcat-L pmsg-ramoops-0

1.日志關(guān)鍵內(nèi)容(示例):

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表明主線程因耗時操作被阻塞;調(diào)用棧顯示,MainActivityloadLargeImageSync方法(同步加載大圖片)導(dǎo)致主線程卡頓超過5秒。需將該方法改為異步加載(如使用AsyncTask或線程池),避免主線程被長時間占用。

案例3:設(shè)備啟動卡在logo界面,驅(qū)動初始化失敗

現(xiàn)象:設(shè)備上電后,屏幕一直停留在廠商logo界面,無法進入系統(tǒng)。

排查步驟

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

catconsole-ramoops-0

1.日志關(guān)鍵內(nèi)容(示例):

[  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在探測硬件設(shè)備(I2C地址1-001a)時失?。ㄥe誤碼-110對應(yīng)操作超時);且該驅(qū)動屬于核心驅(qū)動,直接導(dǎo)致內(nèi)核Panic。需檢查兩方面:

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

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

五、總結(jié)

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

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 嵌入式系統(tǒng)
    +關(guān)注

    關(guān)注

    41

    文章

    3744

    瀏覽量

    133611
  • 內(nèi)核
    +關(guān)注

    關(guān)注

    4

    文章

    1467

    瀏覽量

    42859
  • 瑞芯微
    +關(guān)注

    關(guān)注

    27

    文章

    790

    瀏覽量

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

掃碼添加小助手

加入工程師交流群

    評論

    相關(guān)推薦
    熱點推薦

    恩智浦解讀Zephyr log系統(tǒng)的使用 Zephyr的shell和log功能介紹

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

    全棧開發(fā)進階指南:LuatOS-log庫從入門到實戰(zhàn)!

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

    高速PCB布線實踐指南

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

    機器學(xué)習(xí)實踐指南——案例應(yīng)用解析

    機器學(xué)習(xí)實踐指南——案例應(yīng)用解析
    發(fā)表于 04-13 16:40

    高速PCB布線實踐指南

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

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

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

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

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

    談一談Firefly Android系統(tǒng)的功能

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

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

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

    自動化測試系統(tǒng)的最佳實踐指南秘籍

    自動化測試系統(tǒng)的最佳實踐指南秘籍 ,學(xué)習(xí)資料。
    發(fā)表于 03-21 16:02 ?0次下載

    Linux系統(tǒng)命令及shell腳本實踐指南

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

    嵌入式系統(tǒng)log模塊設(shè)計

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

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

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

    Linux主機排查腳本介紹

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

    嵌入式Linux上使用Ramoops的代碼應(yīng)用

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