View previous topic :: View next topic |
Author |
Message |
TJNII l33t
Joined: 09 Nov 2003 Posts: 648 Location: for(;;);
|
Posted: Sun Jun 16, 2024 3:40 pm Post subject: What's the right way to build the DTS Blob |
|
|
Maybe I didn't Google hard enough last night, I was so close to getting the board booted I didn't want to stop and find the "right" way.
When booting a OrangePi Zero I found it needed a device tree blob. The DTS files are included in the kernel source, but need preprocessing. The steps I ran to build the blob are:
Code: |
cpp -nostdinc -I include -I arch -undef -x assembler-with-cpp arch/arm/boot/dts/sun8i-h2-plus-orangepi-zero.dts /tmp/sun8i-h2-plus-orangepi-zero.dts.preprocessed
scripts/dtc/dtc -I dts -O dtb /tmp/sun8i-h2-plus-orangepi-zero.dts.preprocessed > /boot/sun8i-h2-plus-orangepi-zero.dtb
|
This worked fine. But given the high levels of scripting and documentation around all the rest of the processes having to suss a cpp command out of a forum post to build this blob felt very out of place. Is there a utility I didn't find that handles this? |
|
Back to top |
|
|
TJNII l33t
Joined: 09 Nov 2003 Posts: 648 Location: for(;;);
|
Posted: Sun Jun 16, 2024 3:45 pm Post subject: |
|
|
And some breadcrumbs for search engines:
Original error:
Code: |
=> ext2load mmc 0:1 42000000 boot/uImage
8319736 bytes read in 346 ms (22.9 MiB/s)
=> bootm 42000000
## Booting kernel from Legacy Image at 42000000 ...
Image Name: Linux-5.15.158-gentoo
Image Type: ARM Linux Kernel Image (uncompressed)
Data Size: 8319672 Bytes = 7.9 MiB
Load Address: 42000000
Entry Point: 42000000
Verifying Checksum ... OK
Working FDT set to 0
Loading Kernel Image to 42000000
FDT and ATAGS support not compiled in
resetting ...
|
Code: | FDT and ATAGS support not compiled in | is a bit misleading, the real error is not passing a device tree address. I did the steps in my first post then booted with:
Code: |
=> ext2load mmc 0:1 43000000 boot/sun8i-h2-plus-orangepi-zero.dtb
23240 bytes read in 3 ms (7.4 MiB/s)
=> setenv bootargs "console=ttyS0,115200n8 root=/dev/mmcblk0p1 rw rootfstype=ext4 mem=512M loglevel=7 single init=/bin/bash"
=> ext2load mmc 0:1 42000000 boot/uImage
8319736 bytes read in 346 ms (22.9 MiB/s)
=> bootm 42000000 - 43000000
## Booting kernel from Legacy Image at 42000000 ...
Image Name: Linux-5.15.158-gentoo
Image Type: ARM Linux Kernel Image (uncompressed)
Data Size: 8319672 Bytes = 7.9 MiB
Load Address: 42000000
Entry Point: 42000000
Verifying Checksum ... OK
## Flattened Device Tree blob at 43000000
Booting using the fdt blob at 0x43000000
Working FDT set to 43000000
Loading Kernel Image to 42000000
Loading Device Tree to 49ff7000, end 49fffac7 ... OK
Working FDT set to 49ff7000
Starting kernel ...
[ 0.000000] Booting Linux on physical CPU 0x0
|
The 3 args to the `bootm` U-Boot command are the address the kernel was loaded into, the initrd address (- in this case as I'm not using a initrd), and the address the dtb blob was loaded into. Note these addresses are device specific, on the SBC I'm booting 0x4000:0000 - 0xBFFF:FFFF is RAM. |
|
Back to top |
|
|
TJNII l33t
Joined: 09 Nov 2003 Posts: 648 Location: for(;;);
|
Posted: Sat Jun 22, 2024 12:17 pm Post subject: |
|
|
in the kernel source tree.
Haven't learned how overlays are meant to be customized yet, I stumbled across this working on something unrelated. |
|
Back to top |
|
|
M95D Tux's lil' helper
Joined: 03 Jan 2020 Posts: 96
|
Posted: Wed Jul 24, 2024 9:51 pm Post subject: |
|
|
When you build the kernel (make), DTBs are automatically built.
The kernel and DTB addresses are not really strict. You can change them as long as you keep track where everything else is in memory. Possible mistakes would be to overwrite uboot's memory, load stuff where the devices are (UART address, emmc I/O, PCI, etc.), or load the kernel and then overwrite part of it with the dtb. |
|
Back to top |
|
|
|