1. 程式人生 > >LINUX篇 基於debian9系統 CH15_gpio_keys裝置樹驅動

LINUX篇 基於debian9系統 CH15_gpio_keys裝置樹驅動

15.1概述

      在上一節課中我們學習了gpio_leds裝置樹驅動,認識了裝置樹的語法規範、修改方法,執行順序,在這節課中我們將進一步學習裝置樹驅動,gpio_keys裝置樹驅動。

15.2 gpio_keys裝置樹驅動

1>首先來檢視驅動原始碼,在/mnt/workspace/osrc-lab/source/drivers/input/keyboard/gpio_keys_polled.c,我們可以看到驅動的原始碼並不大,大家可以自己仔細閱讀,對開發驅動會有很大的好處。

 

2> 在這個驅動原始碼裡我們可以看到裝置樹的驅動就是根據“gpio-keys-polled“進行匹配的,當我們裝置樹裡的compatible對應的名字和驅動原始碼裡的名字匹配時,Bus總線上就會觸發gpio_keys_polled_probe函式,其他部分的內容,我們可以通過百度去查詢理解。

3>接下來我們把CH05_gpio_keys檔案裡的所有裝置樹內容拷貝到如下路徑。

7>通過create_image.sh指令碼產生image檔案。

8>如果我們的開機系統本身就是debian9的,我們可以只替換boot內的內容,替換檔案的路徑如下,如果不是,還需要執行分割槽和燒錄工作。

9> 退出SD卡,插入開發板中,上電啟動,開啟putty軟體,我們使用ssh工具遠端連線開發板,這裡我們提出一個注意事項如果在開發板上sudo  ifconfig命令無效時,我們需要安裝net-tools工具,使用命令apt-get install net-tools。

10>使用scp  -r命令複製我們的本節課的程式。

11>進入/sys/class/input,檢視是否已經添加了event驅動,event是用來判斷是否有按鍵觸發的。

12>進入本節課程式碼,使用vi命令進行檢視,我們可以看到程式裡面開啟了一個執行緒,我們程式通過這個執行緒去判斷哪個按鍵被按下,否則按鍵就要用死迴圈去判斷。

13>使用gcc工具編譯,提示沒有pthread,它是用來建立執行緒的工具,使用pthread_create()建立執行緒時,需要連結該庫。

14>我們進入管理員模式,執行gcc gpio_keys.c –o gpio_keys –pthread。

15>執行gpio_keys,操作開發板,SW1按下,LED左移,SW2按下,按鍵右移則正常。

相關推薦

LINUX 基於debian9系統 CH15_gpio_keys裝置驅動

15.1概述       在上一節課中我們學習了gpio_leds裝置樹驅動,認識了裝置樹的語法

LINUX 基於debian9系統 CH03 恢復出廠系統及燒錄EMMC

3.1概述      在上一節課我們體學習了LINUX下使用VIVADO2017軟體新建帶HDM

Linux系統移植——裝置檔案編譯與反編譯

裝置樹檔案編譯與反編譯 一、裝置樹編譯 有兩種方式 1、將裝置樹檔案拷貝到核心原始碼的arch/*(處理器平臺)/boot/dts/*(廠家)/目錄下,    執行make dtbs 2、dtc -I dts -O dtb  *.dts > my.dtb 二、裝置

Linux:核心之解析DTS裝置檔案並建立裝置的過程

核心之解析DTS裝置樹檔案並建立裝置的過程 在這裡,我分析的是核心原始碼來自谷歌官方Android7.1.2原始碼包經過打補丁包"SC60_Android7.1.2_Quectel_SDK_r270060_20180731.tar.gz"後得到的. 本文分析時使用的

Linux核心移植 part2:uboot裝置--生成過程分析

本文從裝置樹軟體控制相關程式碼進行分析,進而理清裝置樹相關的知識。 先放一個裝置樹在記憶體中的結構圖: 分析來源為$(tree)/lib/fdtdec_test.c 一、資料結構 1.1 檔案頭 每個dtb都包含如下結構的檔案頭,用來表示裝

Linux核心移植 part2:uboot 裝置--基本概念和原始碼介紹

arm uboot的裝置樹原始檔位於arch/arm/dts/目錄下,網路上有很多介紹Linux裝置樹概念的文章,這裡以dts相關的API為切入點,如果都懂了,裝置樹的東西就迎刃而解了。本篇文章首先記錄一些基本知識,下一篇進行原始碼分析。 一、裝置樹檔案基

petalinux 裝置驅動GPIOLED

不知道是不是自己的 petalinux 16.4 版本或者是安裝問題 在petalinux-config -get-hw     工程目錄下面找不到裝置樹增加不了裝置樹節點無限鬱悶 subsystems/linux/configs/device-tree/system-to

【BeagleBone Black Rev. C試用體驗】+裝置驅動

感覺裝置樹寫驅動是未來的潮流。。。下面我們來講講裝置樹驅動開發。。 裝置樹語法我們這就不說了,去下面連結自己參考吧:http://www.cnblogs.com/xiaojiang1025/p/6131381.html一、修改裝置樹: 裝置樹檔案在arch/arm/boot

Device Tree(八)裝置驅動模板

/* * Copyright (c) 2018 LouisGou <[email protected]> * * This program is free software; you can redistribute it and/or modify * it un

裝置 --驅動裝置互動過程

在裝置樹中定義的資訊。flash_SY7803:flashlight { compatible = "qcom,leds-gpio-flash"; //匹配引數 status = "okay";

【嵌入式Linux學習七步曲之第三 Linux系統bootlaoder移植】全面解析PowerPC架構下的扁平裝置FDT

全面解析PowerPC架構下的扁平裝置樹FDT Sailor_forever  sailing_9806#163.com (本原創文章發表於Sailor_forever 的個人blog,未經本人許可,不得用於商業用途。任何個人、媒體、其他網站不得私自抄襲;網路媒體轉載請

linux基礎(二):基於Redhat7系統的特殊許可權與acl許可權列表

新建目錄和檔案的預設許可權 新建目錄和檔案的預設許可權是由系統中umask值來決定的。 新建FILE許可權:666-umask (對位相減)    由數字法賦許可權的過程中,我們能夠發現,凡是奇數許可權,總是包含執行許可權的。而一個檔案如果預設就包含執行許可權其實是非常危險的。因此如果所

linux基礎(七):基於Redhat7系統系統日誌與延時任務

系統日誌 配置檔案: /etc/rsyslog.conf 系統日誌是記錄系統中硬體、軟體和系統問題的資訊,同時還可以監視系統中發生的事件。使用者可以通過它來檢查錯誤發生的原因,或者尋找受到攻擊時攻擊者留下的痕跡。 常用日誌型別與日誌級別 型別 auth

linux基礎(六):基於Redhat7系統的網路設定

常用網路協議 ipv4 IPv4,是網際網路協議(Internet Protocol,IP)的第四版,也是第一個被廣泛使用,構成現今 網際網路技術的基礎的協議。1981年 Jon Postel 在RFC791中定義了IP,Ipv4可以執行在各種 各樣的底層網路上,比如端

linux基礎(四):基於Redhat7系統的sshd服務

SSHD 服務簡介 ssh 協議:安全外殼協議。為 Secureshell 的縮寫。SSH 為建立在應用層和傳輸層基礎上的安全協議。 sshd 服務使用 SSH 協議可以用來進行遠端控制, 或在計算機之間傳送檔案。而實現此功能的傳統方式,如 telnet(終端模擬協議)都是極為不安全的,

linux基礎(八):基於Redhat7系統中的DHCP服務的設定

什麼是DHCP? DHCP,動態主機配置協議,前身是BOOTP協議,是一個區域網的網路協議,使用UDP協議工作,常用的2個埠:67(DHCP server),68(DHCP client)。DHCP通常被用於區域網環境,主要作用是集中的管理、分配IP地址,使client動態的獲得IP地址

linux基礎(十):基於Redhat7系統中的定時任務

定時任務CRONTAB概念/介紹 crontab命令用於設定週期性被執行的指令。該命令從標準輸入裝置讀取指令,並將其存放於“crontab”檔案中,以供之後讀取和執行。 cron 系統排程程序。 可以使用它在每天的非高峰負荷時間段執行作業,或在一週或一月中的不同時段執行。cron是系統主

linux基礎(七):基於Redhat7系統系統日誌與定時任務

系統日誌 配置檔案: /etc/rsyslog.conf 系統日誌是記錄系統中硬體、軟體和系統問題的資訊,同時還可以監視系統中發生的事件。使用者可以通過它來檢查錯誤發生的原因,或者尋找受到攻擊時攻擊者留下的痕跡。 常用日誌型別與日誌級別 型別 auth

linux基礎(十六):基於Redhat7系統中LVM的相關設定

什麼是LVM LVM是邏輯盤卷管理(Logical Volume Manager)的簡稱,它是Linux環境下對磁碟分割槽進行管理的一種機制,LVM是建立在硬碟和分割槽之上的一個邏輯層,來提高磁碟分割槽管理的靈活性。 LVM的工作原理其實很簡單,它就是通過將底層

基於裝置的GPIO驅動(通過系統節點控制)

#include <linux/types.h> #include <linux/pm.h> #include <linux/gpio.h> #include <linux/slab.h> #include <linux/init.h> #inclu