首先是標頭檔案定義
#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,表示註冊成功 負數,註冊失敗。說明 註冊成...