QEMU-2

Только технические вопросы по ЯОС и MINOS. Терминология и прочее - в других форумах.
Ответить
БудДен
Сообщения: 2839
Зарегистрирован: 07.10.18 14:01

Re: QEMU-2

Сообщение БудДен » 03.11.21 19:05

Нихера. Примеры работают, наше не работает.

БудДен
Сообщения: 2839
Зарегистрирован: 07.10.18 14:01

Re: QEMU-2

Сообщение БудДен » 03.11.21 21:03

Пробовал также elf32-big, elf32-bigarm - всё пофигу. Пытался напустить на него objdump, но ничего непонятно. Те elf-ы, которые получаются из примеров, тоже странные.

БудДен
Сообщения: 2839
Зарегистрирован: 07.10.18 14:01

Re: QEMU-2

Сообщение БудДен » 03.11.21 21:45

Примерно так: запускаем qemu с доп. ключами -s -S

Создаём файл скрипта commands.gdb:

Код: Выделить всё

target remote localhost:1234
file uartx01.elf
layout asm
sudo apt install gdb-arm-none-eabi

И запускаем

Код: Выделить всё

arm-none-eabi-gdb -tui --command=commands.gdb

БудДен
Сообщения: 2839
Зарегистрирован: 07.10.18 14:01

Re: QEMU-2

Сообщение БудДен » 03.11.21 22:16

Синтетический 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
В bin-файле, полученном с помощью objdump с урезанием символов, эта последовательность идёт прямо с начала файла (но QEMU это и не понимает)

В синтетическом elf-файле, полученном с помощью повторного

Код: Выделить всё

arm-none-eabi-objcopy --input-target binary --output-target elf32-big uartx01.bin uartx01.elf3
,
команды идут сразу после заголовка elf-файла. Видимо, в консерватории надо что-то поменять? Хотя странно, почему же оно работает?

БудДен
Сообщения: 2839
Зарегистрирован: 07.10.18 14:01

Re: QEMU-2

Сообщение БудДен » 03.11.21 23:55

Нашёл скрипт, к-рый якобы ставит адрес куда надо.

Код: Выделить всё

#!/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

БудДен
Сообщения: 2839
Зарегистрирован: 07.10.18 14:01

Re: QEMU-2

Сообщение БудДен » 04.11.21 01:24

Код: Выделить всё

/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

БудДен
Сообщения: 2839
Зарегистрирован: 07.10.18 14:01

Re: QEMU-2

Сообщение БудДен » 04.11.21 12:40

Просмотр стека - x/8 $sp

БудДен
Сообщения: 2839
Зарегистрирован: 07.10.18 14:01

Re: QEMU-2

Сообщение БудДен » 04.11.21 13:29

Обнаружилось отсутствие ATAGS. Здесь у mrvn написано:
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.
А раньше уже выяснилось, что QEMU считает, что если ему дали бинарный файл - то это линукс, а если elf - то нет. Мы раньше давали elf и ATAG-ов не было (не знаю уж, почему). Пробуем дать снова бинарный образ и обнаруживаем, что он грузится по адресу 0x10000, а не 0x8000. Видимо, самое простое здесь - это поправить QEMU, хотя сначала надо почитать вот это:

https://forums.raspberrypi.com/viewtopic.php?t=195565

БудДен
Сообщения: 2839
Зарегистрирован: 07.10.18 14:01

Re: QEMU-2

Сообщение БудДен » 04.11.21 13:56

Поправил QEMU, теперь нужно брать исходники QEMU отсюда:

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 
Из неё ушёл параметр -dtb , и тогда QEMU создала ATAGS, A2 их подцепила и сумела инициализировать память. Однако дальше дело пока ничего не печатается - что-то где-то дальше идёт не так.

БудДен
Сообщения: 2839
Зарегистрирован: 07.10.18 14:01

Re: QEMU-2

Сообщение БудДен » 04.11.21 15:37

А также нужно добавить -smp 4

БудДен
Сообщения: 2839
Зарегистрирован: 07.10.18 14:01

Re: QEMU-2

Сообщение БудДен » 27.03.22 15:41

Данная сказка закончилась в итоге хорошо, см. https://tvoygit.ru/budden/ja-o-s/src/br ... erry-pi.md

Ответить