在核心中,對於乙個普通的字元裝置驅動,不難發現有兩種註冊方式:
register_chrdev族函式+建立裝置類、檔案的函式:這種方法是2.4版本流行的舊方法。優點是簡單;缺點是無法指定次裝置號
/*需要的定義*/
int test_major = -1;
static
struct
class *mydev_pclass;
#define test_name "test"
#define mydev_cnt 3
/*正式註冊*/
test_major = register_chrdev(0, test_name, &test_fops);
if (test_major < 0)
/*用class_create建立乙個裝置類,這是建立裝置檔案的前置任務*/
mydev_pclass = class_create(this_module, "mydevice");
if (is_err(mydev_pclass))
/*由device_create正式建立裝置檔案*/
device_create(mydev_pclass, null, mkdev(test_major, 0), null, "mydevice");
return
0;/*倒影式錯誤處理流程*/
out_err_2:
class_destroy(mydev_pclass);
out_err_1:
unregister_chrdev(test_major);
out_err_0:
return -einval;
/*需要用到的定義*/
#define mydev_num mkdev(mymajor, 0)
#define myname "mydevice"
#define mydev_cnt 3
static
struct cdev *mydev_pcdev;
static
struct
class *mydev_pclass;
dev_t mydev_num = 0;
unsigned
int mydev_major = 0;
/*正式開始註冊*/
/*讓核心給我們自動分配裝置號(主次裝置號)*/
ret = alloc_chrdev_region(&mydev_num, 0, mydev_cnt, myname);
mydev_major = major(mydev_num);
if (ret < 0)
printk(kern_info "major %d\n", mydev_major);
/*cdev_alloc例項化乙個字元裝置體。為cdev分配記憶體*/
mydev_pcdev = cdev_alloc();
/*填充cdev裝置體。最主要是將file_operations填充進去*/
cdev_init(mydev_pcdev, &mydev_fops);
/*將裝置體與裝置號繫結並向核心註冊乙個字元裝置*/
ret = cdev_add(mydev_pcdev, mydev_num, mydev_cnt);
if (ret)
/*用class_create建立乙個裝置類,這是建立裝置檔案的前置任務*/
mydev_pclass = class_create(this_module, "mydevice");
if (is_err(mydev_pclass))
/*由device_create正式建立裝置檔案*/
device_create(mydev_pclass, null, mydev_num, null, "mydevice");
return
0;/*倒影式錯誤處理流程*/
out_err_3:
class_destroy(mydev_pclass);
out_err_2:
cdev_del(mydev_pcdev);
out_err_1:
unregister_chrdev_region(mydev_num, mydev_cnt);
out_err_0:
return -einval;
普通字元裝置驅動的兩種註冊方式(新 舊)
在核心中,對於乙個普通的字元裝置驅動,不難發現有兩種註冊方式 register chrdev族函式 建立裝置類 檔案的函式 這種方法是2.4版本流行的舊方法。優點是簡單 缺點是無法指定次裝置號 需要的定義 int test major 1 static struct class mydev pcla...
註冊事件的兩種方式
element.onclick function 特點 傳統的註冊方式具有唯一性,即同乙個元素同一事件只能設定乙個函式,如果寫了多個函式,最後乙個函式會把之前的函式都覆蓋掉。證明 傳統註冊事件 button 方法監聽註冊事件 button ie9 attachevent button var btn...
Android 廣播註冊兩種方式
兩種註冊型別的區別是 1 第一種不是常駐型廣播,也就是說廣播跟隨activity的生命週期。注意 在activity結束前,移除廣播接收器。2 第二種是常駐型,也就是說當應用程式關閉後,如果有資訊廣播來,程式也會被系統呼叫自動執行。在android下,要想接受廣播資訊,那麼這個廣播接收器就得我們自己...