雜項裝置的實現

2021-07-25 01:32:55 字數 795 閱讀 3766

linux核心提供的雜項裝置(miscdevice)具有很強的包容性,在實際開發過程中使用簡單。但是有乙個較大的缺點就是,雜項裝置的次裝置號的分配都是軟體開發者自己隨意分配的,因此移植性較差,有時會造成掛載後無法使用的情況,因此在選擇次裝置號前應當對其核心中雜項裝置號的分配進行查詢後再分配合適的次裝置號。當然linux總會阻止我們做這樣的傻事,我們可將miscdevice裝置結構體的成員minor設為misc_dynamic_minor,以此讓系統自動分配次裝置號。

miscdevice裝置共享主裝置號為10的misc_major,其本質上是乙個字元裝置,其次裝置號minor可在實際編寫的驅動中設定。系統中的所有該類裝置形成乙個鍊錶的形式,當系統訪問該類裝置時,以遍歷該鍊錶的形式,通過次裝置號匹配對應的miscdevice裝置,進而對裝置進行file_operations的介面進行操作。

雜項裝置在實際的工作過程:insmod雜項裝置->裝置初始化->建立misc class->註冊乙個字元裝置(裝置號:10)->呼叫misc_register()註冊乙個雜項裝置->生成裝置節點。

主要結構體:

struct miscdevice;

struct file_operations scull_fops = ;

miscdevice裝置的註冊和登出

註冊:int misc_register(struct miscdevice *misc)

登出:int misc_deregister(struct miscdevice *misc)

雜項裝置實現原理

雜項裝置的原理就是註冊乙個主裝置號,將各種雜類裝置都歸屬於該主裝置號之下。雜項裝置本質上就是字元裝置。static int init misc init void subsys initcall misc init 作為子系統新增到核心 註冊字元裝置的具體實現如下 int register chrd...

雜項裝置(misc device)

雜項裝置也是在嵌入式系統中用得比較多的一種裝置驅動。在 linux 核心的include linux目錄下有miscdevice.h檔案,要把自己定義的misc device從裝置定義在這裡。其實是因為這些字元裝置不符合預先確定的字元裝置範疇,所有這些裝置採用主編號10 一起歸於misc devic...

雜項裝置示例

原理 雜項裝置的misc init函式中,建立了乙個misc class,同時註冊了乙個字元裝置驅動,該字元裝置的主裝置號為10,在呼叫misc register函式去註冊乙個雜項裝置時,最終會建立乙個裝置節點,如果雜項裝置的minor為misc dynamic minor,表示由系統分配乙個次裝置...