LINUX.ORG.RU

U-Boot + FIT (Linux Kernel 4.19 + Device Tree Blob)

 , , ,


0

1

Здравствуйте.

Имеется устройство с процессором AT91SAM9G45 (ARM-архитектура). На нем установлен U-Boot версии 2010.09

Я пытаюсь скомпилировать и запустить на нем новейшее ядро Linux (по меньшей мере, версии не меньше 4.15).

Собственно, при попытке просто скомпилировать ядро, создать из него сжатый zImage и запустить на устройстве, вылезает ошибка

Error: unrecognized/unsupported machine ID (r1 = 0x000008a4).

Available machine support:

ID (hex)        NAME
ffffffff        Generic DT based system
ffffffff        Atmel AT91SAM9

Please check your kernel config and/or bootloader.
К слову говоря, zImage пишется в RAM-память устройства по адресу 0x72000000, а затем распаковывается на адрес 0x70000000, точка входа в kernel - 0x70008000.

Попытался загрузить ядро на устройстве другим образом, а именно с помощью Flattened Image Tree.

В FIT-изображение входит zImage ядра линукса и dtb-данные. Соответственно, я также загружаю FIT по адресу 0x72000000, он распаковывается на 0x70000000, находит конфигурацию в FIT Image, находит dtb в этой конфигурации, затем пытается запустить ядро и ядро виснет.

Анализ и дебаг кода ядра показал мне, что ядро пытается прочесть значение ячейки по адресу 0xc0000000 и определить, соответствует ли оно магическому числу 0xd00dfeed, которое означает dtb-данные.

В справке (https://www.kernel.org/doc/Documentation/devicetree/booting-without-of.txt) я прочел, что прошивка устройства передает ядру значение регистра r2, и ядро проверяет значение ячейки по адресу, записанному в регистре r2, равняется ли оно магическому числу 0xd00dfeed или значению ATAG_CORE (соответствующее старому способу загрузки).

Интересуют следующие вопросы:

1. Можно ли каким-нибудь образом повлиять на значение регистра r2, которое прошивка будет передавать ядру линукса? Данные dtb записаны обычно по адресу 0x7227ce0d или около того, и по этому адресу действительно находится число 0xd00dfeed. Но ядро проверяет почему-то по адресу 0xc0000000, и каким образом мне изменить этот адрес, непонятно.

2. Можно ли каким-нибудь образом повлиять на значение регистра r1? Это необходимо для первого способа загрузки ядра.

3. Можно ли в U-Boot каким-нибудь образом посмотреть текущие значения регистров r1 и r2? В списке команд U-Boot я ничего не нашел.


Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.