Запуск обычной версии под RPi

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

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

Re: Запуск обычной версии под RPi

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

Читаем конфигурацию Zynq, видим модули:
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 }
Здесь я оставил большинство модулей для COOP.

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

Re: Запуск обычной версии под RPi

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

Модуль ARM.Initializer содержит проц {INITIAL,NOPAF} Init;

https://tvoygit.ru/budden/ja-o-s/src/br ... -версии.md

Видимо, сопоставлять его надо с RPI.Environment.Mod/KernelBegin

Наверное, надо скопировать каждый файл от Zynq, к-рый будет меняться.

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

Re: Запуск обычной версии под RPi

Сообщение БудДен » 29.04.22 22:10

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

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 ~~

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

Re: Запуск обычной версии под RPi

Сообщение БудДен » 29.04.22 22:58

https://disk.yandex.ru/i/5hOTOZlydop4AA - видео о том, как собрать и запустить в эмуляторе ядро, в т.ч. под отладчиком. До того момента, когда оно падает.

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

Re: Запуск обычной версии под RPi

Сообщение БудДен » 01.07.22 23:38

Падает на проверке

утв(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;

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

Re: Запуск обычной версии под RPi

Сообщение БудДен » 02.07.22 20:10

Теперь нам надо, похоже, запустить кооп. версию и в ней понять, чему равно memTag.size (можно с помощью TRACE, т.к. трассировка уже поднята).

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

Re: Запуск обычной версии под RPi

Сообщение БудДен » 02.07.22 22:41

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

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 раз.

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

Re: Запуск обычной версии под RPi

Сообщение БудДен » 02.07.22 22:42

теперь надо понять, что дальше происходит с этой памятью. Мы выяснили, что она мапится 1*1 в виртуальную память (если я всё правильно понял). Но дальше, очевидно, часть должна резервироваться под вектора прерываний, часть - это порты, а остальное должно инициализироваться с помощью менеджера памяти. Т.е. нужно дальше читать загрузку RPiC.

Может помочь картинка:
периферия-bcm2835.png
периферия-bcm2835.png (151.69 КБ) 8 просмотров
источник
Последний раз редактировалось БудДен 03.07.22 12:24, всего редактировалось 1 раз.

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

Re: Запуск обычной версии под RPi

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

Вызывают интерес следующие строчки в кооперативной версии. Похоже, что всё, что за ядром, выкладывается в один непрерывный диапазон адресов. Остаётся вопрос, что с периферией? На картинке упоминается iobase. Такое слово в исходниках есть, но пока смысл не раскопал.

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

	
	HeapManager.Initialize (heap, begin := операцияАдресОт KernelEnd, end := memTag.start + memTag.size);
	memory := memTag.start + memTag.size - операцияАдресОт KernelEnd;

Ответить