QEMU-2
Re: QEMU-2
Нихера. Примеры работают, наше не работает.
Re: QEMU-2
Пробовал также elf32-big, elf32-bigarm - всё пофигу. Пытался напустить на него objdump, но ничего непонятно. Те elf-ы, которые получаются из примеров, тоже странные.
Re: QEMU-2
Примерно так: запускаем qemu с доп. ключами -s -S
Создаём файл скрипта commands.gdb:
sudo apt install gdb-arm-none-eabi
И запускаем
Создаём файл скрипта commands.gdb:
Код: Выделить всё
target remote localhost:1234
file uartx01.elf
layout asm
И запускаем
Код: Выделить всё
arm-none-eabi-gdb -tui --command=commands.gdb
Re: QEMU-2
Синтетический elf из примера сначала начинает как попало скакать по адресам, но в конце концов как-то попадает на стартовый адрес. Я не понимаю, что это...
Выяснилось, что исходный elf содержит почти пустоту прямо до адреса 0x8000, за которым идёт последовательность 02 D9 A0 E3, соответствующая первой команде нашей программы.
В bin-файле, полученном с помощью objdump с урезанием символов, эта последовательность идёт прямо с начала файла (но QEMU это и не понимает)
В синтетическом elf-файле, полученном с помощью повторного,
команды идут сразу после заголовка elf-файла. Видимо, в консерватории надо что-то поменять? Хотя странно, почему же оно работает?
Выяснилось, что исходный elf содержит почти пустоту прямо до адреса 0x8000, за которым идёт последовательность 02 D9 A0 E3, соответствующая первой команде нашей программы.
Код: Выделить всё
$ arm-none-eabi-objdump -b binary -m arm_any -D /y/dw/uartx01/uartx01.bin
00000000 <.data>:
0: e3a0d902 mov sp, #32768 ; 0x8000
В синтетическом elf-файле, полученном с помощью повторного
Код: Выделить всё
arm-none-eabi-objcopy --input-target binary --output-target elf32-big uartx01.bin uartx01.elf3
команды идут сразу после заголовка elf-файла. Видимо, в консерватории надо что-то поменять? Хотя странно, почему же оно работает?
Re: QEMU-2
Нашёл скрипт, к-рый якобы ставит адрес куда надо.
Код: Выделить всё
#!/bin/sh
# Convert a raw binary image into an ELF file suitable for loading into a disassembler
#
# Usage: bin2elf input_binary_file output_elf_file base_address
set -xe
cat > raw$$.ld <<EOF
SECTIONS
{
EOF
echo " . = $3;" >> raw$$.ld
cat >> raw$$.ld <<EOF
.text : { *(.text) }
}
EOF
CROSS_PREFIX=arm-none-eabi-
${CROSS_PREFIX}ld -b binary -r -o raw$$.elf $1
${CROSS_PREFIX}objcopy --rename-section .data=.text \
--set-section-flags .data=alloc,code,load raw$$.elf
${CROSS_PREFIX}ld raw$$.elf -T raw$$.ld -o $2
${CROSS_PREFIX}strip -s $2
rm -rf raw$$.elf raw$$.ld
Re: QEMU-2
Код: Выделить всё
/y/bin2elf.sh /y/vb_share/jaos/coop-rpi-works-again/kernel7.img /y/vb_share/jaos/coop-rpi-works-again/kernel7.elf3 0x8000 && /y/qemu0/arm-softmmu/qemu-system-arm -M raspi2 -dtb /y/vb_share/2015-02-16-raspbian-wheezy/bcm2709-rpi-2-b.dtb -serial mon:stdio -kernel /y/vb_share/jaos/coop-rpi-works-again/kernel7.elf3
Re: QEMU-2
Просмотр стека - x/8 $sp
Re: QEMU-2
Обнаружилось отсутствие ATAGS. Здесь у mrvn написано:
https://forums.raspberrypi.com/viewtopic.php?t=195565
А раньше уже выяснилось, что QEMU считает, что если ему дали бинарный файл - то это линукс, а если elf - то нет. Мы раньше давали elf и ATAG-ов не было (не знаю уж, почему). Пробуем дать снова бинарный образ и обнаруживаем, что он грузится по адресу 0x10000, а не 0x8000. Видимо, самое простое здесь - это поправить QEMU, хотя сначала надо почитать вот это:At boot the Raspberry Pi firmware follows the old Linux boot protocol for ARM systems called ATAG. Optionally the boot-loader can use the newer device tree but that is not the default so lets ignore that for now.
https://forums.raspberrypi.com/viewtopic.php?t=195565
Re: QEMU-2
Поправил QEMU, теперь нужно брать исходники QEMU отсюда:
https://github.com/budden/qemu/commit/4 ... dc15c84840
Строчка для запуска теперь выглядит так:
Из неё ушёл параметр -dtb , и тогда QEMU создала ATAGS, A2 их подцепила и сумела инициализировать память. Однако дальше дело пока ничего не печатается - что-то где-то дальше идёт не так.
https://github.com/budden/qemu/commit/4 ... dc15c84840
Строчка для запуска теперь выглядит так:
Код: Выделить всё
/y/qemu0/arm-softmmu/qemu-system-arm -M raspi2 -serial mon:stdio -kernel /y/vb_share/jaos/coop-rpi-works-again/kernel7.img
Re: QEMU-2
А также нужно добавить -smp 4
Re: QEMU-2
Данная сказка закончилась в итоге хорошо, см. https://tvoygit.ru/budden/ja-o-s/src/br ... erry-pi.md