¿Por qué no generas un nuevo dtb?
DTB (Blob de árbol de dispositivos/binario), es una base de datos de hardware que representa los componentes de hardware de la placa.
U-boot pasa la estructura de información de la placa al núcleo, que se deriva del archivo de encabezado en U-Boot.
DTB es compilado por el compilador especial que produce el binario en la forma adecuada para que U-Boot y Linux lo entiendan.
DTC (Compilador de árbol de dispositivos) traduce el archivo del árbol de dispositivos al binario legible por máquina que U-Boot y el kernel de Linux pueden entender.
La forma sencilla de usar DTC.
$ dtc -O dtb -o arm_board.dtb -b 0 arm_board.dts
para obtener el árbol de dispositivos en texto desde el dtb.
dtc -I dtb -O dts arm_board.dtb
board.dts es binario creado por el comando anterior. -O
especifica el formato de salida. -o
la bandera es el archivo de salida. -b 0
especifica la CPU de arranque físico.
Entonces haz
$ make ARCH=arm arm_board.dtb
Otro enfoque podría ser simplemente usar make dtbs
esto llamará a dtc. arch/arm/boot/dts/Makefile
enumera qué DTB deben generarse en el momento de la compilación. Esta es otra forma de compilarlo. make lo colocará en esta ubicación del árbol del kernel /arch/arm/boot/dts
Echa un vistazo a este árbol de dispositivos para principiantes
Solo quiero actualizar esto con 2 años más de experiencia en el tema.
Los archivos DTS en el repositorio de Linux son una mezcla de DTS y Directivas de preprocesador de C (#include, #define, etc.). Entonces, cuando se compila el DTB original, el preprocesador se vincula a los archivos a los que se hace referencia para crear un archivo DTS puro. dtc
convierte el único archivo DTS en un archivo DTB.
Entonces, si desea modificar un archivo DTS del kernel y compilarlo, tiene dos opciones:
- Simplemente ejecute
make dtbs
que maneja automáticamente todo esto - Ejecute manualmente el preprocesador (
cpp -nostdinc -I <include dir> -undef -x assembler-with-cpp ...
) y luego compile la salida condtc
.