linux 字元裝置驅動是3種型別中最簡單的一種,其實就是實現 file_operations 中的函式,基本實現框架如下:
1, 需要包含的標頭檔案:
#include
#include
#include
#include
#include
2. 定義及實現 file_operations 中的函式,file_operations結構:
struct file_operations chr_ops =
;static struct cdev chr_dev;
static dev_t ndev;
static int chr_open(struct inode *nd, struct file *fp)
static ssize_t chr_read(struct file *fp, char __user *u, size_t sz, loff_t *off)
static ssize_t chr_write(struct file *fp, char __user *u, size_t sz, loff_t *off)
3. 實現init 函式,並呼叫 module_init 來初始化該函式
static int demo_init()
這個函式分3步,
(1). 呼叫 cdev_init 初始化字元裝置,使cdev物件與相應的 file_operations 相關聯。
(2). 呼叫alloc_chrdev_region 分配裝置號。
(3). 呼叫cdev_add 把字元裝置加入系統。
module_init(demo_init);
4. 實現 exit 函式並呼叫 module_exit 解除安裝該裝置
static void demo_exit()
完成2個功能。
(1). 呼叫cdev_del 從系統中刪除該裝置。
(2). 呼叫unregister_chrdev_region 釋放裝置號。
module_exit(demo_exit);
5. 最後把許可協議,作者,裝置相關資訊寫上去。
module_license("gpl");
module_author("[email protected]");
module_description("a char device demo driver");
Linux字元裝置驅動框架總結
對於linux而言,一切皆檔案,在linux系統下,所有檔案都可以像文字檔案一樣open read write,那麼對於linux裝置驅動而言,比如現在有乙個點燈的驅動程式,它的裝置節點是 dev 當應用程式執行open read write的時候,是如何呼叫到驅動程式裡的open read wri...
linux字元裝置驅動基礎框架
include include include include include include include define count 1 define name chr key0 define atomic value 0 定義巨集是否使用原子變數來限定在乙個時刻只能有乙個應用程式訪問驅動 st...
linux 字元裝置 驅動框架 二
前面編寫了乙個簡單的 linux字元裝置驅動 linux driver 1 接下來簡單地來看一下字元裝置驅動的框架。在linux 字元裝置裡,有三個比較重要的資料結構,分別是 struct file operations,struct file和struct inode 下面來簡單的說明一下 這個結...