建立裝置例程

2021-06-20 07:26:46 字數 1246 閱讀 6095

昨天寫了最最簡單的驅動,乙個c檔案,乙個makefile,乙個sources,就行了,今天要向c檔案中新增更多的東西,首先第一就是裝置建立。

裝置建立很簡單,第一步,建立裝置名稱,第二步,建立裝置,第三部建立符號鏈結。當然其中最重要的乙個函式就是建立裝置iocreatedevice()了。總共七個引數,第乙個是driverobject,驅動物件的指標。第二個deviceextensionsize,指定裝置擴充套件的大小。第三個devicename,設定裝置物件的名字。第四個devicetype,用file_device_unknown。第五個devicecharacteristics,設定裝置物件的特徵,為0。第六個exclusive,設定裝置物件是否為核心模式下使用,設為true(犯了個錯誤,用了系統直接給的true,結果出錯了),最後乙個是deviceobject,輸出引數,返回這個裝置物件的位址(記得是位址哦,前面有&)。用createdevice函式來封裝

ntstatus createdevice (in pdriver_object pdriverobject)

ntstatus status;

pdevice_object pdevobj;/*用來返回建立裝置*/

//建立裝置名稱

unicode_string devname;

unicode_string symlinkname;

rtlinitunicodestring(&devname,l"\\device\\yjxddk_device");/*對devname初始化字串為 "\\device\\yjxddk_device"*/

//建立裝置

status = iocreatedevice( pdriverobject,0,&devname,file_device_unknown,0, true,&pdevobj);//最後乙個為得到的裝置物件

if (!nt_success(status))

return status;

pdevobj->flags |= do_buffered_io;

//建立符號鏈結

rtlinitunicodestring(&symlinkname,l"\\??\\ddd");

status = iocreatesymboliclink( &symlinkname,&devname );

if (!nt_success(status))

iodeletedevice( pdevobj);

return status;

return status_success;

建立裝置節點

書中所使用的是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 ...

linux DEVICE ATTR建立裝置節點程式

一 簡述 通過device attr建立裝置節點,可以完成一些簡單的驅動的測試工作,可以向節點做echo cat相關的操作。二 如下 1 驅動 include include include include include 執行cat會呼叫到此函式 static ssize t hello test...