新聞中心
GPIO是General Purpose Input/Output的簡(jiǎn)稱,也就是通用輸入輸出。GPIO可以連接各種設(shè)備,包括外設(shè)、傳感器等,對(duì)于嵌入式設(shè)備的開(kāi)發(fā)來(lái)說(shuō),GPIO非常重要。

成都創(chuàng)新互聯(lián)公司服務(wù)項(xiàng)目包括舒蘭網(wǎng)站建設(shè)、舒蘭網(wǎng)站制作、舒蘭網(wǎng)頁(yè)制作以及舒蘭網(wǎng)絡(luò)營(yíng)銷(xiāo)策劃等。多年來(lái),我們專注于互聯(lián)網(wǎng)行業(yè),利用自身積累的技術(shù)優(yōu)勢(shì)、行業(yè)經(jīng)驗(yàn)、深度合作伙伴關(guān)系等,向廣大中小型企業(yè)、政府機(jī)構(gòu)等提供互聯(lián)網(wǎng)行業(yè)的解決方案,舒蘭網(wǎng)站推廣取得了明顯的社會(huì)效益與經(jīng)濟(jì)效益。目前,我們服務(wù)的客戶以成都為中心已經(jīng)輻射到舒蘭省份的部分城市,未來(lái)相信會(huì)繼續(xù)擴(kuò)大服務(wù)區(qū)域并繼續(xù)獲得客戶的支持與信任!
Linux作為開(kāi)源操作系統(tǒng),在嵌入式設(shè)備的領(lǐng)域占有很大的市場(chǎng)份額。而在Linux中,GPIO的驅(qū)動(dòng)程序也是非常重要的一部分。本文將深入解析Linux中GPIO驅(qū)動(dòng)程序的原理和實(shí)現(xiàn)方法。
GPIO驅(qū)動(dòng)程序的實(shí)現(xiàn)方法
Linux中GPIO的實(shí)現(xiàn)方法可以概括為四種類(lèi)型,分別是GPIO模擬、GPIO中斷、GPIO字符設(shè)備和GPIO設(shè)備樹(shù)。下面我們對(duì)這四種類(lèi)型的實(shí)現(xiàn)方法進(jìn)行逐一介紹。
1. GPIO模擬:
GPIO模擬一般是在沒(méi)有實(shí)際硬件設(shè)備的情況下,利用軟件實(shí)現(xiàn)GPIO的實(shí)現(xiàn)方法。在Linux中,GPIO模擬可以通過(guò)內(nèi)核嵌入GPIO subsytem的方式來(lái)實(shí)現(xiàn),這樣就可以通過(guò)編寫(xiě)用戶程序來(lái)實(shí)現(xiàn)GPIO的操作。其中,用戶程序可以使用GPIO庫(kù)函數(shù)、命令行接口或者python腳本來(lái)進(jìn)行GPIO的控制。
2. GPIO中斷:
GPIO中斷是實(shí)際生產(chǎn)應(yīng)用中最常用的方法。在Linux中,GPIO中斷可以通過(guò)內(nèi)核提供的GPIO驅(qū)動(dòng)程序(gpio-irq)來(lái)實(shí)現(xiàn)。當(dāng)GPIO輸入口發(fā)生變化時(shí),可以通過(guò)中斷方式進(jìn)行通知,從而實(shí)現(xiàn)GPIO的處理過(guò)程。
3. GPIO字符設(shè)備:
GPIO字符設(shè)備是實(shí)現(xiàn)GPIO程序的基礎(chǔ),它是實(shí)現(xiàn)GPIO驅(qū)動(dòng)程序的底層基礎(chǔ)。在Linux中,GPIO字符設(shè)備可以通過(guò)創(chuàng)建gpio-chip結(jié)構(gòu)體和gpio_desc結(jié)構(gòu)體來(lái)實(shí)現(xiàn),從而完成設(shè)備的注冊(cè)和初始化。
4. GPIO設(shè)備樹(shù):
GPIO設(shè)備樹(shù)是在Linux 2.6.x版本中引入的一種新機(jī)制,用于簡(jiǎn)化GPIO驅(qū)動(dòng)程序的編寫(xiě)過(guò)程。通過(guò)設(shè)備樹(shù)描述符來(lái)注冊(cè)設(shè)備,可以實(shí)現(xiàn)GPIO的快速配置和管理。
需要注意的是,在實(shí)際開(kāi)發(fā)中,不同的硬件平臺(tái)和SoC芯片有著不同的GPIO實(shí)現(xiàn)方式,因此需要針對(duì)所用平臺(tái)進(jìn)行GPIO驅(qū)動(dòng)程序的實(shí)現(xiàn)。
GPIO驅(qū)動(dòng)程序的工作原理
GPIO驅(qū)動(dòng)程序的工作原理主要由GPIO驅(qū)動(dòng)程序和GPIO子系統(tǒng)兩部分組成。其中,GPIO驅(qū)動(dòng)程序是位于驅(qū)動(dòng)層的,它是負(fù)責(zé)硬件的處理和控制,是驅(qū)動(dòng)程序的核心部分。而GPIO子系統(tǒng)則是負(fù)責(zé)將GPIO驅(qū)動(dòng)程序掛載到內(nèi)核中,與其他內(nèi)核子系統(tǒng)進(jìn)行交互從而實(shí)現(xiàn)GPIO的控制。下面我們將對(duì)GPIO驅(qū)動(dòng)程序和GPIO子系統(tǒng)的工作原理進(jìn)行介紹。
GPIO驅(qū)動(dòng)程序工作原理:
GPIO驅(qū)動(dòng)程序的工作原理可以概括為以下幾個(gè)步驟:
(1)設(shè)備初始化
GPIO驅(qū)動(dòng)程序在設(shè)備初始化階段需要完成的任務(wù)主要包括開(kāi)啟GPIO時(shí)鐘、初始化GPIO端口、初始化GPIO的功能等。
(2)GPIO讀寫(xiě)操作
GPIO的讀寫(xiě)操作主要分為兩種情況,一種是GPIO輸出操作,另外一種是GPIO輸入操作。在GPIO輸出操作中,驅(qū)動(dòng)程序?qū)⑻幚砥鞯妮敵鲂盘?hào)寫(xiě)入GPIO輸出寄存器,從而控制GPIO輸出端口;在GPIO輸入操作中,驅(qū)動(dòng)程序需要讀取GPIO輸入寄存器中的狀態(tài)信息,進(jìn)而得知輸入端口的狀態(tài)。
(3)GPIO中斷處理
在GPIO中斷操作中,驅(qū)動(dòng)程序需要進(jìn)行中斷的注冊(cè)、開(kāi)啟和處理等工作。當(dāng)GPIO的輸入狀態(tài)發(fā)生變化時(shí),中斷信號(hào)會(huì)向CPU發(fā)送中斷請(qǐng)求,由驅(qū)動(dòng)程序進(jìn)行處理。
GPIO子系統(tǒng)工作原理:
GPIO子系統(tǒng)是位于內(nèi)核層的,它的主要作用是將GPIO驅(qū)動(dòng)程序同其他內(nèi)核子系統(tǒng)進(jìn)行交互。當(dāng)用戶程序?qū)PIO進(jìn)行操作時(shí),GPIO子系統(tǒng)將用戶的操作傳遞給驅(qū)動(dòng)程序,驅(qū)動(dòng)程序進(jìn)行處理后,再將處理結(jié)果返回給用戶程序。具體的過(guò)程如下:
(1)設(shè)備樹(shù)處理
當(dāng)系統(tǒng)啟動(dòng)后,GPIO子系統(tǒng)首先進(jìn)行設(shè)備樹(shù)處理,然后根據(jù)設(shè)備樹(shù)描述符來(lái)注冊(cè)GPIO設(shè)備。通過(guò)設(shè)備樹(shù)描述符,GPIO子系統(tǒng)可以快速識(shí)別設(shè)備,從而進(jìn)行快速配置和管理。
(2)設(shè)備注冊(cè)
GPIO子系統(tǒng)通過(guò)調(diào)用GPIO驅(qū)動(dòng)程序的API函數(shù)來(lái)注冊(cè)GPIO設(shè)備。在注冊(cè)時(shí),需要指定GPIO設(shè)備名稱和GPIO設(shè)備控制范圍等信息。
(3)用戶操作處理
當(dāng)用戶程序?qū)PIO進(jìn)行操作時(shí),GPIO子系統(tǒng)將用戶程序的請(qǐng)求轉(zhuǎn)發(fā)給GPIO驅(qū)動(dòng)程序。驅(qū)動(dòng)程序進(jìn)行GPIO的處理,然后將結(jié)果返回給GPIO子系統(tǒng)。
(4)資源管理
在使用完GPIO設(shè)備后,需要對(duì)相關(guān)的資源進(jìn)行管理,包括GPIO設(shè)備的關(guān)閉和資源的釋放等。
本文對(duì)Linux中GPIO驅(qū)動(dòng)程序的實(shí)現(xiàn)方法和工作原理進(jìn)行了深入解析。在實(shí)際開(kāi)發(fā)中,需要根據(jù)所用硬件平臺(tái)和SoC芯片進(jìn)行相應(yīng)的GPIO驅(qū)動(dòng)程序的實(shí)現(xiàn)。同時(shí),在使用GPIO設(shè)備時(shí),需要注意資源的管理和使用,從而保證設(shè)備的正常運(yùn)行。
相關(guān)問(wèn)題拓展閱讀:
- 如何在Linux系統(tǒng)中直接操作GPIO
如何在Linux系統(tǒng)中直接操作GPIO
方法/步驟
安裝SD Linux系統(tǒng)
如圖所示,先后將Arduino Software 1.5.3 (Arduino IDE)和SD-Card Linux Image下載到本機(jī),Arduino IDE在后面查找GPIO與Arduino IO 之間的映射關(guān)系時(shí)需要用到。
如圖所示,將SDCard1.0.4.tar.bz2解壓后出現(xiàn)一個(gè)“image-full-galileo”的文件夾。
在MicroSD使用前需先將其以Fat32進(jìn)行格式化,然后將“image-full-galileo”文件夾下地所有文件直接拷貝到microSD卡的根目錄下。
進(jìn)入Galileo
將MicroSD插到Galileo中,在路由器頁(yè)面的已連接設(shè)備列表中會(huì)看到設(shè)備名稱為“clanton”有線連接設(shè)備,找到其IP地址,然后中
Terminal(Unix和Linux,Windows可用Putty)中通過(guò)ssh進(jìn)入Galileo,“ssh
”。
有意思的是,這個(gè)在MicroSD中運(yùn)行的Linux系統(tǒng)開(kāi)啟了ssh服務(wù),并且root賬號(hào)沒(méi)有設(shè)置密碼,可以直接進(jìn)入。如上圖所示,彈出一對(duì)話框后輸入 “yes”回車(chē)即可進(jìn)入Galileo,出現(xiàn)下圖中的 “root@clanton”說(shuō)明這一步成功完成了
到這里,可能會(huì)有疑問(wèn)了,Galileo板載也是有一個(gè)操作系統(tǒng)的,microSD卡中也有一個(gè)Linux,如何保證現(xiàn)在進(jìn)入的就是microSD卡中的系
統(tǒng)呢?在Terminal中輸入“cat/proc/version”即可查看Linux系統(tǒng)版本,顯示為“3.8.7-yocto-standard”,這就是前面下載的為Galileo定制的Linux操作系統(tǒng),Yocto。
找到那個(gè)屬于你的GPIO
下面就要開(kāi)始這篇文章中的核心部分,也是最難的一部。找Linux GPIO 與 Arduino IO之間的映射關(guān)系!
如右圖所示,在“/sys/class/gpio/”中有多大60多個(gè)GPIO,如何找出右側(cè)GPIO與左側(cè)Arduino IDE中對(duì)應(yīng)的IO呢。
首先將0-13IO口全部設(shè)為“INPUT”輸入模式
voidsetup(){//putyoursetupcodehere,torunonce:
pinMode(0,INPUT); pinMode(1,INPUT); pinMode(2,INPUT); pinMode(3,INPUT);
pinMode(4,INPUT); pinMode(5,INPUT); pinMode(6,INPUT); pinMode(7,INPUT);
pinMode(8,INPUT); pinMode(9,INPUT); pinMode(10,INPUT);
pinMode(11,INPUT); pinMode(12,INPUT); pinMode(13,INPUT); } voidloop(){
//putyourmaincodehere,torunrepeatedly: }
如圖所示,左側(cè)”pinMode(13,OUTPUT)”將13引腳變?yōu)檩敵瞿J?,右?cè)gpio7變成out模式,因此gpio7對(duì)應(yīng)的就是Arduino IO 13(pin13)
按照這種方法依次找出Arduino IO與GPIO之間如下的對(duì)應(yīng)關(guān)系
GPIODigitalI/Ogpio11pin0
gpio12pin1 gpio13pin2 gpio14pin3 gpio6pin4 gpio0pin5 gpio1pin6
gpio38pin7 gpio40pin8 gpio4pin9 gpio10pin10 gpio5pin11 gpio15pin12
gpio7pin13
下面就需要來(lái)對(duì)上面找到的gpio對(duì)應(yīng)關(guān)系進(jìn)行驗(yàn)證了?!癳cho “out”
>/sys/class/gpio/gpio*/direction”為將gpio變?yōu)檩敵瞿J剑癳cho “1”
>/sys/class/gpio/gpio*/value”為將gpio輸出高電平。然后就有了下面這段python程序,這段程序依次將
pin13,pin12,pin11,pin10四個(gè)引腳的LED點(diǎn)亮然后關(guān)閉,但由于python程序的執(zhí)行效率問(wèn)題,應(yīng)該所有LED同時(shí)點(diǎn)亮有了延時(shí)
成為流水燈,如下圖所示效果。這段程序在Linux系統(tǒng)的任意文件夾內(nèi)均可。
importos,timewhileTrue:os.system(‘echo”out”>/sys/class/gpio/gpio7/direction’)
os.system(‘echo”1″>/sys/class/gpio/gpio7/value’)
os.system(‘echo”out”>/sys/class/gpio/gpio15/direction’)
os.system(‘echo”1″>/sys/class/gpio/gpio15/value’)
os.system(‘echo”out”>/sys/class/gpio/gpio5/direction’)
os.system(‘echo”1″>/sys/class/gpio/gpio5/value’)
os.system(‘echo”out”>/sys/class/gpio/gpio10/direction’)
os.system(‘echo”1″>/sys/class/gpio/gpio10/value’) time.sleep(0.2)
os.system(‘echo”0″>/sys/class/gpio/gpio5/value’)
os.system(‘echo”0″>/sys/class/gpio/gpio15/value’)
os.system(‘echo”0″>/sys/class/gpio/gpio7/value’)
os.system(‘echo”0″>/sys/class/gpio/gpio10/value’) time.sleep(0.2)
linux gpio driver的介紹就聊到這里吧,感謝你花時(shí)間閱讀本站內(nèi)容,更多關(guān)于linux gpio driver,深入解析Linux GPIO驅(qū)動(dòng)程序,如何在Linux系統(tǒng)中直接操作GPIO的信息別忘了在本站進(jìn)行查找喔。
香港服務(wù)器選創(chuàng)新互聯(lián),2H2G首月10元開(kāi)通。
創(chuàng)新互聯(lián)(www.cdcxhl.com)互聯(lián)網(wǎng)服務(wù)提供商,擁有超過(guò)10年的服務(wù)器租用、服務(wù)器托管、云服務(wù)器、虛擬主機(jī)、網(wǎng)站系統(tǒng)開(kāi)發(fā)經(jīng)驗(yàn)。專業(yè)提供云主機(jī)、虛擬主機(jī)、域名注冊(cè)、VPS主機(jī)、云服務(wù)器、香港云服務(wù)器、免備案服務(wù)器等。
標(biāo)題名稱:深入解析LinuxGPIO驅(qū)動(dòng)程序(linuxgpiodriver)
分享路徑:http://m.5511xx.com/article/cddepgg.html


咨詢
建站咨詢
