![](https://img-blog.csdnimg.cn/20190927151117521.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
——内核调试篇
文章平均质量分 83
以实战为线索,收录Linux内核调试方法
嵌入式Linux充电站
芯片原厂驱动工程师,
始终觉得“讲出来,才是学到的”,
学习、沉淀、分享,才能有所获!
展开
-
Linux内核死锁检测工具——Lockdep
Linux内核在2006年引入了死锁调试模块`lockdep`,`lockdep`会跟踪每个锁的自身状态和各个锁之间的依赖关系,经过一系列的验证规则来确保锁之间依赖关系是正确。原创 2022-12-25 13:58:04 · 2082 阅读 · 0 评论 -
Linux内核基础篇——常用调试技巧汇总
Linux内核调试常用技巧汇总:printk、动态输出、BUG()和BUG_ON()、dump_stack()分析函数调用关系、devmem直接读写寄存器原创 2022-12-24 19:26:45 · 1390 阅读 · 0 评论 -
Linux内核基础篇——动态输出调试
上篇说到printk调试,但printk是全局的,只能设置输出等级。而动态输出**可以动态选择打开某个内核子系统的输出,可以有选择性地打开某些模块的输出。要使用动态输出,必须在配置内核时打开`CONFIG_DYNAMIC_DEBUG`宏。内核代码里使用大量`pr_debug()/dev_dbg()`函数来输出信息,这些就使用了动态输出。原创 2022-12-18 23:10:51 · 388 阅读 · 0 评论 -
Linux内核基础篇——initcall
写过Linux驱动的人都知道`module_init`宏,因为它声明了一个驱动的入口函数。除了`module_init`宏,你会发现在Linux内核中有许多的驱动并没有使用`module_init`宏来声明入口函数,而是看到了许多诸如以下的声明:原创 2022-12-12 22:12:45 · 746 阅读 · 0 评论 -
Linux内核基础篇——printk调试
很多内核开发者喜欢的调试工具是printk,在Linux内核中,使用printk()函数来打印信息,它与C库的printf()函数类似。printk()与printf()的一个重要区别是:**printk()提供输出等级**。内核会根据这个等级来判断是否在终端或者串口中输出。原创 2022-12-14 00:04:36 · 1487 阅读 · 0 评论