-
Notifications
You must be signed in to change notification settings - Fork 14
Custom u boot
El u-boot es lo primero que levanta cuando la beagle bootea. Se pueden configurar un montón de cosas desde u-boot, y mientras nadie las toque después (el kernel, etc) quedarán.
Por ejemplo, se puede configurar para que el expansion header muestre tanto rx como tx de la UART2
, siempre que se configure el kernel con:
# CONFIG_OMAP_MUX=n
Ver openembedded+bitbake para más info sobre configurar/cambiar cosas en el kernel, u-boot, etc.
Los geeks arrancamos a contar desde 0, o sea que la segunda UART es la 1 (claramente).
Lo que queremos es modificar beagle.h
, habilitando la UART2. Por defecto, la beagle no muestra UART2_RX
, solamente muestra UART2_TX
. Para que ambas señales estén disponibles hace falta modificar u-boot/board/ti/beagle/beagle.h
, agregando esto al final de la parte que corresponde al xm:
/*UART2 on bb pins 4 (CTS) 6 (TX) 8 (RX) 10 (RTS) */\
MUX_VAL(CP(UART2_CTS), (IDIS | PTU | EN | M4)) /*UART2_CTS*/\
MUX_VAL(CP(UART2_RTS), (IDIS | PTU | DIS | M4)) /*UART2_RTS*/\
MUX_VAL(CP(UART2_TX), (IDIS | PTD | DIS | M0)) /*UART2_TX*/\
MUX_VAL(CP(MCBSP3_FSX), (IEN | PTD | DIS | M1)) /*UART2_RX*/ \
/*unset alternative UART2 pins, to avoid double muxing*/ \
MUX_VAL(CP(UART2_RX), (IDIS | PTD | DIS | M4)) /*alternative UART2_RX*/\
MUX_VAL(CP(MCBSP3_DX), (IEN | PTD | DIS | M4)) /*OLD UART2_CTS*/\
MUX_VAL(CP(MCBSP3_DR), (IDIS | PTD | DIS | M4)) /*OLD UART2_RTS*/\
MUX_VAL(CP(MCBSP3_CLKX), (IDIS | PTD | DIS | M4)) /*OLD UART2_TX*/\
Para probar si anduvo se puede hacer un loopback, ie, un corto del pin 6 al 8, y después en la beagle hacer:
root@beagleboard:# stty -F /dev/ttyO1 115200 -echo -cooked
root@beagleboard:# cat /dev/ttyO1
Eso debería quedar ahí, esperando a leer algo. Con el comando anterior se:
- Seteó el baudrate a 115200.
- Deshabilitó el
echo
, ya que de lo contrario se armaría un loop con realimentación positiva, q resulta en que elcat
se queda leyendo para siempre. Con elecho
prendido, si mandás una A, elcat
te va a mostrar una A, dsp un par de lineas en blanco, otra A, un montón de lineas en blanco, otra A, muuuchas lineas en blanco, otra A, etc. - Se hizo algo más que a veces hace falta, y todavía no entiendo bien porqué (nunca molesta).
Abrir otra consola y hacer
root@beagleboard:~# echo a > /dev/ttyO1
En la primer consola (la del cat
) debería verse una a
.
root@beagleboard:~# cat /dev/ttyO1
a
NOTA: En algunos casos puede ser que se use /dev/ttyS1
, no estoy seguro cuando es cual ni porqué, pero si te da input/output error
, probá con el otro.
Se necesita un entorno de desarrollo openembedded+bitbake, o el toolchain para el beagle, que se puede descargar de por ahí (nunca me anduvo), o sino se puede utilzar el que genera el bitbake (sería al pedo, ya que si se cuenta con un entorno de desarrollo Openembedded/bitbake, se lo puede usar y listo)
En openembedded+bitbake hay un ejemplo que explica como llegar hasta donde se puede editar le archivo que configura el pin muxing, beagle.h
.
Copiar el MLO
y el u-boot.img
desde setup-scripts/build/tmp*/deploy/images/beagleboard/
a la partición FAT de la micro SD.
Los siguiente tres bloques de comandos se encargan de:
- Descargar el código y configurar un branch que siga al branch que nos interesa (el compatible con el beagle).
- Indicarle a u-boot donde tiene que buscar el toolchain que permite compilar un programa que después funciona en el micro de la beagle (y por lo tanto no funciona en una PC/laptop común). Se asume que la variable
OE_BUILD_TMPDIR
existe, o sea que esto asume que se cuenta con un entorno de desarrollo basado en Openembedded/bitbake. - Compilar el u-boot
git clone git://git.denx.de/u-boot.git u-boot-main
cd u-boot-main
git checkout --track -b omap3 origin/master
export CROSS_COMPILE=${OE_BUILD_TMPDIR}/sysroots/x86_64-linux/usr/armv7a/bin/arm-angstrom-linux-gnueabi-
make mrproper
make omap3_beagle_config
\# hacer los cambios correspondientes, y luego:
make
De los archivos resultantes u-boot.bin
debe ir a la microSD.