第十章嵌入式Linux调试技术
对于复杂的
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
结构体代表一个虚拟目录或文件。