Понимание загрузочного адреса Linux для процесса U-Boot

Я пытаюсь понять встроенные принципы Linux и не могу определить адреса на выходе u-boot.

Например, у меня есть плата UDOO на базе процессора i.MX6 и я получил следующий результат от U-Boot:

U-Boot 2013.10-rc3 (Jan 20 2014 - 13:33:34)

CPU:   Freescale i.MX6Q rev1.2 at 792 MHz
Reset cause: POR
Board: UDOO
DRAM:  1 GiB
MMC:   FSL_SDHC: 0
No panel detected: default to LDB-WVGA
Display: LDB-WVGA (800x480)
In:    serial
Out:   serial
Err:   serial
Net:   using phy at 6
FEC [PRIME]
Warning: FEC MAC addresses don't match:
Address in SROM is         00:c0:08:88:a5:e6
Address in environment is  00:c0:08:88:9c:ce

Hit any key to stop autoboot:  0 
Booting from mmc ...
4788388 bytes read in 303 ms (15.1 MiB/s)
## Booting kernel from Legacy Image at 12000000 ...
   Image Name:   Linux-3.0.35
   Image Type:   ARM Linux Kernel Image (uncompressed)
   Data Size:    4788324 Bytes = 4.6 MiB
   Load Address: 10008000
   Entry Point:  10008000
   Verifying Checksum ... OK
   Loading Kernel Image ... OK

Starting kernel ...

Я не понимаю значение Load address 0x10008000. Согласно документации для этого конкретного процессора, в адресной зоне 0x10000000 - 0xffffffff отображается основная память. Но что такое смещение 0x8000? Я не могу понять причину этого значения.

Я также не понимаю адрес 0x12000000, откуда загружается образ ядра. Есть ли отображаемая область памяти для SD-карты?

Пожалуйста, дайте мне некоторое объяснение по этим адресам или даже лучше, некоторые ссылки на ресурсы по этой теме. Моя цель - научиться переносить u-boot и ядро ​​Linux на другие платы.

Спасибо!

Ответ 1

Если вы проверите переменные среды u-boot, вы увидите, что образ ядра копируется с загрузочного устройства в место RAM (здесь, 12000000) с помощью команды, например fatload.

Теперь это не LOADADDRESS. Вы даете LOADADDRESS командной строке при компиляции ядра. Этот адрес в основном имеет смещение 32 КБ от начала ОЗУ в физическом адресном пространстве процессора.

Ваша оперативная память отображается в 10000000, а ядро ​​LOADADDRESS - 10008000 (смещение 32K). Команда bootm распаковывает изображение ядра с адреса 12000000 на 10008000, а затем вызывает kernel entry point.

Ответ 2

проверьте папку include/configs. Он содержит все определения плат

i.MX uboot include/configs

Чтобы подключить uboot к другому порту, база на очень похожей плате и измените оттуда.