Запуск обычной версии под RPi
Запуск обычной версии под RPi
См. https://tvoygit.ru/budden/ja-o-s/src/br ... erry-pi.md,
http://вече.программирование-по-русски. ... ?f=5&t=485 - начало работы для кооп. версии.
ещё более старая тема - http://вече.программирование-по-русски. ... ?f=5&t=329
http://вече.программирование-по-русски. ... 6&start=20 - начало работы по QEMU
http://вече.программирование-по-русски. ... ?f=5&t=485 - начало работы для кооп. версии.
ещё более старая тема - http://вече.программирование-по-русски. ... ?f=5&t=329
http://вече.программирование-по-русски. ... 6&start=20 - начало работы по QEMU
Re: Запуск обычной версии под RPi
Читаем конфигурацию Zynq, видим модули:
Здесь я оставил большинство модулей для COOP.ARM { ARM.FPE64.Mod ARM.Builtins.Mod }
RPI и COOP { RPI.CPU.Mod }
ZYNQ и COOP { Zynq.CPU.Mod }
ARM и ~COOP { ARM.Initializer.Mod }
ZYNQ и ~COOP { Zynq.ARM.Platform.Mod }
ARM и ~COOP { ARM.BootConfig.Mod }
RPI и COOP { RPI.Processors.Mod RPI.Timer.Mod }
ZYNQ и COOP { Zynq.Processors.Mod Zynq.Timer.Mod }
COOP { Queues.Mod BaseTypes.Mod Activities.Mod ExclusiveBlocks.Mod Interrupts.Mod Runtime.Mod }
NATIVE и COOP { HeapManager.Mod }
BIOS и COOP { BIOS.Environment.Mod }
RPI и COOP { RPI.Environment.Mod }
ZYNQ и COOP { Zynq.Environment.Mod }
UNIX и COOP { Unix.Environment.Mod }
ZYNQ и ~COOP { Zynq.PsUartMin.Mod Zynq.TraceDevice.Mod Zynq.PrivateWatchdog.Mod ARM.Machine.Mod }
~COOP { Heaps.Mod }
Modules.Mod
ARM и ~COOP { ARM.Objects.Mod ARM.Kernel.Mod }
Re: Запуск обычной версии под RPi
Модуль ARM.Initializer содержит проц {INITIAL,NOPAF} Init;
https://tvoygit.ru/budden/ja-o-s/src/br ... -версии.md
Видимо, сопоставлять его надо с RPI.Environment.Mod/KernelBegin
Наверное, надо скопировать каждый файл от Zynq, к-рый будет меняться.
https://tvoygit.ru/budden/ja-o-s/src/br ... -версии.md
Видимо, сопоставлять его надо с RPI.Environment.Mod/KernelBegin
Наверное, надо скопировать каждый файл от Zynq, к-рый будет меняться.
Re: Запуск обычной версии под RPi
Код: Выделить всё
System.DoCommands
FSTools.DeleteFiles -i ЯОС:NewRPI2/* ~
Release.Build -b --path="ЯОС:NewRPi2/" RPi2 ~
Linker.Link --fileName=ЯОС:NewRPI2/kernel7.img --displacement=8000H -a
--path="ЯОС:NewRPi2/" Initializer Platform FPE64 ПримитивыСредыВыполнения
Ю32 ПереводыЭлементовКода Trace BootConfig PsUartMin TraceDevice PrivateWatchdog
Ю16 Ю16_2 Machine Heaps Modules Objects Kernel ЛогЯдра Plugins Streams Pipes
Commands Reals Clock Dates Strings Files Disks DiskCaches Reflection TrapWriters
Traps Locks Options ~
FSTools.CopyFiles -o ЯОС:NewRPI2/kernel7.img => C:/vb_share/a2/2/kernel7.img ~
FSTools.CopyFiles -o ЯОС:NewRPI2/kernel7.log => C:/vb_share/a2/2/kernel7.log ~~
Re: Запуск обычной версии под RPi
https://disk.yandex.ru/i/5hOTOZlydop4AA - видео о том, как собрать и запустить в эмуляторе ядро, в т.ч. под отладчиком. До того момента, когда оно падает.
Re: Запуск обычной версии под RPi
Падает на проверке
утв(memStackStop <= memIOStart);
участвующие в проверке величины назначаются в ARM.Machine.Mod:
утв(memStackStop <= memIOStart);
участвующие в проверке величины назначаются в ARM.Machine.Mod:
Код: Выделить всё
memConfigStop := Platform.DDRStart + СтрВЦел32(i, value);
ДайЗначениеКлючаКонфигурацииЯОС("ConfigSize", value);
i := 0;
memConfigStart := memConfigStop - СтрВЦел32(i, value);
memStackStart := memHeapStop;
memStackStop := memConfigStart;
memIOStart := Platform.IOStart;
memIOStop := memIOStart + Platform.IOSize;
Re: Запуск обычной версии под RPi
Теперь нам надо, похоже, запустить кооп. версию и в ней понять, чему равно memTag.size (можно с помощью TRACE, т.к. трассировка уже поднята).
Re: Запуск обычной версии под RPi
Код: Выделить всё
memTag^.size = 1006632960
RPI.Environment.Mod@5628 Environment.InitMemory:memTag^.start= 00000000H;
RPI.Environment.Mod@5654 Environment.InitMemory: операцияАдресОт KernelEnd= 00065EA0H;
Последний раз редактировалось БудДен 03.07.22 11:30, всего редактировалось 1 раз.
Re: Запуск обычной версии под RPi
теперь надо понять, что дальше происходит с этой памятью. Мы выяснили, что она мапится 1*1 в виртуальную память (если я всё правильно понял). Но дальше, очевидно, часть должна резервироваться под вектора прерываний, часть - это порты, а остальное должно инициализироваться с помощью менеджера памяти. Т.е. нужно дальше читать загрузку RPiC.
Может помочь картинка:
источник
Может помочь картинка:
источник
Последний раз редактировалось БудДен 03.07.22 12:24, всего редактировалось 1 раз.
Re: Запуск обычной версии под RPi
Вызывают интерес следующие строчки в кооперативной версии. Похоже, что всё, что за ядром, выкладывается в один непрерывный диапазон адресов. Остаётся вопрос, что с периферией? На картинке упоминается iobase. Такое слово в исходниках есть, но пока смысл не раскопал.
Код: Выделить всё
HeapManager.Initialize (heap, begin := операцияАдресОт KernelEnd, end := memTag.start + memTag.size);
memory := memTag.start + memTag.size - операцияАдресОт KernelEnd;