嵌入式创建总线bus时的bus_id问题

 在做国嵌的创建总线的实验时,在制作bus.ko模块时,总是bus_id找不到的问题。

 

/home/duan/four/day2/bus/bus.c: In function 'my_match':
/home/duan/four/day2/bus/bus.c:16: error: 'struct device' has no member named 'bus_id'
/home/duan/four/day2/bus/bus.c: At top level:
/home/duan/four/day2/bus/bus.c:25: error: unknown field 'bus_id' specified in initializer
/home/duan/four/day2/bus/bus.c:25: warning: initialization from incompatible pointer type
make[2]: *** [/home/duan/four/day2/bus/bus.o] Error 1
make[1]: *** [_module_/home/duan/four/day2/bus] Error 2
make[1]: Leaving directory `/home/duan/third/day3/opt/EmbedSky/linux-2.6.30.4'
make: *** [all] Error 2

 

后来上网查询后,说可能是device.h中根本没有bus_id这个变量,我就进入内核目录,

即linux-2.6.30.4-->include--->linux目录下,找到device.h,查看了一下,在struct device下

struct device {
 struct device  *parent;

 struct device_private *p;

 struct kobject kobj;
 const char   *init_name; /* initial name of the device */
 struct device_type *type;

 struct semaphore sem; /* semaphore to synchronize calls to
      * its driver.
      */

没有bus_id这个变量,但是有const char   *init_name; /* initial name of the device */,
这本实验的解决方法为:

    1、    把 .bus_id = "my_bus0",  改为 .init_name = "my_bus0",
        同时return !strncmp(dev->bus_id, driver->name, strlen(driver->name));这个函数也要修改为

                      return !strncmp(dev_name(dev), driver->name, strlen(driver->name));

这样编译bus.c就能编译出bus.ko文件!!

    2、   还有在device.c中,设置设备名字也要修改,strncpy(my_dev.bus_id, "my_dev", BUS_ID_SIZE); 

这个函数要修改为       dev_set_name(&my_dev, "my_dev");

编译device.c就能编译出device.ko文件!!!

你可能感兴趣的:(驱动开发)