Skip to content

Custom u boot

rlrosa edited this page Feb 20, 2012 · 5 revisions

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.

UART2 en el expansion header

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 el cat se queda leyendo para siempre. Con el echo prendido, si mandás una A, el cat 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.

Como compilar u-boot

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)

u-boot dentro de OE

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.

u-boot a mano desde git

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.

Fuentes