linux设备驱动程序第三版--第4章调试技术--读后总结

  第4章 调试技术
kernel hacking(内核开发)选项:
CONFIG_DEBUG_KERNEL
其他调试选项可用,状态是开的


CONFIG_DEBUG_SLAB
对内存分配函数的几类检查,找到内存覆盖和遗漏初始化的错误。内存分配字节传递给调用者设成0x5a(怪不得有时候别人用这个字节),在释放时为0x6b


CONFIG_DEBUG_PAGEALLOC
跟页有关,说满的页在释放时会被内核地址空间去除,这个选项会拖慢系统,但它能指出内存损坏的错误


CONFIG_DEBUG_SPINLOCK
捕捉对未初始化的自旋锁的操作


CONFIG_DEBUG_SPINLOCK_SLEEP
对有自旋锁时进入睡眠的检查


CONFIG_INIT_DEBUG
系统初始化或者模块加载后都被丢弃,这个选项激活了对代码的检查,防止代码在初始化后存取初始化时的内存


CONFIG_DEBUG_INFO
是激活gbd调试内核的选项之一,另一个是CONFIG_FRAME_POINTER



CONFIG_MAGIC_SYSRQ
激活“Magic_SysRq”键


CONFIG_DEBUG_STACKOVERFLOW
CONFIG_DEBUG_STACK_USAGE
能跟踪内核堆栈溢出


CONFIG_KALLSYMS
在内核启动时  是缺省激活的,可以不管这个选项,没有它,oops只能以16进制给你内核回溯


CONFIG_IKCONFIG
CONFIG_IKCONFIG_PROC
这2个选项在“Generl setup”菜单,使得完整的内核配置状态被建立到内核之中


CONFIG_ACPI_DEBUG
和ACPI(Advanced Configuration and Power Interface)相关调试信息


CONFIG_DEBUG_DRIVER
打开了驱动核心的调试信息,在本书14章具体查看



CONFIG_SCSI_CONSTANTS
详细的SCSI错误消息的信息


CONFIG_INPUT_EVBUG
在“Device drivers/Input devicesupport”打开输入事件的详细日志 ,和输入设备驱动有关


CONFIG_PROFILING
在“Profiling support”,通常在系统性能调整、内核挂起上有用


二  打印调试
内核里大多是printk函数调试,比如
printk(KERN_DEBUG "Here I am: %s:%i\n", __FILE__, __LINE__);
printk(KERN_CRIT "I'm trashed; giving up on %p\n", ptr);
可以打印出变量所在的行号


打印设备编号:
<linux/kdev_t.h> 中定义)用于这个目的
int print_dev_t(char *buffer, dev_t dev);
char *format_dev_t(char *buffer, dev_t dev);


三 用查询调试
背景:大量的用printk会拖慢系统速度
查询方法:有几个技术给驱动开发者来查询系统: 创建一个文件在 /proc 文件系统下, 使用 ioctl驱动方法, 借助 sysfs 输出属性. 使用 sysfs 需要不少关于驱动模型的背景知识. 在14 章讨论


3.1  使用/proc文件系统
在/proc下每个文件都绑定到一个内核函数上,例如:/proc/modules,常常返回当前已加载的模块列表
3.2  ioctl方法

是一个系统调用,作用于一个文件描述符


四  观察调试

有时候小问题可以通过观察用户空间应用程序的行为来追踪。有几个方法可以监视用户空间程序运行。
strace命令,如 strace ls /dev > /dev/scull0这些


五 调试系统故障
有时候故障还留在驱动里,我们可以用oops消息和系统挂起。


六  调试器和相关工具
6.1 使用gdb
这个要经常用到 
6.2 kdb内核调试器
6.3 kgdb补丁
6.4 用户模式linux移植
http://user-mode-linux.sf.net/ 更多信息
6.5 linux追踪工具
http://www.opersys.com/LTT
6.6 动态探针
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Linux程序设计第四版》是一本权威的中文版Linux编程教材,适用于已有一定编程基础的读者。本书内容全面,结构严谨,深入浅出,可帮助读者系统地掌握Linux系统编程的核心知识。 第一首先介绍了Linux系统的基本特点,包括文件系统、进程管理、内存管理等概念,为后续节的学习铺平了道路。 第二讨论了Linux环境的建立和使用,包括开发环境的配置、程序编译与调试等内容,读者可以通过本的学习掌握如何在Linux系统下进行程序开发。 第三到第六分别介绍了Linux文件操作、输入输出、进程和线程、进程间通信等内容,深入讲解了相关的API接口和使用方法,读者可以学习如何利用这些接口来实现文件处理、输入输出操作、多进程编程等功能。 第七讲解了Linux网络编程,包括套接字编程、网络协议、网络通信等知识,读者可以学习如何实现基于网络的应用程序。 第八到第十分别介绍了Linux信号处理、多线程编程和进程管理的高级话题,涉及进程、线程之间的通信与同步,以及进程的创建、销毁等操作。 最后几则分别介绍了Linux多媒体编程、图形用户界面编程和设备驱动程序开发等内容,让读者全面了解Linux在不同领域的应用。 总之,《Linux程序设计第四版》适合那些希望深入理解Linux系统编程的读者,通过系统的学习,读者可以掌握Linux程序设计的核心技术,提升自己在Linux开发领域的能力。无论是从事Linux系统开发还是嵌入式开发的读者,本书都将是一本非常有价值的参考书。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值