QEMU-2
Re: QEMU-2
Код: Выделить всё
/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
Re: QEMU-2
Теперь попробую это: https://stackoverflow.com/questions/288 ... -2-on-qemu - "Ubuntu 16.04, QEMU 2.9.0 -M raspi2, Raspbian 2016-05-27, vanilla kernel" - правда, вызывает сомнение то, что другая дата распбиана.
Re: QEMU-2
Действовал по этому ответу, дошёл до
Говорит Ok, booting the kernel и на этом всё. То же для 2015-02-16-raspbian-wheezy
Код: Выделить всё
/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
Re: QEMU-2
Нашёл ещё это
https://github.com/eggman/raspberrypi - не пробовал пока
И это - буду проверять.
https://blog.3mdeb.com/2015/2015-12-30- ... 2-in-qemu/
https://github.com/eggman/raspberrypi - не пробовал пока
И это - буду проверять.
https://blog.3mdeb.com/2015/2015-12-30- ... 2-in-qemu/
Re: QEMU-2
Сработало для нашего ядра, во всяком случае, начало загружаться, в консоль пишет лог загрузки, и на экране рисует малинки.
Репозиторий в архиве (надо бы его сохранить, ибо обычная Qemu не работает в этой ситуации):
6bacb6e49a22469ac5ab516ecae9c5476b95da9c
(напоминаю, ОС - debian 9.4, на виртуалке под управлением Virtual Box 5.22.44 r139111)
Код: Выделить всё
/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
6bacb6e49a22469ac5ab516ecae9c5476b95da9c
(напоминаю, ОС - debian 9.4, на виртуалке под управлением Virtual Box 5.22.44 r139111)
Re: QEMU-2
Но наши примеры не работают (dw/uart03)
Re: QEMU-2
Здесь нашёл подсказку: 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
Re: QEMU-2
А при этом если вместо elf подаём bin, то не работает.
Re: QEMU-2
Поскольку раньше были эксперименты с попытками создавать elf из A2 были неудачны, попробуем превратить
наш bin обратно в elf
наш bin обратно в elf
Код: Выделить всё
arm-none-eabi-objcopy --input-target=binary --output-target=elf32-little /y/dw/uart03/uart03.bin /y/dw/uart03/uart03.elf2
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