linux misc device字元雜項裝置驅動

2021-08-28 19:04:05 字數 2012 閱讀 4229

雜項裝置也是在嵌入式系統中用得比較多的一種裝置驅動。miscdevice共享乙個主裝置號misc_major(即10),但次裝置號不同。misc裝置其實就是特殊的字元裝置,主裝置編號採用10,並且可自動生成裝置節點。

雜項裝置作為字元裝置的封裝,為字元裝置提供的簡單的程式設計介面,如果編寫新的字元驅動,可以考慮使用雜項裝置介面,方便簡單,只需要初始化乙個miscdevice的結構,呼叫misc_register就可以了,misc_register最終也是通過呼叫register_chrdev()來註冊裝置。系統最多有255個雜項裝置,因為雜項裝置模組自己占用了乙個次裝置號。

1. 實現struct file_operations

static struct file_operations leds_ops = ;
2. 初始化struct miscdevice,定義乙個misc裝置

static struct miscdevice leds_dev = ;
注:其中minor如果填充misc_dynamic_minor,則是動態動態次裝置號。

3. 註冊和釋放misc裝置

1)註冊

int misc_register(struct miscdevice * misc);

misc_register(&leds_dev);

注:此函式中會自動建立裝置節點,即裝置檔案。無需mknod指令建立裝置檔案,因為misc_register()會呼叫device_create()建立裝置節點。

2)釋放

int misc_deregister(struct miscdevice *misc);

misc_deregister(&leds_dev);

4. 其它

1)標頭檔案 #include

2)miscdevice 結構體

struct miscdevice ;

通常 miscdevice的 minor 、name 和 fops是需要實現的。

5. a33下乙個gpio驅動例項

#include #include #include #include #include #include #include static int led_gpios = ;

#define led_num array_size(led_gpios)

int leds_open(struct inode *inode,struct file *filp)

int leds_release(struct inode *inode,struct file *filp)

long leds_ioctl(struct file *filp,unsigned int cmd,unsigned long arg)

gpio_set_value(led_gpios[arg], cmd);

break;

default:

return -einval;

} return 0;

}static struct file_operations leds_ops = ;

static struct miscdevice leds_dev = ;

static int __init leds_init(void)

} ret = misc_register(&leds_dev);

if(ret<0)

return 0;

exit:

misc_deregister(&leds_dev);

return ret;

}static void __exit leds_exit(void)

module_init(leds_init);

module_exit(leds_exit);

module_license("dual bsd/gpl");

字元雜項裝置(miscdevice)

misc雜項裝置是主裝置號為10的驅動裝置 在linux核心原始碼miscdevice.h裡雜項裝置描述結構體定義 struct miscdevice extern int misc register struct miscdevice misc extern int misc deregister...

字元雜項裝置 misc register

include include include include misedevice 結構 struct miscdevice 使用misc register,在載入模組時會自動建立裝置檔案,為主裝置號為10的字元裝置。使用misc deregister,在解除安裝模組時會自動刪除裝置檔案 defi...

字元雜項裝置(miscdevice)

misc雜項裝置是主裝置號為10的驅動裝置 在linux核心原始碼miscdevice.h裡雜項裝置描述結構體定義 struct miscdevice extern int misc register struct miscdevice misc extern int misc deregister...