/* 驅動入口函式 */
static
int __init ***_init
(void
)/* 驅動出口函式 */
static
void __exit ***_exit
(void
)/* 將上面兩個函式指定為驅動的入口和出口函式 */
module_init
(***_init)
;module_exit
(***_exit)
;module_license
("gpl");
/* 新增協議 */
module_author
("tyustli");
/* 新增作者 */
insmod test.ko 不能解決依賴關係
modprobe test.ko 會分析依賴關係,並將所有的依賴模組都載入到核心中 常用
rmmod test.ko 常用
modprobe -r test.ko 可以解除安裝掉模組所依賴的其它模組。
static
inline
intregister_chrdev
(unsigned
int major,
const
char
*name,
const
struct file_operations *fops)
static
inline
void
unregister_chrdev
(unsigned
int major,
const
char
*name)
register_chrdev
函式用於註冊字元裝置,此函式一共有三個引數,這三個引數的含義如下:
引數含義
major
主裝置號
name
裝置名稱
fops
裝置操作方法結構體指標
unregister_chrdev
函式使用者登出字元裝置,此函式有兩個引數,這兩個引數含義如下:
引數含義
major
主裝置號
name
裝置名稱
一般字元裝置的註冊在驅動模組的入口函式***_init
中進行,字元裝置的登出在驅動模組的出口函式***_exit
中進行。
#include
#include
#include
#include
#include
#include
#define chrdevbase_major 200
/* 主裝置號 */
#define chrdevbase_name "chrdevbase"
/* 裝置名 */
static
char readbuf[
100]
;/* 讀緩衝區 */
static
char writebuf[
100]
;/* 寫緩衝區 */
static
char kerneldata=
;/** @description : 開啟裝置
* @param - inode : 傳遞給驅動的inode
* @param - filp : 裝置檔案,file結構體有個叫做private_data的成員變數,一般在open的時候將private_data指向裝置結構體。
* @return : 0 成功;其他 失敗
*/static
intchrdevbase_open
(struct inode *inode,
struct file *filp)
/* * @description : 從裝置讀取資料
* @param - filp : 要開啟的裝置檔案(檔案描述符)
* @param - buf : 返回給使用者空間的資料緩衝區
* @param - cnt : 要讀取的資料長度
* @param - offt : 相對於檔案首位址的偏移
* @return : 讀取的位元組數,如果為負值,表示讀取失敗
*/static ssize_t chrdevbase_read
(struct file *filp,
char __user *buf, size_t cnt, loff_t *offt)
else
//printk("chrdevbase read!\r\n");
return0;
}/** @description : 向裝置寫資料
* @param - filp : 裝置檔案,表示開啟的檔案描述符
* @param - buf : 要寫給裝置寫入的資料
* @param - cnt : 要寫入的資料長度
* @param - offt : 相對於檔案首位址的偏移
* @return : 寫入的位元組數,如果為負值,表示寫入失敗
*/static ssize_t chrdevbase_write
(struct file *filp,
const
char __user *buf, size_t cnt, loff_t *offt)
else
//printk("chrdevbase write!\r\n");
return0;
}/** @description : 關閉/釋放裝置
* @param - filp : 要關閉的裝置檔案(檔案描述符)
* @return : 0 成功;其他 失敗
*/static
intchrdevbase_release
(struct inode *inode,
struct file *filp)
/* * 裝置操作函式結構體
*/static
struct file_operations chrdevbase_fops =;/*
* @description : 驅動入口函式
* @param : 無
* @return : 0 成功;其他 失敗
*/static
int __init chrdevbase_init
(void
)printk
("chrdevbase init!\r\n");
return0;
}/** @description : 驅動出口函式
* @param : 無
* @return : 無
*/static
void __exit chrdevbase_exit
(void
)/*
* 將上面兩個函式指定為驅動的入口和出口函式
*/module_init
(chrdevbase_init)
;module_exit
(chrdevbase_exit)
;/*
* license和作者資訊
*/module_license
("gpl");
module_author
("tyustli"
);
以上就是字元裝置驅動開發的通用模板,後續字元裝置驅動的開發均基於此模板。 Linux裝置驅動筆記 字元裝置驅動程式
關鍵字 編寫linux字元裝置驅動程式 linux提供了幾種註冊字元裝置的方式。如下 include include include include define dev major 100 define dev name test static intmyopen struct inode ino...
驅動 linux裝置驅動 字元裝置驅動開發
preface 前面對linux裝置驅動的相應知識點進行了總結,現在進入實踐階段!linux 裝置驅動入門篇 linux 裝置驅動掃盲篇 fedora下的字元裝置驅動開發 開發乙個基本的字元裝置驅動 在linux核心驅動中,字元裝置是最基本的裝置驅動。字元裝置包括了裝置最基本的操作,如開啟裝置 關閉...
Linux學習 LED字元裝置驅動
應用層去呼叫一些介面函式時,會進入核心,驅動也是核心的一部分。以c庫函式中的open函式為例,open函式的實現繪製行一條swi val指令,執行之後會引發異常 核心的第一層 核心的系統呼叫介面。系統呼叫介面會根據發生異常的原因呼叫不同的異常處理函式,比如sys open函式 核心的第二層 虛擬檔案...