做微商加入什么移动电商网站,wordpress与微信支付宝,wordpress阿里百秀4.1,北京小程序开发平台一、内核调试方法简单分析 1、addr2line: 解决oops错误 a -- oops消息 oops#xff08;也称 panic#xff09;#xff0c;称程序运行崩溃#xff0c;程序崩溃后会产生oops消息。应用程序或内核线程的崩溃都会产生oops消息#xff0c;通常发生oops时#xff0c;系统不会发… 一、内核调试方法简单分析 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(6Hello, 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);