日期:2014-05-16  浏览次数:20742 次

请问怎么调试驱动,printk()打印的信息在哪儿能看见?
请问怎么调试驱动,printk()打印的信息在哪儿能看见?我在超级终端观察printf()打印的信息时,怎么不见驱动中printk()打印信息呢?
驱动的调试是不是需要一个小的应用程序去调用驱动中的函数啊?谢谢

------解决方案--------------------
printk()打印的信息一般在/var/log/messages文件里
驱动程序一般通过注册自己的回掉函数供用户程序使用,看一下LDD3(Linux Device driver 3),上面讲的很清楚
------解决方案--------------------
请问如果要象终端打印输出,该怎么做呢?谢谢
===================================
不知道lz看的什么书,我想那上面应该有告诉你,不要在X下调试内核模块的吧?
用真正的终端,而不是虚拟终端!
------解决方案--------------------
如果你是在X Windows下的XTerm中insmod的,你不会看到输出,使用dmesg就可能看到在加载和卸载模块时的输出内容,只有直接在console下加载才能直接显示到屏幕上。

------解决方案--------------------
printk不显示在超级终端上,保存在/var/log/messages。

可以通过dmesg命令查看,如果只想显示最后几行,可以用
dmesg | tail - 8

驱动一般是软硬件联调

软件方法有:
1. 用打印调试(printk)
2. 使用 /proc 文件系统调试
3. 用strace 命令观察调试
4. 使用kgdb 调试
(软件调试方法可以参考Linux Device Driver 3rd Chapt 04

硬件调试一般是用示波器探测波形。
------解决方案--------------------
驱动的调试是不是需要一个小的应用程序去调用驱动中的函数啊?谢谢

哦,刚才没看清楚你的问题。知道你的意思了。

Linux下程序分为内核态和用户态,我们编写的驱动是内核态的,通过insmod加载.ko模块,再向/dev中注册设备节点后,用户态的程序就可以通过open,read,write,ioctl,release等方法访问,所以按你的意思,需要写一个用户态的可执行文件对设备进行操作,调试设备是否驱动成功。
------解决方案--------------------
我觉得楼主说的不是很清楚。

1) 启动时的信息未打印?
还是

2)在启动后,调试时候未看到printk打印的信息?

你确定你的驱动程序会打印消息吗?
------解决方案--------------------
前面不是回答了么。

printk不显示在超级终端上,保存在/var/log/messages。

可以在命令行上输入dmesg命令查看,如果只想显示最后几行,可以用
dmesg | tail - 8