Я использовал следующую команду для создания полезной нагрузки OpenSbi и ядра Linux: < /p>
make PLATFORM=generic FW_FDT_PATH=$WORKLOAD_BUILD_ENV_HOME/dts/build/xiangshan.dtb FW_PAYLOAD_PATH=$RISCV_LINUX_HOME/arch/riscv/boot/Image
< /code>
После получения fw_payload.bin я написал простую инструкцию перехода для загрузки полезных данных OpenSBI и перехода в новое местоположение по адресу 0x80100000. Переход осуществляется с помощью базовой инструкции перехода по адресу 0x80100000, после чего ядро должно продолжить выполнение fw_payload.bin.
Однако при запуске этого на эмуляторе я вижу только Вывод OpenSBI, но не вывод ядра. Если я напрямую запускаю fw_payload.bin, он работает как положено и ядро работает нормально.
В чем может быть причина такого несоответствия? Почему ядро не работает должным образом после перехода на 0x80100000, но работает нормально, когда полезная нагрузка выполняется напрямую?
Вот мой linker.lds и логика перехода:
OUTPUT_ARCH( "riscv" )
ENTRY( jump_payload )
SECTIONS
{
. = ALIGN(4);
begin = .;
.header.code :
{
*(.header.code)
}
end = .;
. = begin + 0x100000;
.payload :
{
PROVIDE(_payload_start = .);
*(.payload)
. = ALIGN(8);
PROVIDE(_payload_end = .);
}
< /code>
.section ".header.code", "ax", %progbits
.globl jump_payload
jump_payload:
li t0, 0x80100000
jr t0
add t0, x0,x0
.section ".payload", "ax", %progbits
.align 4
.global payload_bin
payload_bin:
.incbin PAYLOAD_PATH
Подробнее здесь: https://stackoverflow.com/questions/793 ... to-a-new-l
Почему мое ядро Linux с OpenSBI не загружается правильно при переходе на новый нагрузочный адрес (0x80100000) ⇐ Linux
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
Как установить аргумент командной строки ядра OpenSBI с помощью Buildroot
Anonymous » » в форуме Linux - 0 Ответы
- 18 Просмотры
-
Последнее сообщение Anonymous
-