2015-01-11 136 views
6

我可以/sys/kernel/debug/pinctrl/44e10800.pinmux/pins偷看,看看我感興趣的針:如何在Linux內核3.17上編輯BeagleBone Black的pinmux?

pin 38 (44e10898.0) 00000037 pinctrl-single 

這相當於GPIO[2]4,或P8.10

我使用的是Fedora 21,內核爲3.17.7-300.fc21.armv7hl

我想將多路複用器更改爲0x27。換言之,這將配置引腳具有內部下拉電阻(在上拉之前)。

所需的輸出將是:

pin 38 (44e10898.0) 00000027 pinctrl-single 

可以做些什麼?

注意:沒有/sys/devices/bone_capemgr.*,因爲這不是在Angstrom。典型的DTO方法通過修改斗篷管理器來輸出更改。這不是一個選項。

編輯:繼tad的思路之後,我做了: dtc -I dtb -O dts -o ~/am335x-boneblack.dts /boot/dtb-3.17.7-300.fc21.armv7hl/am335x-boneblack.dtb。我編輯這個文件有:

... 
    [email protected] { 
     ... 

     example { 
      pinctrl-single,pins = <0x898 0x27>; 
     }; 
    }; 
... 

然後,我用dtc再次編譯它,在/boot/dtb-3.17.7-300.fc21.armv7hl/卡住它,並重新啓動。但是,沒有任何改變。發生了什麼?

編輯:

正如所指出的由Charles Steinkuehler,需要0x800被從偏移中減去,和「東西」需要引用「示例」。

如果我添加0x098 0x27我爲user_leds_s0項,所需的行爲觀察:

... 
    user_leds_s0 { 
     pinctrl-single,pins = <0x54 0x7 0x58 0x17 0x5c 0x7 0x60 0x170 0x098 0x27>; 
     linux,phandle = <0x3f>; 
     phandle = <0x3f>; 
    }; 
... 

現在,這是所有罰款和打動了我,我需要去。但是,該引腳不是真正的user_led。它應該在某種獨立的領域。那麼,我需要做些什麼才能讓「示例」字段或類似的工作?

+0

AFAIK覆蓋的概念被拆除。您需要操作原始.dts文件才能完成任務。僅供參考,這與根文件系統的風格無關(在你的情況下,Angstrom)。這完全取決於內核版本。 – raghav3276

+0

請原諒我的無知;你能否詳細說明一下需要什麼,假設我找到了Fedora使用的dts文件? – ToBeReplaced

+0

您是編輯「示例」引腳定義還是添加它?如果你加了這個,我看到兩個問題。首先,某處需要引用「示例」引腳配置,否則它將不起作用。其次,您的pinmux寄存器偏移量與我所期望的相同(即:0x898 pinmux寄存器偏移量在器件樹中變爲0x098,因爲AM335x pinmux驅動程序會爲您添加0x800)。如果這是您編輯的條目,我不熟悉特定內核的設備樹命名約定。 –

回答

3

我相信斗篷管理員的東西還沒有被移植過3.8內核。不知道它是否計劃成爲,但同時,您可以編輯平面設備樹。我發現(和我仍然在尋找最好的方式)最簡單的方法就是抓住倉庫處的

https://github.com/RobertCNelson/dtb-rebuilder

在src/arm目錄下,編輯am335x骨-共pinmux。 dtsi文件。其中,您可以搜索「P8_10_default_pin:」。本節告訴pinmux使用0x37作爲其默認設置。將其更改爲0x27並保存。

現在,通過運行make構建新的編譯設備樹(.dtb)文件。在Ubuntu上,「make install」將所有文件放在正確的位置。我不確定Fedora在哪裏,但是在/ boot /中進行挖掘應該很有趣。在Ubuntu上,正確的位置是

/boot/dtbs/`uname -r`/ 

在我的情況下,我正在運行3。14.26-TI-R43。重啓(和出口銷)後,上述變化使接收機和打開狀態(值)下拉讀爲0。

[email protected]:~# grep 898 /sys/kernel/debug/pinctrl/44e10800.pinmux/pins 
pin 38 (44e10898.0) 00000027 pinctrl-single 

[email protected]:~# echo 36 > /sys/class/gpio/export 
[email protected]:~# cat /sys/class/gpio/gpio36/value 
0 

我敢肯定有是實現這一目標的更優雅的方式,但這對我有用。

+0

您提供的回購和方法只適用於3.14。另一方面,這是有幫助的,因爲我在'/ boot/dtbs/$(uname -r)/'中看到.dtb文件。似乎我需要修改特定內核的.dts(i)文件,但我似乎無法弄清楚最後一步:https://github.com/torvalds/linux/blob/bfe01a5ba2490f299e1d2d5508cbbbadd897bbe9/arch/ arm/boot/dts/am335x-bone-common.dtsi。任何想法如何編輯該文件中的P8.10(或其他骨文件之一?) – ToBeReplaced

+0

3.19的回購中也有一個分支。你也可以看看那個。我的猜測是,這些文件沒有實質性的不同,當然不是針對你所看到的那些看起來沒有任何特別棘手的其他用途的針。至少,您可以查看makefile的功能,並將其複製到主線內核源代碼樹中。如果我有機會,我會拉下一個fedora圖像,並捅一下。 – tad

+0

我分配了賞金,但我仍然在尋找更完整的答案。我使用'dtc'來獲取'am335x-boneblack.dts'文件並在'pinmux @ 44e10800'標題下添加一個新組,它看起來像'example {pinctrl-single,pins = <0x898 0x27>;};'似乎沒有拿起。 – ToBeReplaced

1

如果您使用的是Robert Nelson的內核(或來自BeagleBoard的內核),則pinmux應受pinmux-helper驅動程序的控制,該驅動程序允許將pinmux寄存器的運行時設置爲各種預定義的值。查找文件/ sys/devices/ocp。 /P8_10_pinmux。 /狀態。如果存在的話,你可以將腳更改爲輸入與下拉:

# echo gpio_pd > /sys/devices/ocp.*/P8_10_pinmux.*/state 

...或者如果你正在運行RCN的Debian的一個建立或已經安裝了通用覆蓋你可以:

$ config-pin P8.10 in- 

疊加(爲3.8.13內核)和配置引腳實用程序(類似pinmux輔助設備樹條目的任何內核)可以在這裏找到:https://github.com/cdsteinkuehler/beaglebone-universal-io

+0

這對我的內核不起作用。如原始問題所述,內核是由Fedora提供的'3.17.7-300.fc21.armv7hl'。 – ToBeReplaced

相關問題