1. 程式人生 > >linux中device->bus_id找不到

linux中device->bus_id找不到

以下是轉載自
網友ying_seven的部落格(看到其也是轉載的,但是並沒有註明來處)

--------------------------------------------------------------------------------------------------------------------------
按照國嵌的程式碼(LDD那本書上的程式碼也一樣):
struct device my_bus = {
    .bus_id = "my_bus0",
    .release = my_bus_release,
};

static int my_match(struct device *dev, struct device_driver *driver)
{
return !strncmp(dev->bus_id, driver->name, strlen(driver->name));
}

編譯時,提示 struct device 中沒有bus_id 這樣的錯誤。開啟/lib/modules/2.6.35-28-generic/build/include/linux/device.h
找到struct device  的定義,裡面沒有bus_id,但有:
const char *init_name; /* initial name of the device */                      這句。

可見,要把上面結構中的.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));

這樣編譯即可成功!

另注:
如果要設定裝置的名字,也不再使用strncpy(my_dev.bus_id, "my_dev", BUS_ID_SIZE);     而改用:
dev_set_name(&dev, "name");