2014-01-22 3 views
0

Я пытаюсь получить автономное приложение для запуска U-Boot.U-Boot: сбои приложений - но почему

Цель - кирпич LEGO EV3 - он имеет процессор TI OMAP (ARM9).

Выход U-Boot, прежде чем висит это:

U-Boot > fatload mmc 0:1 c0007FC0 uimage 
reading uimage 

384 bytes read 
U-Boot > bootm 
## Booting kernel from Legacy Image at c0007fc0 ... 
    Image Name: ITK EV3 sample OS 
    Image Type: ARM Linux Standalone Program (uncompressed) 
    Data Size: 320 Bytes = 0.3 kB 
    Load Address: c0008000 
    Entry Point: c0008000 
    Loading Standalone Program ... OK 
OK 

Я попытался следующие команды, которые будут расположены по адресу 0xC0008000 в "uimage":

mov pc, lr (ARM code) 
bx lr (ARM code) 
bx lr (Thumb code) 

Эти команды должны просто вернуться (в зависимости от режима ARM или Thumb). Однако все три команды приводят к тому, что U-Boot висит, поэтому после последнего «ОК» больше не выводится.

Почему U-Boot висит?

+1

В U-Boot «автономный» означает двоичное изображение, например пример «hello_world.bin». Такие загруженные двоичные файлы выполняются командой 'go'. Загруженные изображения/файлы, выполненные с использованием команды 'bootm', должны иметь установленную U-Boot-оболочку, обычно это ядра ОС и могут иметь специальную обработку, выполняемую до выполнения. См. [This] (http://stackoverflow.com/questions/15340089/how-to-run-custom-kernel-on-beaglebone/15375308#15375308). ** Вместо указания 'linux' в качестве типа ОС в команде mkimage попробуйте указать' u-boot' или просто опустить спецификацию ОС. ** – sawdust

ответ

3

Я узнал ответ сам:

В версии U-Boot используется на кирпиче EV3 есть ошибка: Начальный адрес, который уже преобразуется в прямой порядок байтов преобразуется дважды так результат - конечно - неправильный.

Сохраняя номер Little Endian в файле вывода U-Boot будет неправильно:

Image Type: ARM Linux Standalone Program (uncompressed) 
    Data Size: 320 Bytes = 0.3 kB 
    Load Address: c0008000 
    Entry Point: 008000c0    <--- actually 0xC0008000!!! 
    Loading Standalone Program ... OK 
OK 
U-Boot > 

однако загрузка будет работать. Эта ошибка затрагивает только автономные программы, а не ядра Linux.

Моя проблема заключается в том, что программа, возможно, будет опубликована, поэтому она должна работать как с ошибками, так и с исправленными ошибками версиями u-boot.

Поэтому я думаю о загрузке программы в адрес как

0xC00101C0 

, которая хранится больших и маленьких Endian таким же образом.

Смежные вопросы