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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Exynos4412 内核移植(七)—— 内核相关知识补充

發布時間:2023/12/9 编程问答 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Exynos4412 内核移植(七)—— 内核相关知识补充 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一、內核調試方法簡單分析

1、addr2line: 解決oops錯誤

? ???a -- oops消息

? ? ? oops(也稱 panic),稱程序運行崩潰,程序崩潰后會產生oops消息。應用程序或內核線程的崩潰都會產生oops消息,通常發生oops時,系統不會發生死機,而在終端或日志中打印oops信息。

? ? ?當使用NULL指針或不正確的指針值時,通常會引發一個 oops 消息,這是因為當引用一個非法指針時,頁面映射機制無法將虛擬地址映像到物理地址,處理器就會向操作系統發出一個"頁面失效"的信號。內核無法"換頁"到并不存在的地址上,系統就會產生一個"oops"。
? ? ?oops 顯示發生錯誤時處理器的狀態,包括 CPU 寄存器的內容、頁描述符表的位置,以及其一些難理解的信息。這些消息由失效處理函數(arch/*/kernel/traps.c)中的printk 語句產生。較為重要的信息就是指令指針(EIP),即出錯指令的地址。

? ??

? ? ?b -- 解決方法

? ? ? ? ??arm-linux-addr2line ?地址 ?-e ?vmlinux ?-f ?

? ? ? ? ? 將Pc地址轉換成對應的行號


2、通過printk打印信息

? ? ?內核通過 printk() 輸出的信息具有日志級別,日志級別是通過在 printk() 輸出的字符串前加一個帶尖括號的整數來控制的,如 printk("<6>Hello, world!/n");。內核中共提供了八種不同的日志級別,在 linux/kernel.h 中有相應的宏對應。

#define KERN_EMERG ? ?"<0>" ? ?/* system is unusable */
#define KERN_ALERT ? ?"<1>" ? ?/* action must be taken immediately */
#define KERN_CRIT ? ? "<2>" ? ?/* critical conditions */
#define KERN_ERR ? ? ?"<3>" ? ?/* error conditions */
#define KERN_WARNING ?"<4>" ? ?/* warning conditions */
#define KERN_NOTICE ? "<5>" ? ?/* normal but significant */
#define KERN_INFO ? ? "<6>" ? ?/* informational */
#define KERN_DEBUG ? ?"<7>" ? ?/* debug-level messages */


? ? ? 所以 printk() 可以這樣用:

? ? ??printk(KERN_INFO "Hello, world!/n");。

? ?

? ? ? 未指定日志級別的 printk() 采用的默認級別是 DEFAULT_MESSAGE_LOGLEVEL,這個宏在 kernel/printk.c 中被定義為整數 4,即對應KERN_WARNING

? ? ?在 /proc/sys/kernel/printk 會顯示4個數值(可由 echo 修改),?分別表示當前控制臺日志級別、未明確指定日志級別的默認消息日志級別、最小(最高)允許設置的控制臺日志級別、引導時默認的日志級別

? ? ?當 printk() 中的消息日志級別小于當前控制臺日志級別時,printk 的信息(要有/n符)就會在控制臺上顯示。但無論當前控制臺日志級別是何值,通過 /proc/kmsg (或使用dmesg)總能查看。另外如果配置好并運行了 syslogd 或 klogd,沒有在控制臺上顯示的 printk 的信息也會追加到 /var/log/messages.log 中。

char myname[] = "chinacodec/n";
printk(KERN_INFO "Hello, world %s!/n", myname);

總結

以上是生活随笔為你收集整理的Exynos4412 内核移植(七)—— 内核相关知识补充的全部內容,希望文章能夠幫你解決所遇到的問題。

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