2015-01-11 21 views
6

posso dare un'occhiata al /sys/kernel/debug/pinctrl/44e10800.pinmux/pins e vedere il perno Sono interessato a:Come posso modificare un pinmux per BeagleBone Black sul kernel linux 3.17?

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

Ciò corrisponde a GPIO[2]4, o P8.10.

Sto utilizzando Fedora 21, con il kernel 3.17.7-300.fc21.armv7hl.

Vorrei cambiare il mux a 0x27. A parole, questo configurerebbe il pin per avere un resistore di pull-down interno (prima era pull-up).

L'output desiderato sarebbe:

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

Cosa si può fare?

Nota: non esiste lo /sys/devices/bone_capemgr.*, poiché questo non è su Angstrom. Il tipico approccio DTO esporta le modifiche modificando il gestore del capo. Questa non è un'opzione.

Edit: Dopo l'esplorazione dalla linea di pensiero tad s', ho fatto: dtc -I dtb -O dts -o ~/am335x-boneblack.dts /boot/dtb-3.17.7-300.fc21.armv7hl/am335x-boneblack.dtb. Ho modificato questo file per avere:

... 
    [email protected] { 
     ... 

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

Poi, ho compilato di nuovo con dtc, bloccato nella /boot/dtb-3.17.7-300.fc21.armv7hl/, ed ho ripartito. Tuttavia, nulla è cambiato. Cosa sta succedendo?

Edit:

come indicato da Charles Steinkuehler, il 0x800 deve essere sottratto dal offset, e "qualcosa" deve fare riferimento "esempio".

Se aggiungo 0x098 0x27 alla mia voce per user_leds_s0, si osserva il comportamento desiderato:

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

Ora, questo è tutto bene e mi fa dove ho bisogno di andare. Tuttavia, quel pin non è davvero un utente_lato. Dovrebbe essere in un campo separato di qualche tipo. Quindi, qual è il "qualcosa" che devo fare per ottenere il campo "esempio" o simile al lavoro?

+0

per quanto ne so il concetto di sovrapposizioni sono stati rimossi . È necessario modificare il file .dts originale per fare le cose. Cordiali saluti, questo non è legato al sapore del file system di root (nel tuo caso, Angstrom). Questo dipende interamente dalla versione del kernel. – raghav3276

+0

Perdonate la mia ignoranza; Puoi approfondire un po 'quello che sarebbe necessario, supponendo che ho trovato il file dts che usa Fedora? – ToBeReplaced

+0

Hai modificato la definizione di pin "esempio" o la aggiungi? Se hai aggiunto questo, vedo due problemi. In primo luogo, qualcosa da qualche parte deve fare riferimento alla configurazione del pin "esempio" o non avrà alcun effetto. In secondo luogo, il tuo pinmux registra offset è 0x800 fuori da quello che mi aspetterei (cioè: 0x898 pinmux offset offset si trasforma in 0x098 nell'albero del dispositivo, poiché il driver pinmux AM335x aggiunge 0x800 per te). Se questa è una voce che hai modificato, non ho familiarità con le convenzioni di denominazione degli alberi del dispositivo per il tuo particolare kernel. –

risposta

3

Credo che il roba del gestore capo non sia stato trasferito oltre il kernel 3.8. Non sono sicuro se è pianificato di essere o meno, ma nel frattempo, è possibile modificare l'albero del dispositivo piatto invece. Il modo più semplice che ho trovato (e sto ancora cercando il modo migliore) è quello di afferrare il repository a

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

Nella directory src/braccio, modificare l'AM335x-osso-common-pinmux. file dtsi. In essa puoi cercare "P8_10_default_pin:". Questa sezione dice al pinmux di usare 0x37 come impostazione predefinita. Cambiare questo a 0x27 e salvare.

Ora, creare il nuovo file di albero di dispositivo compilato (.dtb) eseguendo make. Su ubuntu, "make install" colloca tutti i file nella posizione corretta. Non sono sicuro su fedora dove vanno, ma scavare in/boot/dovrebbe rivelarsi interessante. Su Ubuntu, il posto giusto è

/boot/dtbs/`uname -r`/ 

Nel mio caso, sto facendo funzionare 3.14.26-ti-R43. Dopo il riavvio (e l'esportazione del perno), quanto sopra modifica consente la discesa sul ricevitore e lo stato di apertura (valore) si legge come 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 

Sono sicuro che ci sia un modo più elegante per raggiungere l'obiettivo , ma questo funziona per me.

+0

I repository e il metodo forniti sono solo per 3.14. D'altra parte, questo è stato utile dal momento che vedo i file .dtb in '/ boot/dtbs/$ (uname -r) /'. Sembra che ho bisogno di modificare il file .dts (i) per il mio kernel specifico, ma non riesco a capire il passaggio finale: https://github.com/torvalds/linux/blob/bfe01a5ba2490f299e1d2d5508cbbbadd897bbe9/arch/ arm/boot/dts/am335x-bone-common.dtsi. Qualche idea su come modificare P8.10 in quel file (o uno degli altri file bone?) – ToBeReplaced

+0

C'è anche un ramo nel repository per 3.19. Potresti dare un'occhiata anche a quello. La mia ipotesi è che i file non siano materialmente diversi, certamente non per il pin che stai guardando, che non sembra avere altri usi particolarmente difficili. Per lo meno, si potrebbe dare un'occhiata a ciò che sta facendo il makefile e duplicarlo nell'albero dei sorgenti del kernel mainline. Se avrò la possibilità di tirare giù un'immagine fedora e di aggirarmi un po '. – tad

+0

Ho assegnato la taglia, ma sto ancora cercando una risposta più completa. Ho usato 'dtc' per ottenere il file' am335x-boneblack.dts' e aggiunto un nuovo gruppo sotto l'header 'pinmux @ 44e10800' che assomiglia a' example {pinctrl-single, pins = <0x898 0x27>;}; ', ma questo fa non sembra essere preso. – ToBeReplaced

1

Se si utilizzano i kernel di Robert Nelson (o quelli di BeagleBoard), il pinmux dovrebbe essere sotto il controllo di un driver pinmux-helper che consente l'impostazione del tempo di esecuzione dei registri pinmux su vari valori predefiniti. Cerca il file/sys/devices/ocp. /P8_10_pinmux./stato. Se esiste, è possibile modificare il pin ad un ingresso con pull-down da:

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

... o se si sta eseguendo una delle Debian di RCN costruisce o ha installato il mio overlay universale appena possibile:

$ config-pin P8.10 in- 

la sovrapposizione (per 3.8.13 kernel) e l'utilità di configurazione pin (per qualsiasi kernel con simili voci dispositivo-albero pinmux-helper) si possono trovare qui: https://github.com/cdsteinkuehler/beaglebone-universal-io

+0

Questo non funzionerà per il mio kernel. Come indicato nella domanda originale, il kernel è '3.17.7-300.fc21.armv7hl' fornito da Fedora. – ToBeReplaced