Chinaunix

标题: 跪求各位了! [打印本页]

作者: mch_kot    时间: 2011-04-08 17:00
标题: 跪求各位了!
各位,我在调试驱动的时候将printk的打印信息加入驱动.c 中,通过编译,但在超级终端中看不到其打印信息。我不知道打印信息究竟在哪?请各位帮忙!我用grep “************"\* -r ./*来搜索打印信息所在文件,但似乎在根目录下不好使,我也觉得很奇怪。
跪求各位了!
作者: whaaat    时间: 2011-04-08 21:55
dmesg
作者: Trigger_Huang    时间: 2011-04-08 22:23
sudo dmesg -c
insmod name.ko
dmesg

或者看var里面的log文件
作者: accessory    时间: 2011-04-09 00:20
tail -f /var/log/messages

另外,PRINTK 的时候不要加啥DEBUG, INFO之类的东西了,直接打. 另外,还看你用的啥环境? X86 PC? OR ARM ?
作者: lelee007    时间: 2011-04-09 12:13
LS正解
作者: T-Bagwell    时间: 2011-04-09 12:18
LS也正解
作者: mch_kot    时间: 2011-04-11 11:26
回复 3# Trigger_Huang

sudo dmesg -c 好像是可以显示打印信息的,不过由于我没有分屏显示,一下显示太多了,没看全。我在命令后面加了 |more,想重新看一遍,结果什么都不再显示了。不知是什么问题。
作者: mch_kot    时间: 2011-04-11 11:29
回复 4# accessory


    应该没有加,我是调试arm的驱动,在pc机上的虚拟机上进行开发,查找打印信息也是在虚拟机上进行的。不知道在超级终端上查看打印信息可以吗?
作者: mch_kot    时间: 2011-04-11 11:37
回复 6# T-Bagwell


    按照大家给的意见,现在已经可以看到打印信息了,不过没有我在指定的驱动里添加的打印信息,这是为什么呢?我打印了有十几个信息,应该不会是我疏忽的问题。
   打印信息添加的时候有什么要求吗?
作者: T-Bagwell    时间: 2011-04-11 11:42
还是dmesg>dmesg.log吧
然后cat dmesg.log好点
作者: Trigger_Huang    时间: 2011-04-11 12:36
回复 7# mch_kot

    请参考我提出的三步的顺序。
    sudo dmesg -c  是清除所有的信息……
   所以在insmod之前先清除一下,然后再insmod的话,打印信息就看得清楚一些……
作者: mch_kot    时间: 2011-04-11 13:34
回复 11# Trigger_Huang


    这个不是.ko的模块,是.o的文件。不知道可以吗?.ko的文件如何生成呢?
我尝试加载了一下,insmod: error inserting ' mt9v011.o': -1 operation not permitted
我以为是没有权限的问题,加上sudo出现的错误为:insmod: error inserting ' mt9v011.o': -1 Invalid module format
作者: Trigger_Huang    时间: 2011-04-11 18:23
回复 12# mch_kot


    .o 文件???  你不是说要编写模块嘛?? 模块编译后就是ko文件啊……
作者: accessory    时间: 2011-04-12 05:53
我也晕了。驱动不都是.KO 么?LZ写的是驱动么?用什么打印输出的? PRINTF? PRINTK?
作者: mch_kot    时间: 2011-04-12 08:55
回复 14# accessory


    编写好的.c驱动通过make不就生成.o了吗?我以前也听说过.ko,但在driver中只能看到.o,而不知道.ko在哪里啊?小弟初学驱动,请高手多多指点
作者: mch_kot    时间: 2011-04-12 08:59
回复 13# Trigger_Huang


  
编写好的.c驱动通过make不就生成.o了吗?我以前也听说过.ko,但在driver中只能看到.o,而不知道.ko在哪里啊?小弟初学驱动,请高手多多指点

我的整个流程是:将该驱动名称添加到.konfig和makefile中,在makemenuconfig中选中,然后make uImage,最后生成了镜像,将镜像置于开发板上,然后运行开发板,在串口超级终端中查看打印信息。
我也知道该有模块,但模块怎么形成呢?我不知道哪里有问题,或是还缺少哪些步骤?
作者: Trigger_Huang    时间: 2011-04-12 19:45
回复 16# mch_kot


   既然是编译成KO文件,就没必要修改Makefile以及Kconfig了,随便在一个目录写好模块代码,再写个Makefile文件, 当前目录下make就能生成ko,然后再当前目录下sudo insmod name.ko 就可以了

obj-m := name.o
all:
    make -C ${KERNEL_PATH} M=`pwd` modules
clean
      make -C ${KERNEL_PATH} M=`pwd` modules clean
作者: Trigger_Huang    时间: 2011-04-12 19:50
回复 17# Trigger_Huang


   对了,如果是运行在ARM开发板上,还要在Makefile中添加 ARCH=arm CROSS_COMPILE=arm-linux-   export ARCH, CROSS_COMPILE
最后将生成的KO下载到开发板上,然后运行你的rootfs中的命令insmod就能看到你的模块在开发板上运行了。
作者: mch_kot    时间: 2011-05-05 16:48
回复 17# Trigger_Huang


    可是我这个驱动是一个摄像头驱动,本身的位置在driver/media/video下,而且需要i2c总线,把它单独编译出来可以吗?
作者: mch_kot    时间: 2011-05-10 16:26
回复 18# Trigger_Huang


    谢谢你的建议,按照你的建议我现在已经把模块弄好了,而且先dmesg -c 了,然后insmod
但我再 dmesg  的时候发现没有任何内容,
root@beagleboard:/# dmesg -c
root@beagleboard:/# insmod mt9p031.ko
root@beagleboard:/# dmesg

这是什么问题啊?
作者: Trigger_Huang    时间: 2011-05-11 18:34
回复 19# mch_kot


    I2C总线子系统可以在配置内核的时候选上
作者: Trigger_Huang    时间: 2011-05-11 18:40
回复 20# mch_kot


  你确定是已经在驱动中添加了自己的打印信息? 要不你在__init函数中添加一些打印信息吧,或者你insmod后用lsmod | grep "name" 看看你的KO是否已经被load了
作者: mch_kot    时间: 2011-05-12 11:08
回复 22# Trigger_Huang

root@beagleboard:/# lsmod
Module                  Size  Used by
mt9p031                 1416  0
root@beagleboard:/#

这个就是我自己的驱动模块
作者: Trigger_Huang    时间: 2011-05-12 18:30
回复 23# mch_kot

你在module_init的函数中加入一些打印信息吧,如果dmsg还没信息的话,那就职能看log文件了……
作者: embeddedlwp    时间: 2011-05-16 15:24
4楼正解




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2