linux设备驱动程序第三版--第4章调试技术--读后总结
来源:互联网 发布:行知基地洗澡有帘子吗 编辑:程序博客网 时间:2024/05/21 09:26
第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 动态探针
一 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 0
- linux设备驱动程序第三版--第4章调试技术--读后总结
- 《LINUX设备驱动程序》第4章(调试技术)学习笔记
- Linux设备驱动程序(第三版)学习之内核的调试技术(三)_2_查询调试
- linux设备驱动程序第二版 调试技术
- Linux设备驱动程序-调试技术
- Linux设备驱动程序(第三版)学习之内核的调试技术(三)_1
- 《linux设备驱动程序》第3章总结
- Linux设备驱动程序第三版学习(3)- 调试
- 【Linux设备驱动程序(第三版)】----驱动调试Proc
- Linux设备驱动程序第三版学习(3)- 调试
- Linux设备驱动程序第三版学习(3)- 调试 .
- 《linux设备驱动程序》第三版
- Linux 设备驱动程序 第三版
- 《Linux设备驱动程序》——调试技术
- Linux设备驱动程序第三版之块设备驱动程序
- linux设备驱动程序调试
- Linux设备驱动程序(第三版)学习
- 完整的Linux设备驱动程序 第三版
- mysql自带函数
- Android 项目中部分Java文件报红,不影响运行处理
- 握于手中 方显真实 对对热敏打印机便携众测初体验
- 利用python 更新ssh 远程代码 操作远程服务器
- activemq的几种基本通信方式总结
- linux设备驱动程序第三版--第4章调试技术--读后总结
- python 中append与join用法
- Terminal sublime 直接打开命令行插件
- Android应用同时实现微信分享和微信登录功能
- Cookie、Session和缓存
- mysql索引无效且sending data耗时巨大原因分析
- Android文档查看
- Nodejs和Vuejs通信的跨域问题
- 【机器学习实战】第13章 利用 PCA 来简化数据