[Help] 無 /sys/class/gpio 目錄? [論壇 - 新手村]


正在瀏覽:   1 名遊客


 到底部   前一個主題   下一個主題  [無發表權] 請登錄或者註冊

« 1 (2) 3 »


回覆: [Help] 無 /sys/class/gpio 目錄?
會員二級
註冊日期:
2016/4/18 12:29
所屬群組:
已註冊使用者
等級: 7
HP : 0 / 160
MP : 24 / 779
EXP: 40
離線
http://shyuanliang.blogspot.tw/2012/08/linux-gpio-driver-guide.html

Sysfs entries configuration有介紹

有人知道打開後的步驟嗎?
linux底層的部份怎麼跟實體IO溝通
謝謝

3/10 17:15:54
應用擴展 工具箱
回覆: [Help] 無 /sys/class/gpio 目錄?
會員二級
註冊日期:
2013/11/7 9:24
所屬群組:
已註冊使用者
等級: 8
HP : 0 / 179
MP : 28 / 2156
EXP: 18
離線
ubuntu_net2016 寫到:
http://shyuanliang.blogspot.tw/2012/08/linux-gpio-driver-guide.html

Sysfs entries configuration有介紹

有人知道打開後的步驟嗎?
linux底層的部份怎麼跟實體IO溝通
謝謝


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腳的定義嗎?如果沒有,那後續的工作就沒有可能了...

3/10 17:54:19
應用擴展 工具箱
回覆: [Help] 無 /sys/class/gpio 目錄?
會員二級
註冊日期:
2016/4/18 12:29
所屬群組:
已註冊使用者
等級: 7
HP : 0 / 160
MP : 24 / 779
EXP: 40
離線

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腳的定義嗎?如果沒有,那後續的工作就沒有可能了...

這部份可以取得,目前gpio剛好有兩種模式一個是直接從CPU GPIO出來,一個走i2c
User Space跟一些GPIO、MCU大約略懂,但linux跟GPIO、MCU就連結不上了Orz
簡單的說一個問題,透過menuconfig打開/.../gpio後,user space就可以讓程式R/W,
而其中程式碼寫在kernel裡,所以應該有一個動作將menuconfig跟程式碼(.o)做連結(僅為猜測,有錯還請指正)
但中間完全不懂,如有方向或資料還請各位先進幫忙
先謝謝各位

3/13 15:20:15
應用擴展 工具箱
回覆: [Help] 無 /sys/class/gpio 目錄?
會員二級
註冊日期:
2013/11/7 9:24
所屬群組:
已註冊使用者
等級: 8
HP : 0 / 179
MP : 28 / 2156
EXP: 18
離線
ubuntu_net2016 寫到:

這部份可以取得,目前gpio剛好有兩種模式一個是直接從CPU GPIO出來,一個走i2c
User Space跟一些GPIO、MCU大約略懂,但linux跟GPIO、MCU就連結不上了Orz
簡單的說一個問題,透過menuconfig打開/.../gpio後,user space就可以讓程式R/W,
而其中程式碼寫在kernel裡,所以應該有一個動作將menuconfig跟程式碼(.o)做連結(僅為猜測,有錯還請指正)
但中間完全不懂,如有方向或資料還請各位先進幫忙
先謝謝各位


你可能需要兩個方向的資訊來滿足你的需求:
1/如何編譯kernel
-> 透過這個步驟的了解,你可以選擇把driver編在kernel image中,或者是把它獨立編譯成.ko檔,再以insmod的方式手動或自動載入。過程中,你會看到 make menuconfig的運作原理,就會知道這個動作如何把你的原始碼加到編譯的參數中,有了以上的動作,就可以產出你要的kernel image或者是XXXX.ko了。

2/如何修改driver
-> 這裡不說撰寫而說修改,是因為原始的kenel中已有GPOI的程式碼,如果在步驟1中你已經可以明確的掌握檔案的路徑和生成的方式,就一定可以取得正確的現有原始碼來進行複製及修改,至於driver的寫法,有它標準的框架,可參考坊間的書藉,會比在網上看一堆零散的資料來得更有系統。

畢竟GPIO的功能可以很單純,也可以很複雜,要看你的實際應用案例,才能決定它的難度。建議你先有一些根基再來發問,否則這些東西不是可以靠簡單的討論就能馬上學會。

BR,
Mark Chang

3/13 16:05:57
應用擴展 工具箱
回覆: [Help] 無 /sys/class/gpio 目錄?
會員二級
註冊日期:
2016/4/18 12:29
所屬群組:
已註冊使用者
等級: 7
HP : 0 / 160
MP : 24 / 779
EXP: 40
離線
Mark Chang

真的很感謝您的指導,因為目前連個方向都沒有才有此問題
如Mark所說正想辦法打根基找方向
感謝回復

BR,
ubuntu_net2016

3/13 16:19:54
應用擴展 工具箱
回覆: [Help] 無 /sys/class/gpio 目錄?
會員二級
註冊日期:
2016/4/18 12:29
所屬群組:
已註冊使用者
等級: 7
HP : 0 / 160
MP : 24 / 779
EXP: 40
離線
經過一翻折騰與處理其他的事務後
抽空來回覆一下這個問題,但我覺得參考價值不大
首先在編譯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是不是也有修改,我可以修改成我自己的嗎?


以上僅供參考,這部分與硬體較有相關,所以參考價值應該不多

5/17 21:29:29
應用擴展 工具箱
回覆: [Help] 無 /sys/class/gpio 目錄?
會員二級
註冊日期:
2007/1/13 14:26
所屬群組:
已註冊使用者
等級: 8
HP : 0 / 178
MP : 28 / 5686
EXP: 12
離線
ubuntu_net2016 大大,

強!

5/17 23:42:21
應用擴展 工具箱
回覆: [Help] 無 /sys/class/gpio 目錄?
會員二級
註冊日期:
2013/11/7 9:24
所屬群組:
已註冊使用者
等級: 8
HP : 0 / 179
MP : 28 / 2156
EXP: 18
離線
ubuntu_net2016 寫到:
....
另外有一個問題是,我的kernel因為是第三方的,所以在其他或正常的kernel中,是沒有這個檔案
我想知道在正常的kernel中,要如何製作出這個檔案,這樣就可以不必依賴第三方的更新,不然被綁住也是怪怪的...
另外還有一個問題是在make menuconfig的時候,"好像"也有對應到xx.c的設定檔,我的問題是竟然kernel第三方有改過,make menuconfig是不是也有修改,我可以修改成我自己的嗎?

以上僅供參考,這部分與硬體較有相關,所以參考價值應該不多


恭喜你往前進了一大步,幾個方向我覺得你可以往下做:

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

5/18 9:29:37
應用擴展 工具箱
回覆: [Help] 無 /sys/class/gpio 目錄?
會員三級
註冊日期:
2006/11/10 20:25
所屬群組:
已註冊使用者
等級: 9
HP : 0 / 221
MP : 39 / 7172
EXP: 84
離線
就我的認知,GPIO 通常memory mapping到記憶體高位址區,一般無法直接存取,透過driver做有限度的存取來對應GPIO的動作.詳細要查看開發手冊才能知道位址,有了位址後就可以自已寫driver來對應你想要做的事.
有些另外有些會mapping一份部份IO到低位址區讓user space也可以直接操做,但操作功能沒有高位址區那麼多,至於mapping到哪個位址....還是要看手冊....
如果有錯麻煩指正,謝謝!

5/27 6:21:01
應用擴展 工具箱
回覆: [Help] 無 /sys/class/gpio 目錄?
會員二級
註冊日期:
2016/4/18 12:29
所屬群組:
已註冊使用者
等級: 7
HP : 0 / 160
MP : 24 / 779
EXP: 40
離線
回家前,來回應一下


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做操作
未來如有遇到這方面的,還請您多多指教
謝謝

7/3 19:35:36
應用擴展 工具箱

« 1 (2) 3 »

 [無發表權] 請登錄或者註冊


可以查看帖子.
不可發帖.
不可回覆.
不可編輯自己的帖子.
不可刪除自己的帖子.
不可發起投票調查.
不可在投票調查中投票.
不可上傳附件.
不可不經審核直接發帖.