¡Esta es una revisión vieja del documento!


Método básico de edición de device tree en Beagle Bone

Cómo obtener el directorio que contiene archivos de device tree

Las distribuciones de Linux tienen un directorio en el que se almacenan los device tree en formato binario con extensión dtb. El objetivo es modificar el device tree para que en vez de usar el controlador de dispositivo estándar para un periférico, el sistema use nuestro controlador.

Lamentablemente las diferentes distribuciones usan su propio directorio para almacenar los archivos dtb. Por ejemplo, en versiones modernas de Debian el directorio es /boot/dtbs/<versión kernel>.

Si no existe ese directorio, lo más conveniente es ir al directorio raíz, y logueado como root, ejecutar el comando find -name *.dtb. En general habrá un solo directorio con archivos dtb. Si no es así, habrá que elegir el que incluya el texto dtbs dentro del nombre de directorio.

A partir de este momento suponemos que el directorio actual es el que contiene los archivos dtb.

Editando el device tree

Para poder editar el device tree, necesitamos convertir el formato binario a texto. Eso se logra mediante el comando dtc:

dtc -I dtb -O dts -o am335x.dts am335x-boneblack.dtb

La opción -I indica el formato de entrada (binario), la opción -O el formato de salida (texto) y la opción -o el archivo de salida.

Suponiendo que queremos escribir un controlador de dispositivos que maneje el I2C número 2, que de acuerdo al manual del procesador Sitara AM3359 se encuentra en la dirección física 0x4819c000, debemos buscar la cadena @4819c000 y luego reemplazamos la entrada para que quede de la siguiente manera:

i2c_td3@4819c000 {
  compatible = "td3,omap4-i2c";
  #address-cells = <0x1>;
  #size-cells = <0x0>;
  ti,hwmods = "i2c3";
  reg = <0x4819c000 0x1000>;
  interrupts = <0x1e>;
   .
   .
   .
  }
 

Las líneas modificadas son aquéllas que incluyen el texto td3.

Una vez realizada la modificación, salvamos el archivo dts.

Generación del nuevo archivo binario de device tree

Al arrancar el sistema, Linux puede obtener información para el device tree de otros archivos dtb. Para no tener ese inconveniente, borramos todos los archivos dtb de Beagle Bone mediante el comando rm *beaglebone*.dtb.

Para generar el nuevo archivo dtb en base al fuente que acabamos de modificar ejecutamos:

dtc -I dts -O dtb -o am335x-boneblack.dtb am335x.dts

En este caso el formato de entrada es texto (dts) y de salida en binario (dtb).

Verificación de nuestros cambios en el device tree

Una vez generado el archivo binario am335x-boneblack.dtb, reseteamos el Beagle Bone. Para probar que el cambio anduvo bien, vamos al directorio /proc/device-tree/ocp y ejecutamos el comando ls | grep -i td3 i2c_td3@4819c000. Si está todo bien, debería aparecer la entrada del device tree en pantalla.

Es sumamente importante seguir los pasos como se indica en este instructivo, ya que si se modifica incorrectamente el device tree, corremos el riesgo de que el Beagle Bone no arranque.

Método alternativo de edición de device tree en Beagle Bone

Se deben repetir los pasos 1 y 2 pero el dtb modificado se guarda con un nombre no default (por ejemplo td3-BBB.dtb)

Desactivación de los dtbo

Se abre el archivo uEnv.txt dentro de la carpeta /boot/ [para debian] y se modifican las siguientes líneas:

Se comenta la siguiente línea:

#enable_uboot_overlays=1 Se eliminan los comentarios de las siguientes líneas: disable_uboot_overlay_emmc=1 disable_uboot_overlay_video=1 disable_uboot_overlay_audio=1 disable_uboot_overlay_wireless=1 disable_uboot_overlay_adc=1 Se agrega la siguiente línea (se puede usar otro nombre pero siempre que se respete en el dtb generado): dtb=td3-BBB.dtb