QEMU-2

Только технические вопросы по ЯОС и MINOS. Терминология и прочее - в других форумах.
Ответить

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

Re: QEMU-2

Сообщение БудДен » 03.11.21 12:48

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

/y/qemu/arm-softmmu/qemu-system-arm -M raspi2 -kernel /y/vb_share/jaos/coop-rpi-works-again/kernel7.img -dtb /y/vb_share/rpif/bcm2709-rpi-2-b.dtb -serial null -serial stdio
- всё ещё не работает, вроде уж всё сделал как надо. Видимо, нужно опять прогонять по одному простые примеры.

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

Re: QEMU-2

Сообщение БудДен » 03.11.21 12:52

Теперь попробую это: https://stackoverflow.com/questions/288 ... -2-on-qemu - "Ubuntu 16.04, QEMU 2.9.0 -M raspi2, Raspbian 2016-05-27, vanilla kernel" - правда, вызывает сомнение то, что другая дата распбиана.

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

Re: QEMU-2

Сообщение БудДен » 03.11.21 15:48

Действовал по этому ответу, дошёл до

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

/y/qemu/build/arm-softmmu/qemu-system-arm -M raspi2 -append "rw earlyprintk loglevel=8 console=ttyAMA0,115200 dwc_otg.lpm_enable=0 root=/dev/mmcblk0p2" -cpu arm1176 -dtb bcm2709-rpi-2-b.dtb -m 1G -smp 4 -serial stdio -kernel kernel7.img -sd /y/vb_share/2016-05-27-raspbian-jessie/2016-05-27-raspbian-jessie.img 
Говорит Ok, booting the kernel и на этом всё. То же для 2015-02-16-raspbian-wheezy

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

Re: QEMU-2

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

Нашёл ещё это

https://github.com/eggman/raspberrypi - не пробовал пока

И это - буду проверять.

https://blog.3mdeb.com/2015/2015-12-30- ... 2-in-qemu/

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

Re: QEMU-2

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

Сработало для нашего ядра, во всяком случае, начало загружаться, в консоль пишет лог загрузки, и на экране рисует малинки.

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

/y/qemu0/arm-softmmu/qemu-system-arm -M raspi2 -kernel kernel7.img -sd 2015-02-16-raspbian-wheezy.img -append "rw earlyprintk loglevel=8 console=ttyAMA0,115200 dwc_otg.lpm_enable=0 root=/dev/mmcblk0p2" -dtb bcm2709-rpi-2-b.dtb -serial stdio
Репозиторий в архиве (надо бы его сохранить, ибо обычная Qemu не работает в этой ситуации):

6bacb6e49a22469ac5ab516ecae9c5476b95da9c

(напоминаю, ОС - debian 9.4, на виртуалке под управлением Virtual Box 5.22.44 r139111)

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

Re: QEMU-2

Сообщение БудДен » 03.11.21 17:06

Но наши примеры не работают (dw/uart03)

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

Re: QEMU-2

Сообщение БудДен » 03.11.21 17:46

Здесь нашёл подсказку: https://stackoverflow.com/questions/605 ... art-output

Конечно, это какой-то мартышкин труд, надо бы системно учить все эти вещи. Но пока примеры так работают:

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

den73@deb8:/y/vb_share/2015-02-16-raspbian-wheezy$ /y/qemu0/arm-softmmu/qemu-system-arm -M raspi2 -kernel /y/dw/uart03/uart03.elf -dtb bcm2709-rpi-2-b.dtb -m 1024 -serial mon:stdio
den73@deb8:/y/vb_share/2015-02-16-raspbian-wheezy$ /y/qemu0/arm-softmmu/qemu-system-arm -M raspi2 -kernel /y/dw/uart03/uart03.elf -dtb bcm2709-rpi-2-b.dtb -m 1024 -serial null -serial mon:stdio

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

Re: QEMU-2

Сообщение БудДен » 03.11.21 17:49

А при этом если вместо elf подаём bin, то не работает.

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

Re: QEMU-2

Сообщение БудДен » 03.11.21 18:35

Поскольку раньше были эксперименты с попытками создавать elf из A2 были неудачны, попробуем превратить
наш bin обратно в elf

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

arm-none-eabi-objcopy --input-target=binary --output-target=elf32-little /y/dw/uart03/uart03.bin /y/dw/uart03/uart03.elf2

БудДен
Сообщения: 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

Ответить