Эмуляция Zynq

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

Эмуляция Zynq

Сообщение БудДен » 07.11.22 15:46

Оценка хода и достижений в деле переноса основной версии ЯОС на RPi показывает, что дело плохо. Возможно, ещё вырулим - ближайшее время это покажет. Но одновременно начинаю искать другие возможности. В частности, начинаю собирать сведения об эмуляции Zynq.

https://www.xilinx.com/video/soc/runnin ... -line.html - тут, якобы можно эмулировать Zynq с кучей устройств. Верится очень слабо, конечно. Но надо попробовать.

Брекпойнт на значение lr:

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

tb *$lr
Последний раз редактировалось БудДен 10.11.22 17:41, всего редактировалось 1 раз.

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

Re: Эмуляция Zynq

Сообщение БудДен » 07.11.22 17:24

* стрёмный пример с сетью, но описана сборка эмулятора от Xilinx: https://embed-me.com/qemu-how-to-emulat ... zynq-7000/ -

* ключи командной строки для эмулятора от Xilinx: https://docs.xilinx.com/r/en-US/ug1393- ... s-for-QEMU

https://xilinx-wiki.atlassian.net/wiki/ ... loWorld%22 - примеры командной строки для qemu, например, такая:

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

qemu-system-aarch64 \
-M arm-generic-fdt-7series \
-machine linux=on \
-serial /dev/null -serial mon:stdio \
-display none \
-kernel <guest image path> \
-dtb <Zynq7000 DTB path> \
-m <DDR memory size> \
-device loader,addr=0xf8000008,data=0xDF0D,data-len=4 \
-device loader,addr=0xf8000140,data=0x00500801,data-len=4 \
-device loader,addr=0xf800012c,data=0x1ed044d,data-len=4 \
-device loader,addr=0xf8000108,data=0x0001e008,data-len=4 \
-device loader,addr=0xf8000910,data=0x0000000F,data-len=4
Последний раз редактировалось БудДен 08.11.22 01:17, всего редактировалось 3 раза.

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

Re: Эмуляция Zynq

Сообщение БудДен » 07.11.22 20:27

https://www.hackster.io/whitney-knitter ... 1-2-749cd4 - это про Vitis, не подходит.

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

Re: Эмуляция Zynq

Сообщение БудДен » 08.11.22 01:15

Вот здесь чел пытался подсунуть образ вместо ядра, правда, это был линукс и вряд ли ARM.

https://stackoverflow.com/questions/635 ... nux-kernel

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

Re: Эмуляция Zynq

Сообщение БудДен » 08.11.22 19:39

В pdf на странице 202 примеры команды qemu, во всяком случае, её фрагмента, где передаётся образ флешки в формате qcow

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

Re: Эмуляция Zynq

Сообщение БудДен » 08.11.22 23:32

Образ конвертировал в qcow2 и попытался проверить. Одна партиция нормально конвертировалась, про остальные сложнее сказать (наверное, они в формате оберон?)

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

qemu-img convert -f raw -O qcow2 /y/jaos/Linux64/work/build/ZyboZ710.ZynqA2.img /e/ea2/ZyboZ710.ZynqA2.qcow2
Последний раз редактировалось БудДен 10.11.22 17:10, всего редактировалось 1 раз.

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

Re: Эмуляция Zynq

Сообщение БудДен » 09.11.22 00:20

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

den@d18:/y/jaos/Linux64/work/build$ qemu-img convert -f raw -O qcow2 ZyboZ710.ZynqA2.img /e/ea2/ZyboZ710.ZynqA2.qcow2
den@d18:/y/jaos/Linux64/work/build$ sudo modprobe nbd max_part=8
den@d18:/y/jaos/Linux64/work/build$ sudo qemu-nbd --connect=/dev/nbd0 /e/ea2/ZyboZ710.ZynqA2.qcow2 
den@d18:/y/jaos/Linux64/work/build$ cd /e/ea2
den@d18:/e/ea2$ mkdir check-mount
den@d18:/e/ea2$ cd check-mount/
den@d18:/e/ea2/check-mount$ mkdir p1; mkdir p2; mkdir p3
den@d18:/e/ea2/check-mount$ sudo mount /dev/nbd
nbd0    nbd0p2  nbd1    nbd11   nbd13   nbd15   nbd3    nbd5    nbd7    nbd9    
nbd0p1  nbd0p3  nbd10   nbd12   nbd14   nbd2    nbd4    nbd6    nbd8    
den@d18:/e/ea2/check-mount$ sudo mount /dev/nbd0p1 p1
den@d18:/e/ea2/check-mount$ sudo mount /dev/nbd0p2 p2
mount: /e/ea2/check-mount/p2: wrong fs type, bad option, bad superblock on /dev/nbd0p2, missing codepage or helper program, or other error.
den@d18:/e/ea2/check-mount$ sudo mount /dev/nbd0p3 p3
mount: /e/ea2/check-mount/p3: wrong fs type, bad option, bad superblock on /dev/nbd0p3, missing codepage or helper program, or other error.
den@d18:/e/ea2/check-mount$ ls p1
BOOT.BIN
den@d18:/e/ea2/check-mount$ sudo fdisk /dev/nbd0 -l
Диск /dev/nbd0: 400 MiB, 419430400 байт, 819200 секторов
Единицы: секторов по 1 * 512 = 512 байт
Размер сектора (логический/физический): 512 байт / 512 байт
Размер I/O (минимальный/оптимальный): 512 байт / 512 байт
Тип метки диска: dos
Идентификатор диска: 0x0d670d66

Устр-во     Загрузочный начало  Конец Секторы Размер Идентификатор Тип
/dev/nbd0p1                 63 132047  131985  64,5M             b W95 FAT32
/dev/nbd0p2             132048 264095  132048  64,5M            4c неизвестный
/dev/nbd0p3             264096 789263  525168 256,4M            4c неизвестный
sudo umount /dev/nbd0p1
sudo qemu-nbd --disconnect /dev/nbd0

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

Re: Эмуляция Zynq

Сообщение БудДен » 09.11.22 11:11

Скачал

https://github.com/Xilinx/linux-xlnx

Там нашёл по слову zybo или Zybo нужный dts файл. Из него надо сделать dtc, это делается согласно этому ответу:

https://stackoverflow.com/questions/285 ... input-tree

Сначала собираем в отдельной директории все зависимости и убираем угловые скобки.
Затем устанавливаем dtc, в случае убунты это

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

sudo apt install device-tree-compiler
Затем заходим в нашу директорию

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

IDE=zynq-zybo-z7
SRC=$IDE.dts
TMP=$IDE.tmp.dts
DST=$IDE.dtb

cpp -nostdinc -I include -undef -x assembler-with-cpp $SRC > $TMP
dtc -O dtb -b 0 -o $DST $TMP
rm $TMP

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

Re: Эмуляция Zynq

Сообщение БудДен » 09.11.22 13:27

Не могу понять, что есть что в dts. Читаю вот это:

https://wikihandbk.com/wiki/Raspberry_P ... таксис_DTS

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

Re: Эмуляция Zynq

Сообщение БудДен » 09.11.22 18:58

Проверил образ на железке - работает. Под линуксом понадобилось putty и читать хвост dmesg, чтобы увидеть, как _после_ включения железки появился порт /dev/ttyUSB1. Кроме того, putty нужно запускать под sudo.

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

Re: Эмуляция Zynq

Сообщение БудДен » 09.11.22 21:13

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

# https://support.xilinx.com/s/question/0D52E00006hpQ3eSAE/petalinux-qemu-sd-card-boot-with-ext4-root-fs?language=en_US
qemu-system-aarch64 -M arm-generic-fdt-7series \
-serial /dev/null -serial mon:stdio \
-display none \
-dtb /e/xlnx-dtb/zynq-zybo-z7.dtb  \
-device loader,addr=0xf8000008,data=0xDF0D,data-len=4 \
-device loader,addr=0xf8000140,data=0x00500801,data-len=4 \
-device loader,addr=0xf800012c,data=0x1ed044d,data-len=4 \
-device loader,addr=0xf8000108,data=0x0001e008,data-len=4 \
-device loader,addr=0xF8000910,data=0xF,data-len=0x4  \
-drive file=/e/ea2/ZyboZ710.ZynqA2.qcow2,if=sd,format=raw   \
-device loader,file=/y/jaos/Linux64/work/Zbl.Bin,addr=0x0 \
-boot mode=3 -drive index=0 \
-S -s
Похоже, я верно разместил начальный Zbl.Bin от 0. Теперь пытаемся понять, как перейти в другой тред и продолжить его шагать.

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

Re: Эмуляция Zynq

Сообщение БудДен » 09.11.22 21:35

ИЛи надо BOOT.Bin подсовывать? Сначала вроде всё норм, но потом управление передаётся куда-то в туман.
Линковка выдаёт что-то не совсем внятное:

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

module Platform key: FE0CD7B4E
modEntry =0
    loading Platform   132 00000070 0000007C 0000007C
module Board key: FC944B1A2
modEntry =0
    loading Board    28 00000100 00000100 00000100
module TclInit key: FB899AD06
modEntry =0
    loading TclInit    28 0000011C 0000011C 0000011C
module ZynqInitializer key: FE84042B4
modEntry =0
    loading ZynqInitializer 10636 00000138 00000138 00000138
module FPE64 key: FC40CBAA4
modEntry =0
    loading FPE64  8224 00002AC4 00002AC4 00002AC4
module Builtins key: 01B87C79F
modEntry =0
    loading Builtins  8548 00004AE4 00004AE4 00004AE4
module PsUartMin key: 02EF1FDBF
modEntry =0
    loading PsUartMin  3312 00006C48 00006C58 00006C58
module Trace key: 05F97A620
modEntry =0
    loading Trace  5884 00007948 00007950 00007950
module TraceDevice key: FD42C9F61
modEntry =0
    loading TraceDevice   512 0000904C 00009050 00009050
module Caches key: 073D47F79
modEntry =0
    loading Caches  1580 00009250 00009250 00009250
module Memory key: FEFCB8E6A
modEntry =0
    loading Memory  1852 0000987C 00009888 00009888
module MemoryMapping key: 063660879
modEntry =0
    loading MemoryMapping   360 00009FC4 00009FC4 00009FC4
module Interrupts key: 04BA0C495
modEntry =0
    loading Interrupts  6260 0000A12C 0000C144 0000C144
module Bit key: FB69894EB
modEntry =0
    loading Bit  2120 0000D9B8 0000D9B8 0000D9B8
module Clocks key: FD17E6585
modEntry =0
    loading Clocks   692 0000E200 0000E220 0000E220
module KernelUtils key: FBE9A78FC
modEntry =0
    loading KernelUtils   996 0000E4D4 0000E4D8 0000E4D8
module GlobalTimer key: FF0DE6C5E
modEntry =0
    loading GlobalTimer  1864 0000E8BC 0000E8BC 0000E8BC
module Kernel key: 04D18946E
modEntry =0
    loading Kernel  1500 0000F004 0000F394 0000F394
module Utils key: FD31E4701
modEntry =0
    loading Utils   144 0000F970 0000F970 0000F970
module Strings key: F9A0D453A
modEntry =0
    loading Strings  8712 0000FA00 0000FA00 0000FA00
module Heaps key: FF5BA1618
modEntry =0
    loading Heaps  2360 00011C08 00011C14 00011C14
module OFS key: F89EB6595
modEntry =0
    loading OFS 43428 0001254C 000135EC 000135EC
module Modules key: 000C80C35
modEntry =0
    loading Modules  4788 0001DF90 0001DFB8 0001DFB8
module SdEnvironment key: FF1CB22B0
modEntry =0
    loading SdEnvironment  1752 0001F26C 0001F2A8 0001F2A8
module Sd key: F9C915D8A
modEntry =0
    loading Sd 30492 0001F980 0001F9C4 0001F9C4
module Disks key: FEC7E25EB
modEntry =0
    loading Disks  4384 000270E0 000270E4 000270E4
module SdDisks key: FEA59A5C2
modEntry =0
    loading SdDisks  5116 00028204 0002820C 0002820C
module SdControllers key: 052F4C277
modEntry =0
    loading SdControllers  1516 00029608 00029610 00029610
module OFSDiskVolumes key: 060606776
modEntry =0
    loading OFSDiskVolumes  5212 00029BFC 00029DFC 00029DFC
module Bootstrap key: 03D452385
modEntry =0
    loading Bootstrap   676 0002B258 0002B264 0002B264
Wrote image file Zbl.Bin
Output file length =181508 First entry at 00000007C
Creating Zynq BootROM image...Copied 181508/181508B.
 done

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

Re: Эмуляция Zynq

Сообщение БудДен » 09.11.22 22:31

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

qemu-system-aarch64 -M arm-generic-fdt-7series \
-serial /dev/null -serial mon:stdio \
-display none \
-dtb /e/xlnx-dtb/zynq-zybo-z7.dtb  \
-device loader,addr=0xf8000008,data=0xDF0D,data-len=4 \
-device loader,addr=0xf8000140,data=0x00500801,data-len=4 \
-device loader,addr=0xf800012c,data=0x1ed044d,data-len=4 \
-device loader,addr=0xf8000108,data=0x0001e008,data-len=4 \
-device loader,addr=0xF8000910,data=0xF,data-len=0x4  \
-drive file=/e/ea2/ZyboZ710.ZynqA2.qcow2,if=sd,format=raw   \
-device loader,file=/y/jaos/Linux64/work/Zbl.Bin,addr=0x0 \
-boot mode=3 -drive index=0 \
-S -s
Уж не знаю, отличается ли эта строка от прошлой, но попробую, что ли, Init.Bin?

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

Re: Эмуляция Zynq

Сообщение БудДен » 16.11.22 23:13

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

Тело MINOS:/hal/zynq/SDControllers
  SdEnvironment.Enable
    NEW(hc0 (* типа Sd.HostController, просто запись*));
    Sd.InitHostController(hc0, ..., ..., );

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

Re: Эмуляция Zynq

Сообщение БудДен » 17.11.22 00:49

И тут начинается непонятное в SD.Mod/HcRegisters. Прежде всего, неясна сама структура, Вроде она примерно соовтетствует Register Capabilities, но как-то не совсем.

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

Re: Эмуляция Zynq

Сообщение БудДен » 17.11.22 19:50

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

den@d18:/e$ fdisk -l /y/jaos/Linux64/work/build/ZyboZ710.ZynqA2.img 
Диск /y/jaos/Linux64/work/build/ZyboZ710.ZynqA2.img: 400 MiB, 419430400 байт, 819200 секторов
Размер сектора (логический/физический): 512 байт / 512 байт

Устр-во                                         Загрузочный начало  Конец Секторы Размер Идентификатор Тип
/y/jaos/Linux64/work/build/ZyboZ710.ZynqA2.img1                 63 132047  131985  64,5M             b W95 FAT32
/y/jaos/Linux64/work/build/ZyboZ710.ZynqA2.img2             132048 264095  132048  64,5M            4c неизвестный
/y/jaos/Linux64/work/build/ZyboZ710.ZynqA2.img3             264096 789263  525168 256,4M            4c неизвестный
$ python3 -c 'print(hex(512 * 132048), "номер сектора: ",hex(132048))'
0x407a000 номер сектора:  0x203d0
$ python3 -c 'print(hex(512 * 264096), "номер сектора: ",hex(264096))'
0x80f4000 номер сектора:  0x407a0

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

Re: Эмуляция Zynq

Сообщение БудДен » 17.11.22 23:51

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

/y/jaos/ARM/zbl/OFSDiskVolumes.Mos/New - инициализация SD-карты
  InitVol - инициализация тома
  GetOberonFs - читает заголовок обероновой партиции (пока неудачно)

/y/jaos/ARM/Minos/SdDisks.Mos/InitBlockDevice - здесь ставится размер буфера
  Read - отвечает за чтение с карты блоков (не знает о размере сектора).

SD.Mod/Read - собственно читает сектора.
Последний раз редактировалось БудДен 19.11.22 23:48, всего редактировалось 1 раз.

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

Re: Эмуляция Zynq

Сообщение БудДен » 19.11.22 23:02

Пытаюсь собрать QEMU с трассировкой и, заодно уж, сразу с отладкой:

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

../configure --enable-trace-backends=simple --target-list=aarch64-softmmu --enable-debug 
См. docs/devel/tracing и https://stackoverflow.com/questions/468 ... u-with-gdb

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

/e/run$ cat /e/run/tracing-events.txt 
sdcard_read_block
sdcard_set_blocklen
sdcard_reset
/e/run/qemu.4.source:

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

qemu-system-aarch64 -M arm-generic-fdt-7series \
--trace events=/e/run/tracing-events.txt \
-serial /dev/null -serial stdio \
-dtb /e/xlnx-dtb/zynq-zybo-z7.dtb  \
-device loader,addr=0xf8000008,data=0xDF0D,data-len=4 \
-device loader,addr=0xf8000140,data=0x00500801,data-len=4 \
-device loader,addr=0xf800012c,data=0x1ed044d,data-len=4 \
-device loader,addr=0xf8000108,data=0x0001e008,data-len=4 \
-device loader,addr=0xF8000910,data=0xF,data-len=0x4  \
-drive file=/y/jaos/Linux64/work/build/ZyboZ710.ZynqA2.img,if=sd,format=raw   \
-device loader,file=/y/jaos/Linux64/work/Zbl.Bin,addr=0x0 \
-m 1G 
После запуска:

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

/e/xemu/scripts/simpletrace.py /e/xemu/build/trace-events-all trace-4034 | less

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

Re: Эмуляция Zynq

Сообщение БудДен » 20.11.22 00:00

С помощью трассировки удалось попасть в небо, а именно, выяснилось, что каким-то волшебным образом считывался адрес в байтах, а имелись в виду сектора. После умножения на 512 стало считываться то, что надо. Но почему так? Так быть не должно. И что делать теперь с этим?

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

Re: Эмуляция Zynq

Сообщение БудДен » 20.11.22 00:57

википедия (статья SDHC):
Карты SDHC несовместимы с устройствами, изначально рассчитанными только на SD-карты. Ключевым нововведением для SDHC-карт, позволившим им превзойти объём в 4 ГБ, стало введение посекторной адресации (аналогично жёстким дискам), в то время как обычные SD-карты имеют побайтную адресацию (как оперативная память) и, соответственно, при 32-разрядном адресе могут иметь объём не более 4 ГБ.

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

Re: Эмуляция Zynq

Сообщение БудДен » 20.11.22 01:25

Карта не SDIO - это нормально, не знаю, как это связано с таймаутом в команде 5. Наивно попытался поставить размер карты 4Gb, не прокатило:

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

qemu-img convert -f raw -O qcow2 /y/jaos/Linux64/work/build/ZyboZ710.ZynqA2.img /e/run/ZyboZ710.ZynqA2.qcow2
qemu-img resize /e/run/ZyboZ710.ZynqA2.qcow2 4GB
видимо, надо искать то место, где принимается решение читать побайтно, а не посекторно.

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

Re: Эмуляция Zynq

Сообщение БудДен » 21.11.22 01:55

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

ZBL:Ofs.mos/NewFs
  GetSector
    GetBlock ->
ZBL:OfsDiskVolumes.Mos/GetBlock

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

Re: Эмуляция Zynq

Сообщение БудДен » 22.11.22 16:34

Искомая цепочка 9b1ea38d идёт сразу за концом блоков FF FF FF FF, по адресу приблизительно 0407B000. Он должен находиться в начале сектора, т.е. мы промазали на 1 сектор (сектор имеет размер 4096).

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

Re: Эмуляция Zynq

Сообщение БудДен » 22.11.22 19:21

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

installing UART - ZBL:Bootloader.Mos/InitShellUART (вызывается из тела)
Oberon Embedded Bootloader started - начало тела ZBL:Bootloader.Mos
INFO: Enter  - встречается в ZBL:tools/OEBLoopbackInterfaces.Mod, ZBL:tools/OEBSerialInterfaces.Mod, ZBL:tools/OEBUdpInterfaces.Mod
INFO: Leave - то же. 

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

Re: Эмуляция Zynq

Сообщение БудДен » 22.11.22 20:21

В Bootloader.Mos есть Run, там какой-то главный цикл, видимо, выполняющий команды. Нужно теперь понять, откуда команды берутся и печатать их по мере выполнения. А вот откуда - из init.script, наверное, со второго раздела? А что в нём? Он создаётся скриптом сборки и его содержание изначально такое:

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

FSTools.CreateFile BLAOSFS:/init.txt timeout 3
setinput UART
~
Далее выполняется auto.txt, такого содержания. Неясно, надо ли выкинуть команду про FPGA?

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

        deploy bs ZynqFpga
	deploy bootconfig A2Config
	deploy a2 memory 100000H 0 1
	start

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

Re: Эмуляция Zynq

Сообщение БудДен » 22.11.22 20:59

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

	ProgramCmd				= "deploy";		(** Planning Command to deploy a resource on a device *)
	StartCmd					= "start";			(** Execute Plan command *)

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

Re: Эмуляция Zynq

Сообщение БудДен » 23.11.22 03:10

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

qemu-system-aarch64 -M arm-generic-fdt-7series \
--trace events=/e/run/tracing-events.txt \
-serial /dev/null -serial stdio \
-dtb /e/xlnx-dtb/zynq-zybo-z7.dtb  \
-device loader,addr=0xf8000008,data=0xDF0D,data-len=4 \
-device loader,addr=0xf8000140,data=0x00500801,data-len=4 \
-device loader,addr=0xf800012c,data=0x1ed044d,data-len=4 \
-device loader,addr=0xf8000108,data=0x0001e008,data-len=4 \
-device loader,addr=0xF8000910,data=0xF,data-len=0x4  \
-drive file=/y/jaos/Linux64/work/build/ZyboZ710.ZynqA2.img,if=sd,format=raw   \
-device loader,file=/y/jaos/Linux64/work/Zbl.Bin,addr=0x0 \
-m 1G 
Падаем в процедуре ARM.Machine.Mod/GetFirstLevelEntry на адресе 1C23F000

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

Re: Эмуляция Zynq

Сообщение БудДен » 23.11.22 15:25

* вирт.адрес - 1C23F000
* адрес в таблице 1C8FC (его не удалось прочитать).

соседняя удача:
* вирта дарес 1CFF000
* адрес в табл - 0001C7FC

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

SetFirstLevelEntry: virtual/physical/entry address/entry: 00000000      0001BC00        0002C000        0001BC01

Entering SetSecondLevelEntry, vAddr = 00001000, phAddress = 00001000, flags = 0000047C
SetSecondLevelEntry: address in table = 0001BC04
...
Entering SetSecondLevelEntry, vAddr = 000FF000, phAddress = 000FF000, flags = 0000047C
SetSecondLevelEntry: address in table = 0001BFFC

SetFirstLevelEntry: virtual/physical/entry address/entry: FFF00000      FFF00000        0002FFFC        FFF11C0E
SetFirstLevelEntry: virtual/physical/entry address/entry: 00100000      00100000        0002C004        00111C0E
...
SetFirstLevelEntry: virtual/physical/entry address/entry: 1BF00000      1BF00000        0002C6FC        1BF11C0E
SetFirstLevelEntry: virtual/physical/entry address/entry: 1C000000      1C000000        0002C700        1C011C0E
SetFirstLevelEntry: virtual/physical/entry address/entry: 40000000      40000000        0002D000        40010C06
SetFirstLevelEntry: virtual/physical/entry address/entry: 40100000      40100000        0002D004        40110C06
...
SetFirstLevelEntry: virtual/physical/entry address/entry: FDE00000      FDE00000        0002FF78        FDE10C06
SetFirstLevelEntry: virtual/physical/entry address/entry: FDF00000      FDF00000        0002FF7C        FDF10C06
SetFirstLevelEntry: virtual/physical/entry address/entry: 1C100000      0001C400        0002C704        0001C401
SetFirstLevelEntry: virtual/physical/entry address/entry: 1C200000      0001C800        0002C708        0001C801
...
SetFirstLevelEntry: virtual/physical/entry address/entry: 1FE00000      0002B800        0002C7F8        0002B801
SetFirstLevelEntry: virtual/physical/entry address/entry: 1FF00000      0002BC00        0002C7FC        0002BC01
Entering SetSecondLevelEntry, vAddr = 1FFFF000, phAddress = 1FFFF000, flags = 0000047C
SetSecondLevelEntry: address in table = 0002BFFC



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

Re: Эмуляция Zynq

Сообщение БудДен » 25.11.22 16:55

Раскладка памяти в этой версии:

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

System Start:	00000000
System Stop:	00030000
System Size:	00030000
	Interrupt Stack Start:		00001000
	Interrupt Stack Stop:		00008000
	Interrupt Stack Size:		00007000
	First Page Table Start:	0002C000
	First Page Table Stop:		00030000
	First Page Table Size:		00004000
	Second Page Table Start:	0001BC00

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

	Second Page Table Stop:	0002C000
	Second Page Table Size:	00010400
Heap Start:		00100000
Heap Stop:		1C100000
Heap Size:		1C000000
Stack Start:	1C100000
Stack Stop:		1FFFF000
Stack Size:		03EFF000
Config Start:	1FFFF000
Config Stop:	20000000
Config Size:	00001000

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

I/O Start:		40000000
I/O Stop:		FE000000
I/O Size:		BE000000
SysHigh Start:	FFF00000
SysHigh Stop:	FFFFFFFE
	Interrupt Vector Start:	FFFF0000
	Interrupt Vector Stop:	FFFF1000
	Interrupt Vector Size:	00001000
	Cache References Start:	FFFF1000

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

	Cache References Stop:	FFFF50C0
	Cache References Size:	000040C0
	Cache References Stack Offset:	000001C0

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

Re: Эмуляция Zynq

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

Первый мегабайт - это набор из мелких страниц. Для описания нужен физ. адрес таблицы размером 1 кб с описаниями этих мелких страниц (по 4кб каждая)
Это физ. адрес равен sysFirstLvlPtStart . В нём мелкие странички, к-рые отображают каждую страницу на саму себя.

В том числе и сама страница таблиц живёт в этом же мегабайте.

Ответить