device create建立裝置節點分析

2021-08-07 10:47:04 字數 1240 閱讀 3439

在驅動中經常可以看到類似下面的話:

adb_dev_class = class_create(this_module, "adb");

device_create(adb_dev_class, null, mkdev(adb_major, 0), null, "adb");

那麼device_create呼叫什麼函式建立裝置節點,繼續分析

struct device *device_create(struct class *class, struct device *parent,

dev_t devt, void *drvdata, const char *fmt, ...)

分析device_create_vargs函式

struct device *device_create_vargs(struct class *class, struct device *parent,

dev_t devt, void *drvdata, const char *fmt,

va_list args)

dev->devt = devt;

dev->class = class;

dev->parent = parent;

dev->release = device_create_release;

dev_set_drvdata(dev, drvdata);

retval = kobject_set_name_vargs(&dev->kobj, fmt, args);

if (retval)

goto error;

retval = device_register(dev);

if (retval)

goto error;

return dev;

error:

put_device(dev);

return err_ptr(retval);

}

可以看到其中呼叫了device_register函式,有些驅動沒有device_create,也是利用device_register來建立裝置節點。如果繼續分析device_register的話可以得出,device_register呼叫device_add中的kobject_add來在sys目錄下建立。sys和proc一樣是虛擬檔案系統,在2.6之後的核心,引入的使用者空間mdev機制,會根據sys下的檔案來建立裝置節點。

建立裝置例程

昨天寫了最最簡單的驅動,乙個c檔案,乙個makefile,乙個sources,就行了,今天要向c檔案中新增更多的東西,首先第一就是裝置建立。裝置建立很簡單,第一步,建立裝置名稱,第二步,建立裝置,第三部建立符號鏈結。當然其中最重要的乙個函式就是建立裝置iocreatedevice 了。總共七個引數,...

建立裝置節點

書中所使用的是mknod命令手動建立節點,事實上有一組函式支援自動建立裝置節點。核心中定義了struct class結構體,乙個struct class結構體變數對應乙個類,核心提供了class create巨集來建立乙個類。呼叫class create會在 sys class目錄下生成乙個目錄,接...

自動建立裝置結點

bin bash 1 module name create module device node file if 1 then echo usage install module module name don t need ko suffix exit 1 fiecho remove exist ...