neuberfran@raspberrypi:~$ lsb_release -a
No LSB modules are available.
Distributor ID: Debian
Description: Debian GNU/Linux 12 (bookworm)
Release: 12
Codename: bookworm
neuberfran@raspberrypi:~$ arch
aarch64
neuberfran@raspberrypi:~$ uname -a
Linux raspberrypi 6.6.20+rpt-rpi-v8 #1 SMP PREEMPT Debian 1:6.6.20-1+rpt1 (2024-03-07) aarch64 GNU/Linux
neuberfran@raspberrypi:~$ uname -m
aarch64
U-Boot> printenv bootcmd
bootcmd=fatload mmc 0 ${kernel_addr_r} kernel8.img;fatload mmc 0 ${fdt_addr} ${fdtfile}; booti ${kernel_addr_r} - ${fdt_addr}
У меня есть rpi4 с Debian 12 (как указано выше), и я пытаюсь изменить bcm2711-rpi-4-b.dtb, начиная с команд ниже:
mkdir rasp_arm64
cd rasp_arm64/
git clone --depth=1 https://github.com/raspberrypi/linux
sudo apt-get install qemu-system-arm
sudo apt-get install lzop
sudo apt-get install gcc-aarch64-linux-gnu
cd linux/
make -j8 ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- mrproper
make -j8 ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- bcm2711_defconfig
make -j8 ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- Image modules dtbs
make -j8 ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- dtbs
ls -lha arch/arm64/boot/dts/broadcom/bcm2711-rpi-4-b.dtb
-rw-rw-r-- 1 neuuberfran neuuberfran 55K Jul 12 13:02 arch/arm64/boot/dts/broadcom/bcm2711-rpi-4-b.dtb
config.txt (file)
enable_uart=1
kernel=u-boot.bin
arm_64bit=1
git branch
master
* my6.6.20
У меня возникла проблема прямо в U-boot, описанная ниже:
2024.04-rc4-0004
0-gbd0aedde3e-dirty (Mar 23 2024 - 10:37:01 -0300)
DRAM: 948 MiB (effective 7.9 GiB)
RPI 4 Model B (0xd03115)
Core: 210 devices, 15 uclasses, devicetree: board
MMC: mmcnr@7e300000: 1, mmc@7e340000: 0
Loading Environment from FAT... OK
In: serial,usbkbd
Out: serial,vidconsole
Err: serial,vidconsole
Net: eth0: ethernet@7d580000
starting USB...
No working controllers found
Hit any key to stop autoboot: 0
9259827 bytes read in 413 ms (21.4 MiB/s)
Failed to load 'broadcom/bcm2711-rpi-4-b.dtb'
Uncompressing Kernel Image to 0
Moving Image from 0x80000 to 0x200000, end=1b60000
ERROR: Did not find a cmdline Flattened Device Tree
Could not find a valid device tree
Примечание.: https://forums.raspberrypi.com/viewtopic.php?t=314845 Аналогичная проблема, но в модуле CM4
Может кто-нибудь мне помочь?
@sawdust На SD-карте только один образ = ОС Raspberry Pi (64-битная), которую я взял с этого официального сайта =raspberrypi.com/software/operating-systems Я только что вынул SD-карту rpi4, вставляю мой компьютер, удалите прилагаемый к нему файл bcm2711-rpi-b.dtb и вставьте новый DTB (который я скомпилировал, как указано выше), который имеет почти такой же размер. Я вставил SD-карту обратно в rpi4 и получил ошибку. С SD-картой все в порядке. Как я уже говорил выше в теме, с оригинальным DTB работает нормально.
Еще раз: Что на SD-карте? Не ваше краткое описание, а полный список каталогов. Скорее всего, вам не хватает подкаталога broadcom
.
@sawdust Спасибо. Вы можете скачать его здесь: github.com/neuberfran/stackoverflow2
"Я просто... удаляю прилагаемый к нему bcm2711-rpi-b.dtb и вставляю новый DTB" - Так на какой файловой системе вы выполняли эти операции? Почему вы показываете нам содержимое файловой системы ext4? Согласно опубликованной вами переменной U-Boot bootcmd, файл dtb считывается из файловой системы FAT. Возможно, я не совсем ясно выразился, но разве первый раздел SD-карты, содержащий FAT, не является файловой системой, представляющей интерес при загрузке??? Сообщение об ошибке, которое вы получаете, не является сложной проблемой. Эта ошибка произошла из-за невнимательности.
@sawdust Всегда поясняю, что правильный вариант — bcm2711-rpi-4-b.dtb. Ошибка действительно очевидна = Не удалось найти допустимое дерево устройств. forums.raspberrypi.com/viewtopic.php?p=2236483#p2236483 Я не вижу другого решения, кроме как попробовать эти шаги на rpi4 (возможно, на rpi5) и посмотреть, появится ли ошибка.
Похоже, вы читаете только последнюю строку журнала U-Boot. Вместо этого вам нужно сосредоточиться на первом сообщении об ошибке (до того, как ошибка распространится), а именно Failed to load 'broadcom/bcm2711-rpi-4-b.dtb'
. Это ясное и простое указание на то, что вы сделали неправильно. Нет необходимости «чтобы кто-то попробовал эти шаги», поскольку решение состоит в том, чтобы просто скопировать файл .dtb в то же место, которое вы указали в переменной среды fdtfile. Еще раз: скорее всего, вам не хватает подкаталога broadcom
. Если бы вы выполнили команду U-Boot fatls
, это было бы очевидно.
@sawdust Тот же файл DTB в /boot/firmware находится в загрузочном разделе (fat32) на SD-карте. Я монтирую в /mnt. Я восстанавливаю свою SD-карту
Прежде всего, чтобы решить проблему, я воссоздал образ (с SSH, Wi-Fi и т. д.) для моего rpi4 8 ГБ с помощью приложения Imager (версия 1.8.5) в Ubuntu 20.04:
https://hechao.li/2021/12/20/Boot-Raspberry-Pi-4-Using-uboot-and-Initramfs/
кот << EOF > boot_cmd.txt fatload mmc 0:1 ${kernel_addr_r} Изображение setenv bootargs "8250.nr_uarts=1 console=ttyS0,115200 root=/dev/mmcblk0p2 rootwait rw" booti ${kernel_addr_r} - ${fdt_addr} ЭОФ
~/u-boot/tools/mkimage -A Arm64 -O linux -T скрипт -C нет -d boot_cmd.txt boot.scr
config.txt (больше cmdline.txt мне не нужен, я его удаляю)
1.enable_uart=1 2.arm_64bit=1 3.kernel=u-boot.bin 4.#dtoverlay=disable-bt
В раздел bootfs кладу файлы: config.txt, bcm2711-rpi-4-b.dtb (уже с необходимыми изменениями для RPMsg), Image, boot.scr и u-boot.bin.
Я вставляю SD-карту в rpi4 8 ГБ и получаю к ней доступ с помощью sudo picocom -b 115200 /dev/ttyUSB0:
Итак, очевидно, что у вас есть исходный код ядра на каком-то неопределенном хосте разработки и RPi. Вы собираете образ ядра и .dtb (на неопределенном хосте разработки), а затем пытаетесь загрузить RPi с SD-карты. Да! Какие файлы вы скопировали на SD карту??? Что находится на SD-карте при попытке загрузки??? Это важная информация, которую вы не предоставляете! Проверка работоспособности: размер вашего вновь созданного образа ядра составляет ровно 9259827 байт?