读书笔记第十章

第十章

打印内核的调试信息printk

printkprintf区别:

printk 函数该函数的用法与printf函数类似,具不过printk函数运行内核空间,printk函数运行在用户空间。也就是说,像Linux驱动这样的Linux内核程序只能使用prink函数输出调试信息。

其次应该防止printk函数可以很方便地将消息写入日志文件或控制台,但是大量使用printk函数频繁操作日志文件或控制台设备文件会严重影响Linux驱动的性能,因此这就要求Linux驱动只在开发阶段使用printk函数输出消息,在正式发布Linux驱动时将可能影响性能的printk函数去掉。

然后通过虚拟文件系统进行数据交互。

嵌入式调试方法:

1.模拟器。比如Qtopia Core可以用奇趣提供的Frame Buffer模拟工具qvfbARM硬件模拟可以用SkyEye开源项目。

2.远程调试。调试器还在PC上,调试器与被调试的程序通过网络通信。

3.通过LOGCore Dump等文件事后分析。

stdprm 标准打印机 LPT1端口

stdaux 标准串行设备 COM1端口

stdin并不一定来自键盘,stdoutstderr也并不一定显示在屏幕上,可以将它们重定向到其他设备或磁盘文件上。

使用fprintf()时,第一参数推荐使用stderr而不要使用stdout,因为stderr的运行级要高一些,程序在异常退出时stderr可以输出,而stdout就不行

对于复杂的Linux驱动及HAL等程序库,需要使用各种方法对其进行调试,例如,设置断点、逐步跟踪代码、输出调试信息等。Printk函数运行在内核空间,printf函数运行在用户空间。

初始化Linux驱动

Static int _init printk_demo_init(void)

卸载Linux驱动

Static void _exit printk_demo_exit(void)

原文地址:https://www.cnblogs.com/spurlash/p/5651708.html