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 内核移植(七)—— 内核相关知识补充相关推荐
- linux的内核和发行版本号,【编测编学】linux内核及发行版本相关知识
之前很多孩子就和我说老师我会linux,我就会反问,你学软件测试,你会linux你知道linux的东西如何和企业结合吗? 不是你只会一些cd.chmod.chown.ps.find.tar.vim.v ...
- Python第二章相关知识补充
经过这周的Python课堂,第二章的知识点可以说是被彻头彻尾地讲了一下,所以我在此将上一篇发布的博客内容也加以完善. 2.1.3 列表元素的删除 在学习了列表元素的增加以后,删除列表元素的方法也可以进 ...
- 【电路】【扩展】锂电池相关知识补充
锂电池相关知识 因为看到别人做平衡车直接使用18650电池供电,整整齐齐地码了3颗在PCB上感觉十分优雅,所以自己也想要用18650做一个,奈何对这方面一无所知,索性把相关知识都学一遍吧. 因为网上资 ...
- 【必须】螺钉螺母相关知识补充
本文主要介绍在电赛中制作机械结构时需要的螺丝.螺母.轴承等相关知识. 参考资料: 1.百度百科 2.不同的螺丝头型都有那些不同的用途?不同的螺丝头型都有那些不同的用途? 1.螺丝 在制作作品的时候,最 ...
- Exynos4412 Uboot 移植(六)—— 相关知识补充
Uboot版本:u-boot-2013.01 一.gd结构体的定义与使用 gd_t 和 bd_t 是u-boot中两个重要的数据结构,在初始化操作很多都要靠这两个数据结构来保存或传递. gd_t 定义 ...
- 安全证书相关知识补充
[参考资料] [1]https://www.cnblogs.com/junjiany/p/6273560.html [2]https://blog.csdn.net/joah_li/article/d ...
- 嵌入式linux内核移植
获取linux内核 移植linux内核首先我们需要先获内核源码,可以从linux官网下载:https://www.kernel.org,但是一般做法是 根据cpu类型从它们的半导体厂商网站获取,因为半 ...
- Next.js踩坑入门系列(七) —— 其他相关知识
Next.js踩坑入门系列 (一) Hello Next.js (二) 添加Antd && CSS (三) 目录重构&&再谈路由 (四) Next.js中期填坑 (五) ...
- (三)内核移植--从零开始自制linux掌上电脑(F1C200S)<嵌入式项目>
目录 一.bootloader.kernel.rootfs联系 二.内核移植 1. 内核源码获取 2. 内核配置与编译
最新文章
- P2000-拯救世界【生成函数,NTT】
- 图解,C语言希尔排序
- python与人工智能应用锁_linux应用锁的搜索结果-阿里云开发者社区
- C# 基础知识复习(四)---数组
- 扎根CNCF社区贡献五年是怎样的体验?听听华为云原生开源团队的负责人怎么说
- 《Head First设计模式》 读书笔记03 装饰对象
- Sqoop导入到hdfs
- 职工工资管理系统c语言,C++实现企业职工工资管理系统
- Learn OpenGL 笔记6.2 Gamma Correction(伽马校正)
- 百度这个写在控制台的消息:2021百度校招
- MAC电脑制作iPhone手机铃声
- 微信小程序常见问题记录
- cors nginx 怎么解决_NGINX配置跨域CORS支持的正确方式
- Floodlight模块分析:forwarding模块
- hdu 4544 优先队列
- android wifi布局,Android使用 WiFi 建立 P2P 连接
- 任志强:松房贷等政策出台后 房价走低趋势将逆转
- vb6.0 Access数据库
- 小程序毕业设计 基于微信旅游攻略小程序毕业设计开题报告功能参考
- 【转360】KB4041678 Windows 仅安全更新(2017.10) 补丁更新后执行SQL出错! http://bbs.360.cn/thread-15201531-1-1.html...