linux驅動一 裝置號的分配和管理

2021-07-13 17:08:07 字數 1326 閱讀 1789

在核心原始碼中,涉及裝置號分配和管理的函式有兩個

int register_chrdev_region(dev_t from,unsigned int count,char*name)  //from為第乙個裝置編號,count為連續的裝置個數,即是驅動程式所管理的裝置個數,name為驅動程式名

*chrdevs[chrdev_major_hash_size]; */

//其初始化狀態為

dev_t to=from+count;  //末裝置號

dev_t n,next;

from(n=from;nnext=mkdev(major(n)+1,0);   //下乙個主裝置號的首個裝置

if(next>to) 

next=to;

cd=_register_chrdev_region(major(n),minor(n),next-n,name);  //最終要呼叫此函式實現分配

if(is_err(cd))

goto fail;

}return 0;

fail:

to=n;

for(n=from;nnext=mkdev(major(n)+1,0);

kfree(_unregister_chrdev_region(major(n),minor(n),next-n));

}return ptr_err(cd);

}static struct char_device_struct *

_register_chrdev_region(unsigned int major,unsigned int baseminor,int minorct,const char *name)

if(i==0)

major=i;

ret=major;

}...

}*//*上述**片段的實現原理很簡單,在for迴圈中從chrdevs陣列的末項(254)前向掃瞄,如發現該陣列中某項,如i項對應為null,那就把該項對應的索引值i作為分配的主裝置返回給驅動程式,同時生成乙個struct char_device_struct插入到

*/cd=_register_chrdev_region(0,baseminor,count,name);

if(is_err(cd))

return ptr_err(cd);

*dev=mkdev(cd->major,cd->baseminor);

return 0;

}

裝置驅動及Linux裝置號

在乙個計算機系統的開發過程中,應用層一般不會去關心底層硬體的具體操作,而是專注於應用層業務邏輯的實現,因此我們會將涉及到裝置硬體底層的操作封裝成乙個個介面,應用層在進行業務設計的過程中只需呼叫這些介面便可以完成想要的操作,這些介面我們可以成為裝置驅動。即使在乙個不執行作業系統的系統中 如傳統的51微...

linux驅動裝置號的註冊

建立裝置號,分2種,靜態註冊和動態註冊 不是自己指定裝置號 靜態 註冊 int register chrdev unsigned int major,const char name,const struct file operations fops 傳參 major 主裝置號 name 裝置名 fo...

linux驅動入門之自動分配主裝置號 建立裝置節點

以開發板按鍵為例,在開發板上執行 1.second drv.c檔案 include include include include include include 包含class create,device create,這些程式 include include include 版本核心為此位置 之...