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

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

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

OpenRemoved_Tina_Linux系統(tǒng)調(diào)試使用指南

嵌入式Linux那些事 ? 來(lái)源:嵌入式Linux那些事 ? 作者:嵌入式Linux那些事 ? 2023-03-06 09:51 ? 次閱讀

OpenRemoved_Tina_Linux系統(tǒng)調(diào)試使用指南1

概述1.1 編寫(xiě)目的
1.2 適用范圍
1.3 相關(guān)人員
2 調(diào)試方法及工具
2.1 內(nèi)核日志
2.2 GDB2.2.1 介紹
2.2.2 配置
2.2.3 使用
2.2.4 更多用法
2.2.5 注意事項(xiàng)
2.3 gdbserver.
2.3.1 介紹
2.3.2 配置
2.3.3 使用
2.4 coredump.
2.4.1 介紹
2.4.2 配置
2.4.3 配置生成coredump文件.
2.4.4 通過(guò)gdb定位問(wèn)題
2.5 perf
2.5.1 介紹
2.5.2 配置
2.5.3 使用
2.6 strace
2.6.1 介紹
2.6.2 配置
2.6.3 使用
2.7 valgrind.
2.7.1 介紹
2.7.2 配置
2.7.3 使用
2.8 輕量級(jí)日志永久轉(zhuǎn)存.
2.8.1 使能日志轉(zhuǎn)存.
2.8.1.1 使能內(nèi)核功能模塊
2.8.1.2 指定分區(qū)
2.8.2 獲取奔潰日志.
2.8.2.1 掛載文件系統(tǒng).
2.8.2.2 讀取文件
2.8.2.3 刪除文件
2.8.3 高級(jí)功能配置.
2.8.3.1 分區(qū)的空間分布
2.8.3.2 高級(jí)功能

OpenRemoved_Tina_Linux系統(tǒng)調(diào)試使用指南

1 概述

1.1 編寫(xiě)目的

本文主要服務(wù)于使用Tina軟件平臺(tái)的廣大客戶,幫助開(kāi)發(fā)人員方便快速了解Tina平臺(tái)系統(tǒng)調(diào)試工具。

1.2 適用范圍

本文適用于Tina3.5版本以上軟件平臺(tái);對(duì)硬件環(huán)境沒(méi)有要求,所有Allwinner硬件平臺(tái)都適 用。

其中,注意linux-5.4內(nèi)核上暫未支持pstore功能。

1.3 相關(guān)人員

適用Tina平臺(tái)的廣大客戶與開(kāi)發(fā)人員。

2 調(diào)試方法及工具

2.1 內(nèi)核日志

內(nèi)核日志默認(rèn)打印在env.cfg中配置,文件路徑:

文件一般在芯片方案配置目錄下,例如:

device/config/chips/v853/configs/perf1/linux/env-4.9.cfg

device/config/chips/r528/configs/evb2/env.cfg

?

文件中的loglevel決定打印等級(jí)

loglevel=

在進(jìn)入系統(tǒng)后,有下面方法可以修改打印等級(jí):

echo 8 > /proc/sys/kernel/printk

dmesg -n 8

2.2 GDB

2.2.1 介紹

GDB(GNU symbolic debugger)是GNU開(kāi)源組織發(fā)布的一款調(diào)試工具,用于調(diào)試由GCC編譯的代碼。它的功能非常強(qiáng)大,使用命令行的調(diào)試方式,允許調(diào)試復(fù)雜的應(yīng)用程序,給程序開(kāi)發(fā)提供了極大的便利。

2.2.2 配置

Tina SDK中GDB源碼包位于dl目錄下,默認(rèn)不配置GDB軟件包,使用時(shí)需要先選上GDB。配置方法如下。

make menuconfig -->

Development -->

<*> gdb------------------------------------------------------- GNU Debugger

2.2.3 使用

按照上述方法配置好GDB后,重新編譯并燒寫(xiě)系統(tǒng),在設(shè)備端口運(yùn)行g(shù)db即可調(diào)試應(yīng)用程序。

gdb

2.2.4 更多用法

gdb調(diào)試命令很多,如何使用可以參考:https://www.gnu.org/software/gdb/documentation/

2.2.5 注意事項(xiàng)

調(diào)試信息

gdb主要用來(lái)調(diào)試C/C++的程序。在編譯源碼時(shí)必須要把調(diào)試信息加到可執(zhí)行文件中。即編譯參數(shù)帶上-g參數(shù)。如果沒(méi)有-g,將看不見(jiàn)程序的函數(shù)名和變量名,代替它們的全是運(yùn)行時(shí)的內(nèi)存地址。

多線程調(diào)試

已運(yùn)行進(jìn)程調(diào)試

gdb attach -p ,其中pid為需要調(diào)試的進(jìn)程名字。

2.3 gdbserver.

2.3.1 介紹

gdbserver是可以對(duì)目標(biāo)設(shè)備上的程序進(jìn)行遠(yuǎn)程調(diào)試的軟件。

2.3.2 配置

make menuconfig -->

Development -->

<*> gdbserver................................. Remote server for GNU Debugger

2.3.3 使用

先確定本地回環(huán)接口是否打開(kāi),如未打開(kāi)需要先進(jìn)行網(wǎng)絡(luò)配置,在小機(jī)端執(zhí)行以下命令。

ip addr add dev lo 127.0.0.1/32 //設(shè)置本地回環(huán)地址為127.0.0.

ifconfig lo up //使能端口

在小機(jī)端運(yùn)行g(shù)dbserver程序

gdbserver 127.0.0.1:3456 process //3456為目標(biāo)板端口號(hào),用戶自己定義,process為應(yīng)用程序名字

在主機(jī)端做adb端口映射

adb forward tcp:3456 tcp:3456 //第一個(gè) 3456 為主機(jī)端口,第二個(gè) 3456 為目標(biāo)板端口

在主機(jī)使用gdb

${PC端編譯工具鏈路徑}/arm-openwrt-linux-gnueabi-gdb process

主機(jī)端進(jìn)行進(jìn)入gdb界面,執(zhí)行

target remote :

連接正確可開(kāi)始調(diào)試程序,最開(kāi)始會(huì)從_start函數(shù)開(kāi)始,所以可以先執(zhí)行下邊調(diào)試指令,進(jìn)入 應(yīng)用程序的main函數(shù)進(jìn)行調(diào)試。

b main c

2.4 coredump.

2.4.1 介紹

程序運(yùn)行過(guò)程中異常終止或崩潰,操作系統(tǒng)會(huì)將程序當(dāng)時(shí)的內(nèi)存狀態(tài)記錄下來(lái),保存在一個(gè)文件中,這種行為就叫做CoreDump。

可以認(rèn)為CoreDump是內(nèi)存快照,但實(shí)際上,除了內(nèi)存信息之外,還有些關(guān)鍵的程序運(yùn)行狀態(tài)也會(huì)同時(shí)記錄下來(lái),例如寄存器信息(包括程序指針、棧指針等)、內(nèi)存管理信息、其他處理器和操作系統(tǒng)狀態(tài)和信息。

CoreDump對(duì)于調(diào)試程序是非常有幫助的,因?yàn)閷?duì)于有些程序錯(cuò)誤是很難重現(xiàn)的,例如指針異常,而CoreDump文件可以再現(xiàn)程序出錯(cuò)時(shí)的情景。

技巧:man core 可以看到 core dump file 詳細(xì)說(shuō)明。 man 7 signal 可以看到信號(hào)詳細(xì)說(shuō)明。

2.4.2 配置

tina根目錄下,make kernel_menuconfig,選中以下配置。 Userspace binary formats --> [*] Enable core dump support 涉及到的內(nèi)核配置:CONFIG_COREDUMP

2.4.3 配置生成coredump文件.

(1) ulimit -c unlimited; (2) echo ‘core.%e.%p’> /proc/sys/kernel/core_pattern;

(1)表示在異常時(shí)產(chǎn)生core dump文件,不對(duì)core dump文件的大小進(jìn)行限制。

(2)指定core dump文件的存儲(chǔ)位置及名稱,表示產(chǎn)生的core文件中將帶有崩潰的程序名、以 及它的進(jìn)程ID

core_pattern的格式說(shuō)明: %%單個(gè)%字符 %p所dump進(jìn)程的進(jìn)程ID %u所dump進(jìn)程的實(shí)際用戶ID %g所dump進(jìn)程的實(shí)際組ID %s導(dǎo)致本次core dump的信號(hào) %t core dump的時(shí)間(由 1970 年 1 月 1 日計(jì)起的秒數(shù)) %h主機(jī)名 %e程序文件名 具體可以通過(guò)man core查看

技巧: core dump 文件默認(rèn)存放在 tmp 目錄下,如果有指定目錄 , 注意目錄必須存在, coredump 不支持創(chuàng)建目錄。 /proc/sys/ker-nel/core_uses_pid ,內(nèi)容為 1 ,一定會(huì)加上進(jìn)程 ID ,即使 core_pattern 中沒(méi)有 %p 。

2.4.4 通過(guò)gdb定位問(wèn)題

生成coredump文件后(例如/tmp/core),gdb運(yùn)行該文件:

./gdb coredump_sample /tmp/core

具體可以查看gdb或者gdbserver章節(jié)描述。

2.5 perf

2.5.1 介紹

Perf是從Linux 2.6開(kāi)始引入的一個(gè)profiling工具,通過(guò)訪問(wèn)包括pmu在內(nèi)的軟硬件性能計(jì)數(shù)器來(lái)分析性能,支持多架構(gòu),是目前Kernel的主要性能檢測(cè)手段,和Kernel代碼一起發(fā)布,所以兼容性良好。

性能瓶頸如果要分類的話,大致可以分為幾個(gè)大類: cpu/gpu/mem/storage ,其中g(shù)pu用Perf沒(méi)法直接探測(cè)(這個(gè)目前比較好用的工具就只有DS5),storage一般用tracepoint來(lái)統(tǒng)計(jì)??偟恼f(shuō)來(lái),Perf還是側(cè)重于分析cpu的性能,其他功能都不是很好用。常用的功能有以下幾個(gè)。

record:收集profile數(shù)據(jù)

report:根據(jù)profile數(shù)據(jù)生成統(tǒng)計(jì)報(bào)告

stat:打印性能計(jì)數(shù)統(tǒng)計(jì)值

top:cpu占有率實(shí)時(shí)統(tǒng)計(jì)

2.5.2 配置

perf工具依賴內(nèi)核選上PERF_EVENTS等配置,具體配置介紹如下:

支持perf基本功能選項(xiàng),必須打開(kāi): CONFIG_PERF_EVENTS=y CONFIG_HW_PERF_EVENTS=y 支持堆棧跟蹤: CONFIG_FRAME_POINTER=y 支持解析內(nèi)核和外部包符號(hào),GCC編譯時(shí)加上-g選項(xiàng): CONFIG_KALLSYMS=y 支持TRACEPOINTS: CONFIG_FTRACE=y 支持內(nèi)核態(tài)動(dòng)態(tài)跟蹤: CONFIG_KPROBES=y CONFIG_KPROBE_EVENT=y 支持用戶態(tài)動(dòng)態(tài)tracepoint跟蹤: CONFIG_DEBUG_INFO=y //以下配置需要執(zhí)行make kernel_menuconfig進(jìn)行配置 支持用戶態(tài)動(dòng)態(tài)跟蹤: CONFIG_UPROBES=y CONFIG_UPROBE_EVENTS=y 支持內(nèi)核態(tài)lock跟蹤: CONFIG_LOCKDEP=y kernel lock tracing: CONFIG_LOCK_STAT=y 支持TRACEPOINTS: CONFIG_TRACEPOINTS=y

注意:部分內(nèi)核不支持用戶態(tài)動(dòng)態(tài)跟蹤,例如linux3.4,具體是否支持,內(nèi)核搜索是否有該配置 選項(xiàng)即可。

上述介紹的配置都是內(nèi)核的配置,Tina中直接通過(guò)make menuconfig可以選上部分配置,配 置方式如下:

tina根目錄下,make menuconfig,選中以下配置: Global build settings ---> [*] Compile the kernel with frame pointers [*] Compile the kernel with symbol table information -*- Compile the kernel with tracing support [*] Compile the kernel with kprobes support Development ---> <*> perf............. Linux performance monitoring tool

選上上述配置之后編譯即可,部分使用者需要修改 perf編譯工具的編譯參數(shù),可配置pack- age/devel/perf/Makefile中MAKE_FLAGS參數(shù),修改其中的NO_XXX=1。修改之后會(huì)新 增依賴,相應(yīng)的先編譯依賴再編譯perf。

2.5.3 使用

root@TinaLinux:/# perf stat /bin/perftest Starting convolution! thread = 4 ,count = 2 Finished convolution! Time consumed 20 seconds. Performance counter stats for '/bin/perftest': 20236.937258 task-clock # 0.994 CPUs utilized 2404 context-switches # 0.119 K/sec 0 CPU-migrations # 0.000 K/sec 1572 page-faults # 0.078 K/sec 24241775385 cycles # 1.198 GHz stalled-cycles-frontend stalled-cycles-backend 7514299585 instructions # 0.31 insns per cycle 621110448 branches # 30.692 M/sec 1134868 branch-misses # 0.18% of all branches 20.352726051 seconds time elapsed

2.6 strace

2.6.1 介紹

Strace通過(guò)ptrace系統(tǒng)調(diào)用來(lái)跟蹤進(jìn)程調(diào)用syscall的情況。

2.6.2 配置

tina根目錄下, 運(yùn)行make menuconfig,選擇 Utilities ---> <*> strace............................ System call tracer

2.6.3 使用

strace啟動(dòng)程序的同時(shí)用strace跟蹤。

strace -p pid對(duì)于已經(jīng)啟動(dòng)的程序通過(guò)-p參數(shù)attach上去。

2.7 valgrind.

2.7.1 介紹

Valgrind是一套Linux下,開(kāi)放源代碼(GPLv2)的仿真調(diào)試工具的集合。由內(nèi)核(core)以及基于內(nèi)核的其他調(diào)試工具組成。內(nèi)核類似于一個(gè)框架(framework),它模擬了一個(gè)CPU環(huán)境,并提供服務(wù)給其他工具;而其他工具則類似于插件(plug-in),利用內(nèi)核提供的服務(wù)完成各種特定的內(nèi)存調(diào)試任務(wù)。Valgrind包括以下工具,Tina平臺(tái)使用較多的工具是memcheck,用來(lái)檢查應(yīng)用程序內(nèi)存泄漏情況。

Memcheck:內(nèi)存使用情況檢查。

Callgrind:收集程序運(yùn)行時(shí)的一些數(shù)據(jù),函數(shù)調(diào)用關(guān)系等信息。

Cachegrind:模擬CPU中的一級(jí)緩存I1,D1和L2二級(jí)緩存,能夠精確地指出程序中cache的丟失和命中。

Helgrind:用來(lái)檢查多線程程序中出現(xiàn)的競(jìng)爭(zhēng)問(wèn)題。

Massif:堆棧分析器,它能測(cè)量程序在堆棧中使用了多少內(nèi)存,告訴我們堆塊,堆管理塊和棧 的大小。

2.7.2 配置

tina根目錄下, 運(yùn)行make menuconfig,選擇 Development --> <*> valgrind .........................debugging and profiling tools for linux

2.7.3 使用

valgrind --tool=memcheck --leak-check=full {program}

2.8 輕量級(jí)日志永久轉(zhuǎn)存.

全志輕量級(jí)日志永久轉(zhuǎn)存方案依賴于內(nèi)核原生的pstore文件系統(tǒng),設(shè)計(jì)了pstore/blk模塊,配 合全志的Flash驅(qū)動(dòng),實(shí)現(xiàn)在內(nèi)核奔潰時(shí),自動(dòng)把日志轉(zhuǎn)存到Flash中,并在開(kāi)機(jī)后以文件形式 呈現(xiàn)到用戶空間。

此方案在全志釋放的Linux-4.9及之后的內(nèi)核版本中支持,暫時(shí)不兼容Linux-3.4/3.10/4.4等 舊內(nèi)核版本。

pstore/blk 模塊及其衍生的 pstore/zone , mtdpstore 模塊已合并進(jìn)Linux社區(qū)。詳細(xì)的 使用文檔可參考社區(qū)內(nèi)核文檔。

Documentation/admin-guide/pstore-blk.rst

全志的實(shí)現(xiàn)支持社區(qū)的所有Frontend功能,包括:

kmsg -內(nèi)核Panic/Oops/emerg/restart/halt/poweroff時(shí)的日志信息。

pmsg -用戶空間的信息轉(zhuǎn)存(Android用于存儲(chǔ)系統(tǒng)日志)。

ftrace - ftrace信息。

console -串口終端信息。

在pstore中,kmsg前端基于kmsg_dump的機(jī)制,在最新的版本中支持所有的kmsg_dump_reason。kmsg_dump機(jī)制可以在特定時(shí)機(jī)出發(fā)回調(diào),把內(nèi)核的日志緩存log_buf導(dǎo)出。

在pstore中,pmsg是pstore提供的用戶空間轉(zhuǎn)存信息的方法。用戶空間程序把需要記錄的信息寫(xiě)入到/dev/pmsg0的設(shè)備節(jié)點(diǎn),在重啟時(shí),即可在pstore的掛載目錄中獲取寫(xiě)入的信息。在Android平臺(tái)把pmsg用于存儲(chǔ)系統(tǒng)日志。

當(dāng)前不同存儲(chǔ)介質(zhì)對(duì)Frontend的支持情況如下表。

表2-1: pstore支持的Frontend

介質(zhì) panic oops pmsg ftrace console
nor N Y N N N
(ubi) spinand N Y N N
(nftl) spinand Y Y Y Y
mmc Y Y Y Y Y
rawnand Y Y Y Y Y

! 警告:并不是所有的 rawnand/(nftl) spinand 都支持所有的 Fronend 功能,以實(shí)際驅(qū)動(dòng)為準(zhǔn)。

2.8.1 使能日志轉(zhuǎn)存.

日志永久轉(zhuǎn)存的方案,除了內(nèi)核使能pstore/blk之外,還需要為其提供一個(gè)專用分區(qū)。因此使能日志轉(zhuǎn)存有兩個(gè)步驟。

使能內(nèi)核功能模塊

指定分區(qū)

2.8.1.1 使能內(nèi)核功能模塊

進(jìn)入內(nèi)核的 menuconfig ,在Tina平臺(tái)可以在任意目錄執(zhí)行: m kernel_menuconfig

[kernel menuconfig] |-> File systems |-> Miscellaneous filesystems |-> [*] Persistent store support |-> Log panic/oops to a block device |-> block device identifier |-> Size in Kbytes of kmsg dump log to store |-> Maximum kmsg dump reason to store |-> Size in Kbytes of pmsg to store |-> Size in Kbytes of console to store

上述的屬性配置,例如 block device identifier 可以通過(guò) h 按鍵獲取詳細(xì)的說(shuō)明。這些屬性 配置同時(shí)支持Kconfig和Module Parameters的兩種配置方式,且 Module Parameters 具 有更高的優(yōu)先級(jí)。

block device identifier 指定使用的塊設(shè)備

Size in Kbytes of kmsg dump log to store 為kmsg前端分配的空間大小

Maximum kmsg dump reason to store kmsg dumper支持的reason最大值(見(jiàn)enum kmsg_dump_reason)

Size in Kbytes of pmsg to store 為pmsg前端分配的空間大小

Size in Kbytes of console to store 為console前端分配的空間大小

技巧:block device identifier 見(jiàn)指定分區(qū)章節(jié),其他屬性使用默認(rèn)配置即可。

2.8.1.2 指定分區(qū)

為內(nèi)核pstore/blk模塊指定使用的塊設(shè)備分區(qū),首先我們創(chuàng)建一個(gè)小容量分區(qū),容量大小建議 [256K-1M] ,參考下表。

表2-2: pstore分區(qū)大小建議

Flash容量 建議大小
容量<= 128M 256K
128M <容量<= 1G 512K
容量> 1G 1M

在sys_partition.fex中添加pstore分區(qū),例如:

[partition] name = pstore size = 512 user_type = 0x

在創(chuàng)建了分區(qū)后,需要“告知”內(nèi)核模塊使用哪個(gè)分區(qū)。如上文所述,目前為止pstore/blk支 持Kconfig和Module Parameters兩種配置方式。Kconfig比較簡(jiǎn)單,因此下文主要是講解 Module Parameters的配置方式。

Module Parameter要不在手動(dòng)加載模塊時(shí)指定:

# insmod pstore_blk.ko blkdev=XXXX

如果是編譯進(jìn)內(nèi)核,需要在內(nèi)核 cmdline 中添加內(nèi)核模塊參數(shù)。

在全志平臺(tái),需要修改 env-XXX.cfg 。在對(duì)應(yīng)存儲(chǔ)介質(zhì)的 setargs_XXX 中添加如下內(nèi)容。

pstore_blk.blkdev=<分區(qū)路徑>

例如:

setargs_mmc=... pstore_blk.blkdev=/dev/mmcblk0p ...

除了路徑之外,還可以使用如下的形式。

pstore_blk.blkdev=<主設(shè)備號(hào):次設(shè)備號(hào)>

其中 主設(shè)備號(hào) 表示的存儲(chǔ)介質(zhì), 次設(shè)備號(hào) 代指哪個(gè)分區(qū)。

我們可以在進(jìn)入到命令行后,通過(guò)ll命令獲取主次設(shè)備號(hào),例如:

$ ll /dev/mmcblk0* brw------- 1 root root 179, 0 Jan 2 04:20 /dev/mmcblk brw------- 1 root root 179, 16 Jan 2 04:20 /dev/mmcblk0boot brw------- 1 root root 179, 32 Jan 2 04:20 /dev/mmcblk0boot brw------- 1 root root 179, 1 Jan 2 04:20 /dev/mmcblk0p brw------- 1 root root 179, 2 Jan 2 04:20 /dev/mmcblk0p brw------- 1 root root 179, 3 Jan 2 04:20 /dev/mmcblk0p brw------- 1 root root 179, 5 Jan 2 04:20 /dev/mmcblk0p

/dev/mmcblk0p5 為例, 主設(shè)備號(hào)是 179 ,從設(shè)備號(hào)是 5 ,因此cmdline可以寫(xiě)為blkoops.blkdev=179:

下面進(jìn)一步說(shuō)明 pstore分區(qū) 的對(duì)應(yīng)關(guān)系:

在Tina個(gè)別平臺(tái)做了進(jìn)一步封裝,只需要在 env-XXXX.cfg 中添加blkoops_partition=<分區(qū)名>和blkoops_blkdev=<分區(qū)路徑|設(shè)備號(hào)>,例如:

blkoops_partition=pstore #分區(qū)名對(duì)應(yīng)sys_partition.fex blkoops_blkdev=93:7 #可先任意寫(xiě)一個(gè) setargs_nand=... pstore_blk.blkdev=${blkoops_blkdev} ...

uboot則會(huì)根據(jù)blkoops_partition的分區(qū)名,自動(dòng)匹配和修改blkoops_blkdev。

對(duì)于不支持進(jìn)一步封裝的方案,可在啟動(dòng)后查詢cmdline的partitions參數(shù),例如:

$ cat /proc/cmdline .... partitions=boot-res@mmcblk0p2:env@mmcblk0p5:boot@mmcblk0p6....

OK,到此日志永久轉(zhuǎn)存的功能已經(jīng)使能。

2.8.2 獲取奔潰日志.

2.8.2.1 掛載文件系統(tǒng).

全志輕量級(jí)日志轉(zhuǎn)存的方案基于的是pstore文件系統(tǒng),因此需要掛載文件系統(tǒng)后才能使用。

在Tina平臺(tái)中,pstore文件系統(tǒng)已經(jīng)實(shí)現(xiàn)默認(rèn)開(kāi)機(jī)自動(dòng)掛載,可以通過(guò) mount 命令確認(rèn),例如:

# mount ··· pstore on /sys/fs/pstore type pstore (rw,relatime) ···

Android平臺(tái),需要自行實(shí)現(xiàn)掛載,掛載命令可參考:

mount -t pstore pstore /sys/fs/pstore

掛載后,在觸發(fā)日志轉(zhuǎn)存重啟后,可以在掛載點(diǎn) /sys/fs/pstore 中可獲取奔潰日志文件,例如:

root@TinaLinux:/sys/fs/pstore# ll drwxr-x--- 2 root root 0 Jan 1 1970. drwxr-xr-x 5 root root 0 Jan 1 1970 .. -r--r--r-- 1 root root 15504 Mar 19 19:39 dmesg-pstore-blk- -r--r--r-- 1 root root 15881 Mar 19 19:39 dmesg-pstore-blk- -r--r--r-- 1 root root 2 Jan 1 1970 pmsg-pstore-blk- root@TinaLinux:/sys/fs/pstore#

可以通過(guò)命令 echo c > /proc/sysrq-trigger 主動(dòng)觸發(fā)內(nèi)核奔潰以驗(yàn)證功能。

2.8.2.2 讀取文件

奔潰日志會(huì)以文件形式呈現(xiàn)到掛載點(diǎn),一次奔潰一份日志,文件名格式如下。

<日志類型>-pstore-blk-<編號(hào)>

我們可通過(guò)標(biāo)準(zhǔn)的IO接口訪問(wèn)導(dǎo)出的日志文件。

我們可以通過(guò)名字區(qū)分dmesg日志記錄和psmg日志記錄,但dmseg日志記錄如何細(xì)分pan-ic/oops/oom呢?

在dmesg日志記錄的第一行可以進(jìn)一步細(xì)分日志類型和觸發(fā)次數(shù)累計(jì),例如:

root@TinaLinux:/sys/fs/pstore# head -n 3 dmesg-pstore-blk- OOM: Total 8 times OOM#8 Part <4>[ 95.111229] [] (do_page_fault) from [] (do_PrefetchAbort+0x38/ x9c)

除此之外, 文件時(shí)間表示的是奔潰觸發(fā)時(shí)間

2.8.2.3 刪除文件

可以直接刪除生成的日志文件

rm /sys/fs/pstore/*

對(duì)使用mtdpstore模塊的spinor/(ubi) spinand存儲(chǔ)方案,考慮到存儲(chǔ)物料的擦除特性,當(dāng)同 時(shí)存在多個(gè)連續(xù)文件,且剛好這些文件數(shù)據(jù)存儲(chǔ)在同一個(gè)物理塊內(nèi)時(shí),要把同一個(gè)塊內(nèi)的文件全 部刪除后才會(huì)真正刪除文件。

2.8.3 高級(jí)功能配置.

2.8.3.1 分區(qū)的空間分布

默認(rèn)情況下,pstore/blk的每一份記錄為64K。意味著如果分區(qū)大小為256K,則一共能同時(shí)存 在 4 份記錄。假設(shè)只使能kmsg和pmsg的記錄,此時(shí)分區(qū)的劃分情況大致如下表:

表2-3: pstore分區(qū)分布

0 - 64K 64k - 128K 128K - 192K 192K - 256 K
pmsg dmesg.0 dmesg.1 dmesg.

顯而易見(jiàn),在劃分了pmsg的空間后,剩余的空間全部分配給dmesg。

2.8.3.2 高級(jí)功能

內(nèi)核模塊通過(guò)cmdline中傳遞模塊參數(shù),可設(shè)置高級(jí)功能。日志永久轉(zhuǎn)存模塊支持以下模塊參 數(shù)。推薦使用默認(rèn)配置

表2-4: pstore支持參數(shù)

模塊名 功能 示例 默認(rèn)值
pstore_blk.blkdev 供blkoops使用的分區(qū) pstore_blk.blkdev=179:10 NULL
pstore_blk.oops_size dmesg記錄大小 pstore_blk.oops_size=64 64KB
pstore_blk.pmsg_size pmsg記錄大小 pstore_blk.pmsg_size=64 64KB
pstore_blk.console_size console記錄大小 pstore_blk.console_size=64 64KB
pstore_blk.ftrace_size ftrace記錄大小 pstore_blk.ftrace_size=64 64KB
pstore_blk.dump_oops 是否記錄Oops日志 pstore_blk.dump_oops=1 True
pstore.update_ms 定時(shí)刷新日志信息 pstore.update_ms=1000 -1

技巧:默認(rèn)情況下,只有重啟后才會(huì)刷新 pstore 的記錄,除非使能了 pstore.update_ms 。

審核編輯黃宇

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

    關(guān)注

    87

    文章

    11342

    瀏覽量

    210242
  • 內(nèi)存
    +關(guān)注

    關(guān)注

    8

    文章

    3052

    瀏覽量

    74253
  • Tina
    +關(guān)注

    關(guān)注

    2

    文章

    45

    瀏覽量

    17012
  • 系統(tǒng)
    +關(guān)注

    關(guān)注

    1

    文章

    1019

    瀏覽量

    21404
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    Tina_Linux系統(tǒng)裁剪開(kāi)發(fā)指南

    Tina_Linux系統(tǒng)裁剪開(kāi)發(fā)指南1 概述2 Tina系統(tǒng)裁剪簡(jiǎn)介2.1 boot0裁剪2.2 uboot裁剪2.3 內(nèi)核裁剪2.3.1
    的頭像 發(fā)表于 03-06 09:52 ?1613次閱讀

    Keil C51編譯,調(diào)試軟件使用指南

    Keil C51編譯,調(diào)試軟件使用指南該手冊(cè)是Keil 軟件公司8051 單片機(jī)軟件開(kāi)發(fā)工具的介紹是為新用戶和有興趣的讀者準(zhǔn)備的使用指南只需要閱讀本書(shū)就可以正確地運(yùn)行和使用該軟件這本用戶指南
    發(fā)表于 10-22 09:30

    keil C51編譯、調(diào)試使用指南

    keilC51編譯、調(diào)試使用指南
    發(fā)表于 08-14 16:38

    Tina Linux 系統(tǒng)介紹

    Tina Linux是全志科技基于Linux內(nèi)核開(kāi)發(fā)的針對(duì)智能硬件類產(chǎn)品的嵌入式軟件系統(tǒng)Tina Li
    發(fā)表于 03-11 15:05

    Keil C51編譯、調(diào)試軟件使用指南

    Keil C51編譯、調(diào)試軟件使用指南.pdf 該手冊(cè)是Keil 軟件公司8051 單片機(jī)軟件開(kāi)發(fā)工具的介紹是為新用戶和有興趣的讀者準(zhǔn)備的使用指南只需要閱讀本書(shū)就可以正
    發(fā)表于 03-01 16:07 ?168次下載

    Tina快速入門(mén)用戶指南

    這本用戶快速入門(mén)指南概要性的介紹了TINA-TI.一個(gè)強(qiáng)大的電路設(shè)計(jì)及仿真工具。TINA-TI是理想的用于對(duì)各種基本的和 高級(jí)的電路(具有復(fù)雜的結(jié)構(gòu)、沒(méi)有任何節(jié)點(diǎn)或器件數(shù)量的限制)進(jìn)行設(shè)計(jì)、測(cè)試和故障診斷的工具。本文檔的目的是,
    發(fā)表于 03-16 15:58 ?0次下載

    AirSync Debugger使用指南_微信藍(lán)牙協(xié)議調(diào)試工具

    AirSync Debugger使用指南_微信藍(lán)牙協(xié)議調(diào)試工具
    發(fā)表于 06-24 14:29 ?31次下載

    基于Keil C51編譯、調(diào)試軟件使用指南

    基于Keil C51編譯、調(diào)試軟件使用指南
    發(fā)表于 10-13 15:46 ?33次下載
    基于Keil C51編譯、<b class='flag-5'>調(diào)試</b>軟件<b class='flag-5'>使用指南</b>

    電子票使用指南免費(fèi)下載

    電子票使用指南電子票使用指南電子票使用指南電子票使用指南電子票使用指南電子票使用指南
    發(fā)表于 11-24 14:02 ?3次下載

    Tina_Linux_系統(tǒng)軟件開(kāi)發(fā)指南

    Tina_Linux_系統(tǒng)軟件開(kāi)發(fā)指南
    的頭像 發(fā)表于 03-02 15:25 ?1945次閱讀
    <b class='flag-5'>Tina_Linux</b>_<b class='flag-5'>系統(tǒng)軟件開(kāi)發(fā)指南</b>

    Tina Linux配置開(kāi)發(fā)指南

    Tina Linux配置開(kāi)發(fā)指南
    的頭像 發(fā)表于 03-02 15:28 ?1.7w次閱讀
    <b class='flag-5'>Tina</b> <b class='flag-5'>Linux</b>配置開(kāi)發(fā)<b class='flag-5'>指南</b>

    Tina Linux LCD調(diào)試指南

    編寫(xiě)目的 本文檔將介紹sunxi 平臺(tái)Display Engine 模塊中LCD 的調(diào)試方法。
    的頭像 發(fā)表于 03-06 10:51 ?3894次閱讀
    <b class='flag-5'>Tina</b> <b class='flag-5'>Linux</b> LCD<b class='flag-5'>調(diào)試</b><b class='flag-5'>指南</b>

    Tina Linux圖形系統(tǒng)開(kāi)發(fā)指南

    本文檔將介紹 Allwinner Tina Linux 中已經(jīng)移植好的窗口系統(tǒng),以及怎么使用,包括 MiniGUI、QT5、EFL、GTK+(WebkitGtk、Midori)、DirectFB、Wayland,整體結(jié)構(gòu) 。
    的頭像 發(fā)表于 03-06 11:00 ?3255次閱讀
    <b class='flag-5'>Tina</b> <b class='flag-5'>Linux</b>圖形<b class='flag-5'>系統(tǒng)開(kāi)發(fā)指南</b>

    Tina Linux Key快速配置使用指南

    本文介紹Tina 平臺(tái)key 相關(guān)的快速配置和使用方法。
    的頭像 發(fā)表于 03-06 11:03 ?1420次閱讀
    <b class='flag-5'>Tina</b> <b class='flag-5'>Linux</b> Key快速配置<b class='flag-5'>使用指南</b>

    Tina Linux PMU開(kāi)發(fā)指南

    介紹使用Tina PMU 驅(qū)動(dòng)的使用方法。
    的頭像 發(fā)表于 03-06 11:05 ?2198次閱讀
    <b class='flag-5'>Tina</b> <b class='flag-5'>Linux</b> PMU開(kāi)發(fā)<b class='flag-5'>指南</b>