第十章嵌入式Linux调试技术

时间:2021-06-01 18:52:09
对于复杂的 Linux 驱动及 HAL 等程序库,需要使用各种方法对其进行调试,例如,设置断点、逐步跟踪代码、输出调试信息等。 Printk 函数运行在内核空间, printf 函数运行在用户空间。使用 printk 函数可以很方便地将消息写入日志文件或控制台,但大量使用 printk 函数操作日志文件或控制台设备文件会严重影响 Linux 驱动的性能,因此,这就要求 Linux 驱动只在开发阶段使用 printk 函数输出消息。 Printk 函数在控制台显示消息是通过 /dev/console 设备文件实现的,该设备文件只在字符界面的控制台下才起作用,所以 printk 函数只有用在字符界面的控制台上才能正常输出消息。在 Linux 文件系统中, /proc 经常被用来作为内核空间与用户空间进行数据交互的工具。 /proc 是虚拟文件系统,所以读写 /proc 文件系统的速度要远比读写 /dev 文件系统的速度快。因此, /proc 文件系统也可作为 Linux 驱动与用户空间程序交互的工具。在 Linux 驱动程序中可以使用内核函数在 /proc 目录中创建和删除虚拟文件,也可以建立和删除虚拟目录。 /proc 文件系统和 /dev 文件系统一样,也需要设置访问文件的动作处理函数, /dev 文件系统通过 file_operations.read file_operations.write 函数指针变量读写设备文件的读写动作处理函数。 Proc_dir_entry 结构体代表一个虚拟目录或文件。