Linux 驅動學習筆記 字元裝置驅動模板 一

2021-10-04 15:25:26 字數 3826 閱讀 8477

/* 驅動入口函式 */

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函式 核心的第二層 虛擬檔案...