Linux雜項裝置驅動框架

2021-07-29 09:09:12 字數 1625 閱讀 7483

首先是標頭檔案定義

#include 

#include

#include

#include ..

.

以下是一些file_operations中提供的一些函式,這些函式用於給應用層提供介面,以此來調動裝置。

static

int filename_open(struct inode *my_indoe, struct file *my_file)

static

int filename_release(struct inode *my_indoe, struct file *my_file)

static ssize_t filename_read(struct file *my_file, char __user *buff, size_t cnt, loff_t *loff)

static ssize_t filename_write(struct file *my_file, const

char __user *buff, size_t cnt, loff_t *loff)..

.

檔案結構體集合file_operations定義

static struct file_operations filename_fops=

;

雜項裝置結構體註冊

static

struct miscdevice misc=;

使用insmod掛載模組時,會呼叫filename_init這個函式,一般是用來提供一些提示資訊來表示模組已經成功掛在到了核心;//__init標號: 對應一段**(彙編)–一般設定屬性(指定文字段存放的位置)。 執行filename_init函式之前先執行__init

static

int __init filename_init(void)

使用rmmod解除安裝模組時,則會呼叫filename_exit這個函式,作用來做一些清理工作和列印提示資訊

static void __exit filename_exit(void)

驅動模組的掛載和解除安裝,

module_init(filename_init); //驅動入口。安裝驅動的時候呼叫

module_exit(filename_exit); //驅動出口。解除安裝驅動的時候呼叫

最後,需要新增一些說明,其中module_license(「gpl」)一定要寫上,不然核心會認為這個驅動檔案沒有遵守它的協議(開源協議),會出現編譯錯誤。

module_author("作者");        //宣告驅動的作者

module_description("模組描述"); //描述當前驅動功能

module_license("gpl"); //驅動許可證。支援的協議gpl。

misc雜項裝置驅動

linux裡面的misc雜項裝置是主裝置號為10的驅動裝置,它的註冊跟使用比較的簡單,所以比較適用於功能簡單的裝置。它有自己的裝置結構體 struct miscdevice 它在標頭檔案linux miscdevice.h裡面有定義,其中minor是misc裝置的副裝置號,misc裝置主要依賴min...

Linux 裝置驅動框架

1 驅動框架 linux將所有外部裝置看成是一類特殊檔案,稱之為 裝置檔案 如果說系統呼叫是linux核心和應用程式之間的介面,那麼裝置驅動程式則可以看成是linux核心與外部裝置之間的介面。裝置驅動程式向應用程式遮蔽了硬體在實現上的細節,使得應用程式可以像操作普通檔案一樣來操作外部裝置。在應用程式...

如何編寫雜項裝置驅動

1.1 註冊雜項裝置 int misc register struct miscdevice misc 標頭檔案 include 功能 註冊乙個雜項裝置 引數 misc 雜項裝置的核心結構指標,至少已經實現minor,name,fops三個成員。返回值 0,表示註冊成功 負數,註冊失敗。說明 註冊成...