目录
第1章 内核驱动的调试方式汇总
第2章 直接在内核中进行打印的技术
第3章 利用内核提供给用户空间的接口调试内核
3.1 通过内核提供的shell命令调试内核
通过Linux提供的各种shell命令,是监控、操作、控制Linux内核最常见的方法。
3.2 通过跟踪POSIX系统调用测试内核(strace)
POSIX系统调用是Linux内核空间与用户空间边界。
通过strace工具,可以跟踪所有的用户空间和内核空间的交互以及系统调用的输入、输出、执行时间等信息。
3.3 通过内核export的proc系统调试内核
Linux系统上的/proc目录是一种文件系统,即proc文件系统。
与其它常见的文件系统不同的是,/proc是一种伪文件系统(也即虚拟文件系统,它只存在内存当中,而不占用外存空间。它以文件系统的方式为访问系统内核数据的操作提供接口),存储的是当前内核运行状态的一系列特殊文件。
用户可以通过这些文件查看有关系统硬件及当前正在运行进程的信息,甚至可以通过更改其中某些文件来改变内核的运行状态。
详细内容可以参考:
linux proc文件系统详解_吉甫作诵的博客-CSDN博客_linux proc
3.4 通过内核export的sysfs系统调试内核
sys文件系统提供了一个从用户空间通往内核空间的另一个入口。
与其它常见的文件系统不同的是,/sysfs也是一种伪文件系统。
Linux系统会把sysfs伪文件系统挂载到/sys目录,通过访问这个目录下面的文件,可以获得各种的系统内核信息,例如设备、内核模块、文件系统等。
sysfs 文件系统集成了下面3种文件系统的信息:针对进程信息的 proc 文件系统、针对设备的 devfs 文件系统以及针对伪终端的 devpts 文件系统。
该文件系统是内核设备树的一个直观反映。
3.5 通过内核设备提供的设备文件测试内核驱动
此方法是在用户空间调试编写好的内核空间的程序。
通过在用户空间操作内核空间以及内核空间的返回值,来调试、测试内核空间的程序。
大部分的内核驱动程序,都需要把数据以文件设备读写的方式呈现给用户空间。
因此,用户空间的程序可以利用文件设备符对内核空间的设备驱动程序进行测试。
这是测试之间编写的内核驱动程序最常见的方式。
第4章 单步跟踪测试程序
4.1 gdb调试host主机应用程序
(1)ddd是前端图形化界面
(2)gdb是后端单步执行的控制程序
在主机环境中,ddd和gdb 运行在相同的主机上。
这种方法适合调试应用程序:
- 可以是主机上的应用程序。
- 也可以是嵌入式Linux目标机器上的应用程序。(先通过ssh远程登录到目标机器,然后在目标主机上启动gdb)
4.2 单步跟踪调试嵌入式应用程序
(1)ddd:运行在Linux host主机上的前端界面程序
(2)gdb client:运行在Linux host主机上的后台调试程序,通过gdb命令,远程连接到gdb server上。
(3)gdb server:运行在目标嵌入式主机上。
这种方法适合调试远程应用程序,不常见,可以被第4.1替代。
4.3 单步跟踪内核程序
(1)ddd:运行在Linux host主机上的前端界面程序
(2)gdb client:运行在Linux host主机上的后台调试程序,通过gdb命令,远程连接到gdb server上。
(3)kgbd server:运行在目标嵌入式主机上。
这种方法适合调试内核动态加载的模块,不适合调试内核整体启动流程。
4.4 仿真器单单步踪内核程序
该方法适合调试内核程序的整体的启动流程。