申請裝置號時兩個函式使用上的差異
阿新 • • 發佈:2018-11-25
一、Linux上向系統申請裝置號的時候分為兩種情況
- 在已知裝置號的情況使用如下函式
函式原型如下:
int register_chrdev_region(dev_t from, unsigned count, const char *name);
from:裝置號
count:是你請求的連續裝置數量.
name:裝置的名字
缺點:裝置號有可能會衝突
2. 在裝置號未知的情況下使用如下函式:
函式原型如下:
int alloc_chrdev_region(dev_t *from, unsigned baseminor, unsigned count, const char *name);
from:裝置號
baseminor:次裝置號
count:是你請求的連續裝置數量.
name:裝置的名字,他會出現在sysfs中
使用該函式會向系統動態申請未被佔用的裝置號。函式呼叫成功之後,會把得到的裝置號放入第一個引數from中。
優點:它會自動避開裝置號重複的衝突。
二、裝置號的釋放
釋放裝置號統一使用下面函式:
void unregister_chrdev_region(dev_t from, unsigned count);
from:裝置號
count:是你請求的連續裝置數量.
示例:
int ret;
static int globalmem_major = 250;
dev_t devno = MKDEV(globalmem_major, 0);
/*該函式會根據主裝置號和次裝置號生成總裝置號*/
if (globalmem_major){
ret = register_chrdev_region(devno, 1, "globalmem");
/*裝置號為devno,申請一個裝置,裝置名字為globalmem*/
} else {
ret = alloc_chrdev_region(&devno, 0, 1, "globalmem");
/*自動生成devno,申請一個裝置,次裝置號為0,裝置名字為globalmem*/
}