U-boot tftp ramdisk Bad Trap при загрузке больших rootfs

Я загружаю ядро ​​​​на своей плате с помощью образа виртуального диска u-boot, который составляет 39,8 МБ. Он успешно загружается. Когда я пробую другой образ u-boot размером 74,7 МБ, загрузите адрес виртуального диска и его предоставление

«Загрузка Ramdisk на ff8c0000, конец 03fffd63... Плохая ловушка на ПК: 7fef8cb0»

и плата зависает с сообщением '###ERROR ### Пожалуйста, СБРОСИТЕ плату ###'

Команды, которые я использую для загрузки с tftp:

tftp 30000000 uImage.bin
tftp 32000000 DTB.dtb
tftp 40000000 rootfs.ext2.gz.u-boot
bootm 30000000 40000000 32000000

Я также пробовал разные адреса tftp. Сценарий остается прежним.

Как я могу решить эту ситуацию?

Редактировать: Полный журнал консоли:

=> bootm 30000000 40000000 32000000 ВНИМАНИЕ: установка доступной памяти на 30000000

Загрузка ядра из образа Legacy по адресу 30000000...

Имя образа: Linux-4.19.26+gc0c2141

Тип образа: образ ядра PowerPC Linux (сжатый gzip)

Размер данных: 7140198 байт = 6,8 МБ

Адрес загрузки: 00000000

Точка входа: 00000000

Проверка контрольной суммы... ОК

Загрузка init Ramdisk из образа Legacy на 40000000...

Имя образа: core-image-x11-t1042d4rdb-64b-20

Тип образа: PowerPC Linux RAMDisk Image (несжатый)

Размер данных: 74710371 байт = 71,2 МБ

Адрес загрузки: 00000000

Точка входа: 00000000

Проверка контрольной суммы... ОК

Сглаженный большой двоичный объект дерева устройств по адресу 32000000

Загрузка с использованием большого двоичного объекта fdt по адресу 0x32000000

Распаковка образа ядра... ОК

Загрузка Ramdisk в ff8c0000, конец 03fffd63 ... Плохая ловушка на ПК: 7fef8cb0, SR: 0

NIP: 7FEF8CB0 XER: 20000000 LR: 7FF16C60 REGS: 7faedae0 TRAP: 0d00 DAR: FFFFEFFC

MSR: 00021200 EE: 0 PR: 0 FP: 0 ME: 1 IR/DR: 00

GPR00: 00000003 7FAEDBD0 7FAEDE98 FF8C0000 4073F038 0473FD60 FFFFF000 5E2AE23B GPR08: DE633873 00000020 00000001 7FAEDBE0 7FFCB808 08200800 7FAF52E8 00000000 GPR16: 00000000 00000000 306CF3A6 30000000 00000001 30000040 00000000 7FF957A8 GPR24: 7FAF533C 7FFCB6FC 7FFCB718 40000040 04000000 7FFCB6F8 7FF78540 0473FD63 Вызов трассировку: 7FFCB6F8 7FF176CC 7FF0D9D4 7FEFA26C 7FF1B088 7FF0BC44 7FF0BE08 7FF0C3B8 7FF1A664 7FF09CDC 7FF0CCC4 7FF4FF3C 7FF0D1D0 7FEF1040 Исключение в ПК ядра 7fef8cb0 сигнал 0

ОШИБКА ### Пожалуйста, ПЕРЕЗАГРУЗИТЕ плату ###


person Yusuf Altıparmak    schedule 06.01.2020    source источник
comment
Вы видите проблему в монтировании файлов? ядро загружается успешно? Адрес исполнения RAM-диска — ff8c0000. Этот адрес настроен вами? Этот адрес может переполнить 74,7 МБ файловой системы.   -  person Rajeshkumar    schedule 07.01.2020
comment
У меня возникает эта проблема, когда filesys монтируется в ОЗУ. Ядро загружается успешно, но на следующем шаге возникает эта ошибка. ff8c0000 дается автоматически. Да, наверное, это причина, но я не понимаю, почему. 39.8 filesys находится в другом месте. 74.7 находится по адресу ff8c0000. Как увеличить эту область памяти или изменить ff8c0000?   -  person Yusuf Altıparmak    schedule 07.01.2020
comment
можете ли вы изменить параметры загрузки ядра ramdisk_size= (единица измерения в КБ)   -  person Rajeshkumar    schedule 08.01.2020
comment
Увеличьте размер ramdisk_size до более чем 74,7 МБ.   -  person Rajeshkumar    schedule 08.01.2020
comment
Где находится переменная ramdisk_size? Согласно моим демонстрационным доскам doc. для rootfs в ни флэш-память составляет 43 МБ, возможно, они установили эту переменную на 64 МБ с максимальным значением. Возможно, увеличение его до 128 МБ работает.   -  person Yusuf Altıparmak    schedule 08.01.2020
comment
Либо мы можем внести изменения в файл «.config», либо мы можем добавить эту переменную в загрузочные параметры ядра во время выполнения. пример: ядро ​​/vmlinux ro root=LABEL=/ rhgb quiet ramdisk_size=131072   -  person Rajeshkumar    schedule 08.01.2020
comment
Hİ @Rajeshkumar, файл «.config» выглядит так; CONFIG_BLK_DEV_RAM=y CONFIG_BLK_DEV_RAM_COUNT=16 CONFIG_BLK_DEV_RAM_SIZE=131072   -  person Yusuf Altıparmak    schedule 09.01.2020
comment
Кажется, у меня уже разрешено 128 МБ в CONFIG_BLK_DEV_RAM_SIZE=131072.   -  person Yusuf Altıparmak    schedule 09.01.2020
comment
Похоже, что выполнение образа Linux перезаписывает часть места, где скопирован ваш файл initrd. Попробуйте изменить физическую память файла ramdisk. Также попробуйте использовать приведенную ниже переменную uboot setenv initrd_size ‹размер файла ramdisk›.   -  person Rajeshkumar    schedule 09.01.2020
comment
Что я понял до сих пор, так это то, что адрес в «Плохой ловушке на ПК: 7fef8cb0» 7fef8cb0 почти равен 1,998995945 ГБ, а начальный адрес Ramdisk кажется ff8c0000, что почти равно 3,992919922 ГБ. Почему U-boot выделяет так много памяти для образа RAM-диска ~70 МБ?   -  person Yusuf Altıparmak    schedule 10.01.2020
comment
И есть ли какая-либо переменная для изменения начального адреса initrd или uImage при запуске процесса загрузки?   -  person Yusuf Altıparmak    schedule 10.01.2020
comment
Можете ли вы вставить сюда свои аргументы загрузки ядра?   -  person Rajeshkumar    schedule 11.01.2020
comment
Привет @Rajeshkumar, эта проблема решается увеличением CONFIG_BLK_DEV_RAM_SIZE до 500000 вместо 131072   -  person Yusuf Altıparmak    schedule 18.02.2020
comment
Спасибо за информацию   -  person Rajeshkumar    schedule 19.02.2020


Ответы (2)


Вы загружаете образ ядра по адресу 0x30000000. После этого вы загружаете дерево устройств по адресу 0x30000000.

0x32000000 - 0x30000000 = 0x2000000 = 33554432

Таким образом, при загрузке дерева устройств вы перезаписываете образ ядра.

Если область между 0x3f000000 и 0x40000000 не используется иначе, выбор 0x3f000000 для дерева устройств должен решить вашу проблему.

person Xypron    schedule 07.01.2020
comment
Хм, но когда я пробую эти настройки с rootfs ~ 39 МБ, он загружается успешно. Какой в ​​этом смысл. - person Yusuf Altıparmak; 07.01.2020
comment
Видно, что в 39 мб вы еще и часть образа ядра перезаписываете. Если модифицированный код не используется, вы можете не сразу заметить ошибку. Решит ли изменение адреса вашу первоначальную проблему? - person Xypron; 09.01.2020
comment
Здравствуйте, нет, это еще не изменило исходную проблему. Между адресами ff8c0000 и 03fffd63, ff8c0000-03fffd63 не больше ~79 МБ. Я все еще не мог понять, почему возникает плохая ловушка. - person Yusuf Altıparmak; 09.01.2020

Насколько я понял, адрес в

«Плохая ловушка на ПК: 7fef8cb0»

7fef8cb0 почти равен 1,998995945 ГБ, а начальный адрес Ramdisk выглядит как ff8c0000, что почти равно 3,992919922 ГБ.

Почему U-boot выделяет так много памяти для образа RAM-диска ~70 МБ?

person Yusuf Altıparmak    schedule 09.01.2020