本節目標:
寫second程式,內容:通過查詢方式驅動按鍵
1.寫出框架
1.1寫file_oprations結構體,second_drv_open函式,second_drv_read函式
1.2寫入口函式,並自動建立裝置節點,修飾入口函式
1.3寫出口函式,並自動登出裝置節點,修飾出口函式
1.4 寫module_license(「gpl v2」)宣告函式許可證
1.5 在入口函式中,利用class_create和class_device_create自動建立裝置節點
在出口函式中,利用class_destroy和class_device_unregister登出裝置節點
2.寫makefile並編譯後,放在板子上insmod後,看看lsmod、cat /porc/devices、 ls -l /dev/second是否載入成功,如下圖:
3.在框架中實現硬體操作
3.1看原理圖,確定用什麼暫存器控制按鍵引腳,如下圖
按鍵0~3分別是gpf0,gpf2,gpg3,gpg11
由於是使用查詢模式,並不是外部中斷模式
所以配置 gpfcon(0x56000050)的位[0:1]、位[4:5]等於0x00(輸入模式)
gpgcon(0x56000060)的位[6:7]、位[22:23]等於0x00
通過gpgdat (0x56000054) 和gpgdat(0x56000064)來查詢按鍵狀態
3.2寫**
init入口函式中使用ioremap()函式對映暫存器虛擬位址
exit出口函式中使用iounmap()函式登出虛擬位址
open函式中配置gpxcon初始化按鍵
read函式中先檢查讀出的字元是否是4個,然後獲取gpxdat狀態,用key_vals[4]陣列儲存4個按鍵值,最後使用 copy_to_user(buf, key_vals,sizeof(key_vals)) 上傳給使用者層
4.寫測試程式secondtext.c
用法就是./ secondtext
使用read(fd,val,sizeof(val));函式讀取核心層的資料
5.然後輸入./ secondtext進行測試,按下key2時,如下圖:
6.使用./ secondtext & 後台執行測試程式
後台會一直執行這個程式,當我們有按鍵按下時,就會列印資料出來,如下圖:
7.通過top命令可以發現這個./ secondtext佔了cpu的99%時間
因為,我們的secondtext測試程式一直在while中通過查詢方式讀取按鍵狀態,這樣的效率是非常低的.
接下來開始使用中斷方式來改進按鍵驅動程式,提高效率,先來分析核心裡中斷如何執行的。
本節secondtext測試程式**如下:
#include //呼叫sys目錄下types.**件#include 獲取檔案屬性#include #include #include /*secondtext while一直獲取按鍵資訊 */int main(int argc,char **ar**){ int fd,ret; unsigned char val[4]; fd=open("/dev/buttons
6410之寫查詢方式的按鍵驅動
查詢的方式獲取按鍵值驅動的步驟大致如下 一 框架 1.file operations的填充 2.入口函式註冊register chrdev 3.修飾入口函式 出口函式 4.自動建立裝置節點 二 硬體操作 一 框架 include include include include include inc...
arm 驅動基礎 查詢方式的按鍵驅動程式
原理圖 驅動程式 include include include include include include include include include include static struct class seconddrv class static struct class devic...
3 按鍵輸入驅動(中斷方式)
1 配置中斷優先順序分組 2 根據硬體初始化gpio為上 下拉輸入 3 外部中斷初始化 4 編寫中斷服務函式 我是分割線 一 中斷優先順序分組一般選擇為2 nvic prioritygroupconfig nvic prioritygroup 2 設定nvic中斷分組2 2位搶占優先順序,2位響應優...