[Help] 無 /sys/class/gpio 目錄? [論壇 - 新手村]
正在瀏覽:
1 名遊客
回覆: [Help] 無 /sys/class/gpio 目錄? |
|||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
會員三級
![]() ![]() 註冊日期:
2016/4/18 12:29 所屬群組:
已註冊使用者 等級: 9
HP : 0 / 221
![]() |
http://shyuanliang.blogspot.tw/2012/08/linux-gpio-driver-guide.html Sysfs entries configuration有介紹 有人知道打開後的步驟嗎? linux底層的部份怎麼跟實體IO溝通 謝謝
2017/3/10 17:15
|
||||||||||
![]() |
回覆: [Help] 無 /sys/class/gpio 目錄? |
|||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
會員二級
![]() ![]() 註冊日期:
2013/11/7 9:24 所屬群組:
已註冊使用者 等級: 8
HP : 0 / 187
![]() |
ubuntu_net2016 寫到:http://shyuanliang.blogspot.tw/2012/08/linux-gpio-driver-guide.html 由 http://shyuanliang.blogspot.tw/2012/08/linux-gpio-driver-guide.html 可以看到我之前提過的,你必需針對硬體的腳位是處理driver的初始化設計,一般至少必需包含pin assign/input or output/normal high or normal low等等,上面那篇中有大約提到重點。而這些完成了,只是driver層(也就是你說的linux底層,是屬於kernel space)的工作,至於User Space的控制,則是標題的/sys/class/gpio界面,它就只是一個比較單純的控制界面,可以read/write等等。 所以問題回到最初,你有pin腳的定義嗎?如果沒有,那後續的工作就沒有可能了...
2017/3/10 17:54
|
||||||||||
![]() |
回覆: [Help] 無 /sys/class/gpio 目錄? |
|||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
會員三級
![]() ![]() 註冊日期:
2016/4/18 12:29 所屬群組:
已註冊使用者 等級: 9
HP : 0 / 221
![]() |
這部份可以取得,目前gpio剛好有兩種模式一個是直接從CPU GPIO出來,一個走i2c User Space跟一些GPIO、MCU大約略懂,但linux跟GPIO、MCU就連結不上了Orz 簡單的說一個問題,透過menuconfig打開/.../gpio後,user space就可以讓程式R/W, 而其中程式碼寫在kernel裡,所以應該有一個動作將menuconfig跟程式碼(.o)做連結(僅為猜測,有錯還請指正) 但中間完全不懂,如有方向或資料還請各位先進幫忙 先謝謝各位
2017/3/13 15:20
|
||||||||||
![]() |
回覆: [Help] 無 /sys/class/gpio 目錄? |
|||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
會員二級
![]() ![]() 註冊日期:
2013/11/7 9:24 所屬群組:
已註冊使用者 等級: 8
HP : 0 / 187
![]() |
ubuntu_net2016 寫到: 你可能需要兩個方向的資訊來滿足你的需求: 1/如何編譯kernel -> 透過這個步驟的了解,你可以選擇把driver編在kernel image中,或者是把它獨立編譯成.ko檔,再以insmod的方式手動或自動載入。過程中,你會看到 make menuconfig的運作原理,就會知道這個動作如何把你的原始碼加到編譯的參數中,有了以上的動作,就可以產出你要的kernel image或者是XXXX.ko了。 2/如何修改driver -> 這裡不說撰寫而說修改,是因為原始的kenel中已有GPOI的程式碼,如果在步驟1中你已經可以明確的掌握檔案的路徑和生成的方式,就一定可以取得正確的現有原始碼來進行複製及修改,至於driver的寫法,有它標準的框架,可參考坊間的書藉,會比在網上看一堆零散的資料來得更有系統。 畢竟GPIO的功能可以很單純,也可以很複雜,要看你的實際應用案例,才能決定它的難度。建議你先有一些根基再來發問,否則這些東西不是可以靠簡單的討論就能馬上學會。 BR, Mark Chang
2017/3/13 16:05
|
||||||||||
![]() |
回覆: [Help] 無 /sys/class/gpio 目錄? |
|||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
會員三級
![]() ![]() 註冊日期:
2016/4/18 12:29 所屬群組:
已註冊使用者 等級: 9
HP : 0 / 221
![]() |
Mark Chang 真的很感謝您的指導,因為目前連個方向都沒有才有此問題 如Mark所說正想辦法打根基找方向 感謝回復 BR, ubuntu_net2016
2017/3/13 16:19
|
||||||||||
![]() |
回覆: [Help] 無 /sys/class/gpio 目錄? |
|||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
會員三級
![]() ![]() 註冊日期:
2016/4/18 12:29 所屬群組:
已註冊使用者 等級: 9
HP : 0 / 221
![]() |
經過一翻折騰與處理其他的事務後
抽空來回覆一下這個問題,但我覺得參考價值不大 首先在編譯Kernel時,如上述網址需要將gpio support打開(我原本就是打開的,就沒測試關閉會如何了) 在kernel的檔案中應該會有與板子對應的硬體設定檔(xx.c,*PS1),將該檔案中初始化的部分與硬體對應設定好 例如在哪隻腳(哪個Port的哪個bit),有沒有其他功能(通常GPIO都會跟其他功能共用),一併設定完之後,編譯Kernel 開機後在File system中(/sys/class/gpio/)做export如網址所說下 設定對應的腳位,以網址所說為例30 Pin ,對30 pin做export **PS2 echo 30 > /sys/class/gpio/export 依硬體環境設定in / out echo "out" > /sys/class/gpio/gpio30/direction 完成,使用echo寫值 echo 1 > /sys/class/gpio/gpio30/value i2c還沒空玩冏... *PS.1 :我的kernel是第三方的,所以與各位手上的不同,為了避免混淆我用xx.c **PS.2:雖然後來GPIO確實可以動了,但我還是不清楚kernel space跟user space如何溝通,簡單說就是 知其然而不知其所以然,冏... 另外有一個問題是,我的kernel因為是第三方的,所以在其他或正常的kernel中,是沒有這個檔案 我想知道在正常的kernel中,要如何製作出這個檔案,這樣就可以不必依賴第三方的更新,不然被綁住也是怪怪的... 另外還有一個問題是在make menuconfig的時候,"好像"也有對應到xx.c的設定檔,我的問題是竟然kernel第三方有改過,make menuconfig是不是也有修改,我可以修改成我自己的嗎? 以上僅供參考,這部分與硬體較有相關,所以參考價值應該不多
2017/5/17 21:29
|
||||||||||
![]() |
回覆: [Help] 無 /sys/class/gpio 目錄? |
|||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
會員二級
![]() ![]() 註冊日期:
2007/1/13 14:26 所屬群組:
已註冊使用者 等級: 8
HP : 0 / 190
![]() |
ubuntu_net2016 大大,
強!
2017/5/17 23:42
|
||||||||||
![]() |
回覆: [Help] 無 /sys/class/gpio 目錄? |
|||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
會員二級
![]() ![]() 註冊日期:
2013/11/7 9:24 所屬群組:
已註冊使用者 等級: 8
HP : 0 / 187
![]() |
ubuntu_net2016 寫到: 恭喜你往前進了一大步,幾個方向我覺得你可以往下做: 1/沒有xx.c是很正常的,只要他不是官方原始的,大都會有這樣的情況,你不用去管那個XX.c是幹嘛的,可以把它只當成是你練習的工具,因為就你的文章看來,你有自己的xx.c要放進去。 2/make menuconfig的工作是為了「選擇」要編譯的條件和檔案等等,所以一定和xx.c有關,你可以找這方面的書藉,會發現它其實是用一大堆的「描述檔」去維護的,你可以把它看成是一個總觸發的開關,底下有一串又一串的描述檔,而你看到make menuconfig內的資料,其實都是來自於那些描述檔,所以簡單來說,你只要把這些描述檔的語法搞懂,你就可以自己決定要如何把你的xx.c放到任何一個你想要編譯的kernel版本中。 3/user space/kernel space其實你已經在用了,你用cat > XXXX這個動作,就是用user space的指令'cat'透過'>'把命令透過device node傳遞到kernel space 的 driver內,也就是你的XX.C。至於這個傳遞的架構,任何一本「比較新」的driver教學書中都會有寫,這裡說的「比較新」,是因為這個架構有個幾次的改版,如果要學,直接用最新的架構來做比較保險,不過,要注意是不是和你的kernel檔本相符合。 以上 BR, Mark Chang
2017/5/18 9:29
|
||||||||||
![]() |
回覆: [Help] 無 /sys/class/gpio 目錄? |
|||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
會員三級
![]() ![]() 註冊日期:
2006/11/10 20:25 所屬群組:
已註冊使用者 等級: 9
HP : 0 / 222
![]() |
就我的認知,GPIO 通常memory mapping到記憶體高位址區,一般無法直接存取,透過driver做有限度的存取來對應GPIO的動作.詳細要查看開發手冊才能知道位址,有了位址後就可以自已寫driver來對應你想要做的事.
有些另外有些會mapping一份部份IO到低位址區讓user space也可以直接操做,但操作功能沒有高位址區那麼多,至於mapping到哪個位址....還是要看手冊.... 如果有錯麻煩指正,謝謝!
2017/5/27 6:21
|
||||||||||
![]() |
回覆: [Help] 無 /sys/class/gpio 目錄? |
|||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
會員三級
![]() ![]() 註冊日期:
2016/4/18 12:29 所屬群組:
已註冊使用者 等級: 9
HP : 0 / 221
![]() |
回家前,來回應一下
Mark Chang 先感謝大師指導 那個xx.c很重要阿,要是可以自己加進去,未來更新就不用等第三方,或是未來需要完全重頭開始時,也不必擔心(我絕對不會承認,我就是想知道怎麼加進去,絕對不會XDD) 從您的回覆來看,我後來去找的driver的資料,如果我觀念沒錯的話,那個xx.c因該可以算是那個"PCB"的驅動程式 (我覺得用PCB解釋,這樣因該比較不會混淆),像是顯卡有顯卡的驅動,音效卡有音效卡的驅動,可以把那個xx.c看成是一個PCB驅動程式 因為新增了內建的驅動程式,所以PCB一安裝好之後就可以用了 至於要如何在一個標準linux kernel中加入那個xx.c,如大師指導,需要修改kernel的描述檔(kconfig?make file)即可 剩下的就是程式碼的部分了 以上有錯請不吝指正 謝謝 barun 不好意思,小弟的功力還未到GPIO的memory map,我在文中說的xx.c中,腳位也只是一個struct,並且都已經定義好了 如PIN_A_1.uart,mode_1,xxxxx,xxxxx,我只要對應硬體的腳位即可,並不需要對mempry map做操作 未來如有遇到這方面的,還請您多多指教 謝謝
2017/7/3 19:35
|
||||||||||
![]() |
您可以查看帖子.
您不可發帖.
您不可回覆.
您不可編輯自己的帖子.
您不可刪除自己的帖子.
您不可發起投票調查.
您不可在投票調查中投票.
您不可上傳附件.
您不可不經審核直接發帖.