Мы пытаемся загрузить образ Linux в нашу DRAM в определенном месте, конечный адрес DRAM — 0x80000000, который мы узнали из журнала загрузки, в котором говорится, что «конечный адрес устройства памяти — 0x80000000». Мы загружаем наш образ по адресу «0x5000000». и до того, как этот раздел variuos в образе загружается по некоторому адресу, который больше, чем «0x80000000», например, снова из журналов загрузки
loading section to address 0xc5000000 from file position 0x1000, size is 0x5ac13e
Что означает «из позиции файла 0x1000» в строке выше.
первый загруженный раздел - это раздел .text, ниже приведен дамп изображения vmlinux заголовка раздела
[Nr] Name Type Addr Off Size ES Flg Lk Inf Al
[ 0] NULL 00000000 000000 000000 00 0 0 0
[ 1] .text PROGBITS c5000000 001000 5ac13e 00 AX 0 0 4096
[ 2] .notes NOTE c55ac140 5ad140 000168 00 AX 0 0 4
[ 3] __ex_table PROGBITS c55ac2b0 5ad2b0 000fe0 00 A 0 0 4
[ 4] .rodata PROGBITS c55ae000 5af000 20a930 00 A 0 0 64
[ 5] __bug_table PROGBITS c57b8930 7b9930 0075fc 00 A 0 0 1
[ 6] .pci_fixup PROGBITS c57bff2c 7c0f2c 001a90 00 A 0 0 4
[ 7] .builtin_fw PROGBITS c57c19bc 7c29bc 0000cc 00 A 0 0 4
Это довольно большой список, поэтому он не публиковал полный. Но здесь мы видим одну вещь: раздел .text больше, чем конечный адрес DRAM, поэтому изображение не должно быть загружено должным образом, хотя мы не получаем никаких ошибок после загрузки первого раздела, который он сохраняет. при загрузке других разделов но после этого сообщения зависает.
program load complete, entry point: 0x5000000, size: 0x92e7fc
Мой вопрос заключается в том, как я могу выровнять адреса этих разных разделов с нашим адресом DRAM. Здесь можно использовать утилиту objcopy для изменения адреса этих разных разделов.
Есть ли способ установить эти адреса разделов перед компиляцией?? Во-вторых, что может быть причиной завершения загрузки программы после зависания.