Здравствуйте.
Имеется устройство с процессором 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.
Попытался загрузить ядро на устройстве другим образом, а именно с помощью 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 я ничего не нашел.