2015-01-11 26 views
6

Ich kann einen Blick auf /sys/kernel/debug/pinctrl/44e10800.pinmux/pins nehmen und den Stift sehe ich interessiert bin:Wie kann ich einen Pinmux für BeagleBone Black unter Linux Kernel 3.17 bearbeiten?

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

Dies entspricht GPIO[2]4 oder P8.10.

Ich benutze Fedora 21, mit Kernel 3.17.7-300.fc21.armv7hl.

Ich möchte den Mux zu 0x27 ändern. In Worten, dies würde den Pin so konfigurieren, dass er einen internen Pull-Down-Widerstand hat (zuvor wurde er hochgezogen).

würde die gewünschte Ausgabe sein:

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

Was kann getan werden?

Hinweis: Es gibt keine /sys/devices/bone_capemgr.*, da dies nicht auf Angstrom ist. Der typische DTO-Ansatz exportiert die Änderungen, indem er den Cape Manager ändert. Dies ist keine Option.

Bearbeiten: Nach Erkundung von tad 's Gedankengang, tat ich: dtc -I dtb -O dts -o ~/am335x-boneblack.dts /boot/dtb-3.17.7-300.fc21.armv7hl/am335x-boneblack.dtb. Ich bearbeitet diese Datei zu haben:

... 
    [email protected] { 
     ... 

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

Dann habe ich es noch einmal kompiliert mit dtc, steckte es in /boot/dtb-3.17.7-300.fc21.armv7hl/ und neu gestartet. Nichts änderte sich jedoch. Was ist los?

Edit:

Wie Charles Steinkuehler angegeben, muss die 0x800 vom Offset subtrahiert werden, und "etwas" braucht "Beispiel" zu verweisen.

Wenn ich für user_leds_s00x098 0x27 zu meinem Eintrag hinzufügen, wird das gewünschte Verhalten beobachtet: Jetzt

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

, das alles in Ordnung ist und bekommt mich, wohin ich gehen müssen. Dieser Pin ist jedoch nicht wirklich ein user_led. Es sollte in einem separaten Bereich irgendeiner Art sein. Also, was ist das "Etwas", das ich tun muss, um das "Beispiel" -Feld oder ähnliches zur Arbeit zu bekommen?

+0

AFAIK das Konzept der Overlays entfernt wurden . Sie müssen die ursprüngliche .dts-Datei bearbeiten, um die Aufgaben erledigen zu können. Zu Ihrer Information, das hängt nicht mit dem Geschmack des Root-Dateisystems zusammen (in Ihrem Fall Angstrom). Dies hängt vollständig von der Kernel-Version ab. – raghav3276

+0

Verzeihen Sie meine Ignoranz; Kannst du ein bisschen mehr darüber sagen, was benötigt wird, vorausgesetzt, ich habe die dts-Datei gefunden, die Fedora benutzt? – ToBeReplaced

+0

Haben Sie die Pindefinition "Beispiel" bearbeitet oder hinzugefügt? Wenn Sie das hinzufügen, sehe ich zwei Probleme. Zuerst muss irgendwo etwas auf die "Beispiel" -Pin-Konfiguration verwiesen werden oder es wird keine Wirkung haben. Zweitens ist Ihr Pinmux-Register-Offsets 0x800 von dem entfernt, was ich erwarten würde (dh 0x898 Pinmux-Register-Offset wird in 0x098 in der Gerätestruktur, da der AM335x Pinmux-Treiber 0x800 für Sie hinzufügt). Wenn dies ein von Ihnen bearbeiteter Eintrag ist, bin ich nicht vertraut mit den Benennungskonventionen für die Gerätebaumstruktur für Ihren bestimmten Kernel. –

Antwort

3

Ich glaube, dass der Kap-Manager-Zeug nicht hinter dem Kernel 3.8 portiert wurde. Nicht sicher, ob es geplant ist oder nicht, aber in der Zwischenzeit können Sie stattdessen den flachen Gerätebaum bearbeiten. Der einfachste Weg, den ich gefunden habe (und ich bin noch auf der Suche nach dem besten Weg) ist das Repository bei

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

Im src/Arm-Verzeichnis greifen, bearbeiten Sie den AM335x-Knochen-Common-pinmux. DTSI-Datei. In diesem können Sie nach "P8_10_default_pin:" suchen. In diesem Abschnitt wird Pinmux angewiesen, 0x37 als Standardeinstellung zu verwenden. Ändere dies auf 0x27 und speichere.

Erstellen Sie nun die neue kompilierte Gerätebaumdatei (.dtb), indem Sie make ausführen. Auf Ubuntu stellt "make install" alle Dateien an die richtige Stelle. Ich bin mir nicht sicher, auf Fedora, wo sie gehen, aber in/boot/zu graben sollte interessant sein. Auf Ubuntu ist die korrekte Stelle

/boot/dtbs/`uname -r`/ 

In meinem Fall, ich renne 3.14.26-ti-r43. Nach dem Neustart (und den Stift Export), ermöglicht die obige Änderung des Pull-Down auf dem Empfänger und dem geöffneten Zustand (Wert) lautet wie 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 

Ich bin sicher, dass es eine elegantere Weg ist das Ziel zu erreichen , aber das funktioniert für mich.

+0

Die von Ihnen bereitgestellten Repos und Methoden gelten nur für 3.14. Auf der anderen Seite war dies hilfreich, da ich die .dtb-Dateien in '/ boot/dtbs/$ (uname -r) /' sehe. Es sieht so aus, als müsste ich die .dts (i) -Datei für meinen spezifischen Kernel modifizieren, aber ich kann den letzten Schritt nicht herausfinden: https://github.com/torvalds/linux/blob/bfe01a5ba2490f299e1d2d5508cbbadd897bbe9/arch/ arm/boot/dts/am335x-knochen-common.dtsi. Irgendeine Idee, wie man P8.10 in dieser Datei (oder einer der anderen Bone-Dateien?) Bearbeitet – ToBeReplaced

+0

Es gibt auch eine Verzweigung im Repo für 3.19. Du könntest dir das auch ansehen. Meine Vermutung ist, dass die Dateien nicht wesentlich anders sind, sicherlich nicht für die Pin, die Sie betrachten, die keine besonders kniffligen anderen Anwendungen zu haben scheint. Zumindest können Sie sich ansehen, was das Makefile macht, und es in der Mainline-Kernel-Quellstruktur duplizieren. Wenn ich eine Chance habe, ziehe ich ein Fedora-Bild herunter und stoße ein wenig herum. – tad

+0

Ich habe das Kopfgeld vergeben, suche aber immer noch nach einer vollständigeren Antwort. Ich benutzte 'dtc', um die' am335x-boneblack.dts' Datei zu erhalten und fügte eine neue Gruppe unter dem 'pinmux @ 44e10800' Header hinzu, der wie' example {pinctrl-single, pins = <0x898 0x27>;}; 'aussieht, aber das tut es scheinen nicht abgeholt zu werden. – ToBeReplaced

1

Wenn Sie die Kernel von Robert Nelson (oder die von BeagleBoard) verwenden, sollte der Pinmux von einem Pinmux-Helper-Treiber gesteuert werden, der die Runtime-Einstellung der Pinmux-Register auf verschiedene vordefinierte Werte ermöglicht. Suchen Sie nach der Datei/sys/devices/ocp. /P8_10_pinmux./Zustand. Wenn diese vorhanden ist, können Sie den Stift an einen Eingang mit Pull-Down von ändern:

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

... oder wenn Sie eine der RCN Debian laufen bauen oder meinen Universal-Overlay installiert können Sie einfach:

$ config-pin P8.10 in- 

Das Overlay (für 3.8.13 Kernel) und config-Pin-Dienstprogramm (für jeden Kern mit ähnlichen pinmux-Helfer-Gerät Baum Einträge) sind hier zu finden: https://github.com/cdsteinkuehler/beaglebone-universal-io

+0

Dies funktioniert nicht für meinen Kernel. Wie in der ursprünglichen Frage angegeben, ist der Kernel "3.17.7-300.fc21.armv7hl" von Fedora zur Verfügung gestellt. – ToBeReplaced

Verwandte Themen