Как загружается Barebox для Beaglebone Black?

#bootloader

#загрузчик

Вопрос:

Я хочу знать пошаговую последовательность загрузки Barebox для Beaglebone Black. какая функция будет выполняться первой, чтобы передать управление ядру?

Ответ №1:

Я бы рекомендовал вам сначала проверить эту презентацию. На стр. 3 и 4 показана последовательность загрузки на рисунке.

Если вы хотите получить двоичный файл barebox для платы Beaglebone, вы должны включить ‘CONFIG_MACH_BEAGLEBONE’.

В файле ‘images /Makefile.am33xx’ вы найдете функцию ввода с именем ‘start_am33xx_beaglebone_sdram’ для этого параметра конфигурации (SDRAM)

 pblx-$(CONFIG_MACH_BEAGLEBONE)  = start_am33xx_beaglebone_sdram
FILE_barebox-am33xx-beaglebone.img = start_am33xx_beaglebone_sdram.pblx
am33xx-barebox-$(CONFIG_MACH_BEAGLEBONE)  = barebox-am33xx-beaglebone.img
 

Эта функция ввода является «первым шагом» (инициализация HW низкого уровня), определенным в файле ‘arch / arm / boards / beaglebone / lowlevel.c’.

Тогда цепочка вызовов выглядит как ‘barebox_arm_entry’ (‘arch / arm / include/asm / barebox-arm.h’) -> ‘barebox_ * _pbl_start’ (‘arch/ arm / cpu/entry.c’) -> …

Затем будут вызываться вызовы инициализации

 #define core_initcall(fn)       __define_initcall("1",fn,1)
#define postcore_initcall(fn)       __define_initcall("2",fn,2)
#define console_initcall(fn)        __define_initcall("3",fn,3)
#define postconsole_initcall(fn)    __define_initcall("4",fn,4)
#define mem_initcall(fn)        __define_initcall("5",fn,5)
#define mmu_initcall(fn)        __define_initcall("6",fn,6)
#define postmmu_initcall(fn)        __define_initcall("7",fn,7)
#define coredevice_initcall(fn)     __define_initcall("8",fn,8)
#define fs_initcall(fn)         __define_initcall("9",fn,9)
#define device_initcall(fn)     __define_initcall("10",fn,10)
#define crypto_initcall(fn)     __define_initcall("11",fn,11)
#define of_populate_initcall(fn)    __define_initcall("12",fn,12)
#define late_initcall(fn)       __define_initcall("13",fn,13)
#define environment_initcall(fn)    __define_initcall("14",fn,14)
#define postenvironment_initcall(fn)    __define_initcall("15",fn,15)
 

Посмотрите эти определения.

Последние вызовы инициализации (среды) загружают среду и запускают сценарии инициализации. С помощью команд boot / bootm/ .. barebox вы можете загрузить ‘zImage’, ‘dtb’, ‘initrd’ и передать аргументы командной строки для ядра Linux.