Терзаю образец загрузчика от Colibri, отличаются размеры SDRAM, NOR (шина 16 бит).
На данный момент процессор стартует из NOR флешки, но встает после запуска своей копии из SDRAM.
Конечно, первое, что приходит в голову - неправильно сконфигурирован контроллер SDRAM, но я его уже вдоль и поперек перекрутил, должно нормально работать, более того я вставил (в теле start.S) проверку первого слова скопированного масива (хотя может и не правильно это сделал), все нормально.
Особо не понятно, как u-boot узнает адрес самого загрузчика который надо копировать.
Вот "копирующая" часть Start.S:
Код
relocate: /* relocate U-Boot to RAM */
adr r0, _start /* r0 <- current position of code */
ldr r1, _TEXT_BASE /* test if we run from flash or RAM */
cmp r0, r1 /* don't reloc during debug */
beq stack_setup
ldr r2, _armboot_start
ldr r3, _bss_start
sub r2, r3, r2 /* r2 <- size of armboot */
add r2, r0, r2 /* r2 <- source end address */
copy_loop:
ldmia r0!, {r3-r10} /* copy from source address [r0] */
stmia r1!, {r3-r10} /* copy to target address [r1] */
cmp r0, r2 /* until source end addreee [r2] */
ble copy_loop
Насколько я это понимаю, из _bss_start копируется часть кода в _armboot_start, НО из MAP файла следует, что _bss_start это 0xa3f80048 а _armboot_start это 0xa3f80044 ???adr r0, _start /* r0 <- current position of code */
ldr r1, _TEXT_BASE /* test if we run from flash or RAM */
cmp r0, r1 /* don't reloc during debug */
beq stack_setup
ldr r2, _armboot_start
ldr r3, _bss_start
sub r2, r3, r2 /* r2 <- size of armboot */
add r2, r0, r2 /* r2 <- source end address */
copy_loop:
ldmia r0!, {r3-r10} /* copy from source address [r0] */
stmia r1!, {r3-r10} /* copy to target address [r1] */
cmp r0, r2 /* until source end addreee [r2] */
ble copy_loop
Полные файлы во вложении.