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

关于2.6.30.4在创建bus总线时的bus_id的问题

在国嵌视频里有个问题困扰了我好久,对于内核的不熟悉,一开始是出现了使用空指针的问题,部分错误提示如下

Unable to handle kernel NULL pointer dereference at virtual address 00000000    
pgd = c3ab4000                                                                  
[00000000] *pgd=33b11031, *pte=00000000, *ppte=00000000                         
Internal error: Oops: 17 [#1]                                                   
last sysfs file: /sys/devices/virtual/vc/vcsa4/dev                              
Modules linked in: usb_driver(+) usb_device usb_bus                             
CPU: 0    Not tainted  (2.6.32.2-FriendlyARM #1)                                
PC is at strcmp+0x10/0x40                                                       
LR is at usb_bus_match+0x2c/0x60 [usb_bus] 
后面我几经周转发现是原来match函数中设备名为空,这个我是照着其他人写的博客上面弄的,只知道照着弄,其他的就不清楚了,后面上网搜的下面这篇文章,本想自己总结一下,不过发现他们总结的很好了,而且我完全保留原作者的文章,没有改动。

原文地址  http://hi.baidu.com/tracyangrad/blog/item/88437f5b188d74302934f042.html


实验环境:
linux2.6.30.4

在做bus驱动实验的时候,出现了一个问题:
提示bus_id找不到。于是到内核源代码找了一番,果然没有看见。直接到device结构体中看,找到的最像的也就
const char *init_name; /* initial name of the device */
想到这个也可以作为标识,并且BUS_ID_SIZE也找不到,于是将strncpy(my_dev.init_name, "my_dev", BUS_ID_SIZE);注释掉,直接在mydev中添

.init_name="my_dev"
    但是在注册驱动时又出现了段错误,根据console打印,知道在strncmp时,也就是总线在比较驱动和设备的名字的时候出问题了。
于是在比较函数里加入
prin