原理:雜項裝置的misc_init函式中,建立了乙個misc class,同時註冊了乙個字元裝置驅動,該字元裝置的主裝置號為10,在呼叫misc_register函式去註冊乙個雜項裝置時,最終會建立乙個裝置節點,如果雜項裝置的minor為misc_dynamic_minor,表示由系統分配乙個次裝置號。所以雜項裝置最終還是主裝置號為10的乙個字元裝置驅動。
好了,我們看看示例**:
雜項裝置驅動程式:misc_dev.c
#include #include #include #include #define device_name "my_misc_dev"
static int misc_open(struct inode *nd, struct file *filp)
static ssize_t misc_read(struct file *f, char __user *u, size_t sz, loff_t *off)
struct file_operations misc_ops =
;struct miscdevice misc =
;static int demo_init(void)
static void demo_exit(void)
module_init(demo_init);
module_exit(demo_exit);
module_license("gpl");
module_author("huoxin");
module_description("an misc device driver as an example");
#include #include #include #define misc_dev_name "/dev/my_misc_dev"
int main(void)
read(fd, buf, 32);
close(fd);
return 0;
}
編譯misc_dev.c後,insmod對應的驅動模組,發現在/dev目錄下自動建立了my_misc_dev的裝置檔案節點。
執行使用者態程式對應的bin程式,dmesg得到如下列印:
aug 22 08:00:27 xhz-rev-1-0 kernel: [ 2286.814994] misc_open,major=10,minor=55
aug 22 08:00:27 xhz-rev-1-0 kernel: [ 2286.815002] in the misc_read() function!
雜項裝置(misc device)
雜項裝置也是在嵌入式系統中用得比較多的一種裝置驅動。在 linux 核心的include linux目錄下有miscdevice.h檔案,要把自己定義的misc device從裝置定義在這裡。其實是因為這些字元裝置不符合預先確定的字元裝置範疇,所有這些裝置採用主編號10 一起歸於misc devic...
misc雜項裝置驅動
linux裡面的misc雜項裝置是主裝置號為10的驅動裝置,它的註冊跟使用比較的簡單,所以比較適用於功能簡單的裝置。它有自己的裝置結構體 struct miscdevice 它在標頭檔案linux miscdevice.h裡面有定義,其中minor是misc裝置的副裝置號,misc裝置主要依賴min...
雜項裝置實現原理
雜項裝置的原理就是註冊乙個主裝置號,將各種雜類裝置都歸屬於該主裝置號之下。雜項裝置本質上就是字元裝置。static int init misc init void subsys initcall misc init 作為子系統新增到核心 註冊字元裝置的具體實現如下 int register chrd...