arm linux驅動開發之字元裝置驅動開發

2021-10-24 04:55:51 字數 2455 閱讀 2891

1、先要了解裝置函資料結構

2、然後將驅動註冊到核心中

#define chrdevbase_major    200                /* 主裝置號 */

#define chrdevbase_name        "chrdevbase"     /* 裝置名     */

static char readbuf[100];        /* 讀緩衝區 */

static char writebuf[100];        /* 寫緩衝區 */

static char kerneldata = ;

/** 裝置操作函式結構體

*/static struct file_operations chrdevbase_fops= ;

/** @description        : 開啟裝置

* @param - inode     : 傳遞給驅動的inode

* @param - filp     : 裝置檔案,file結構體有個叫做private_data的成員變數

*                       一般在open的時候將private_data指向裝置結構體。

* @return             : 0 成功;其他 失敗

*/static int chrdevbase_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");

return 0;}/*

* @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");

return 0;}/*

* @description        : 關閉/釋放裝置

* @param - filp     : 要關閉的裝置檔案(檔案描述符)

* @return             : 0 成功;其他 失敗

*/static int chrdevbase_release(struct inode *inode, struct file *filp)

/** @description    : 驅動入口函式 

* @param         : 無

* @return         : 0 成功;其他 失敗

*/static int __initchrdevbase_init(void)

printk("chrdevbase init!\r\n");

return 0;}/*

* @description    : 驅動出口函式

* @param         : 無

* @return         : 無

*/static void __exitchrdevbase_exit(void)

/* * 將上面兩個函式指定為驅動的入口和出口函式 

*/module_init(chrdevbase_init);

module_exit(chrdevbase_exit);

/* * license和作者資訊

*/module_license("gpl");

module_author("lhf");

ARM Linux驅動開發環境

目的 梳理arm linux驅動開發所需的環境和流程,記錄遇到的問題。環境介紹 pc機 編寫驅動程式和測試 伺服器 編譯驅動程式生成.ko檔案,編譯測試 生成執行程式 單板 jz2440 準備工作 linux核心 linux 2.6.22.6以及對應的補丁檔案 工具鏈 gcc version 3.4...

arm linux驅動開發學習2

驅動測試階段 wifi模組始終無法載入成功,usb wifi插上之後,始終無法顯示wifi網路資訊 lib modules 4.1.15 ifconfig a eth0 link encap ethernet hwaddr00 04 9f 04 d2 35 inet addr 192.168 1.5...

arm linux驅動開發學習5

串列埠通訊 只要是使用串列埠通訊,不論是ttl還是232 485,其驅動程式都是一樣的,通過外接rs485晶元即可將串列埠轉換為rs485訊號。本節用的是串列埠3,串列埠驅動框架為 1 uart driver 註冊與登出 每個串列埠驅動都需要定義乙個 uart driver,載入驅動的時候通過 ua...