Пытаюсь запустить под ARM, часть 2

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

Re: Пытаюсь запустить под ARM, часть 2

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

Переместил за skip там же - мигает.

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

Re: Пытаюсь запустить под ARM, часть 2

Сообщение БудДен » 27.10.21 22:23

Попытался поместить в код инициализации модуля Environment - не работает. Да и вообще, какой-то он не живой на вид, в дизассемблинге не видно, чтобы там что-то вызывалось.

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

Re: Пытаюсь запустить под ARM, часть 2

Сообщение БудДен » 27.10.21 22:49

Воткнул вызов прямо в Modules.Main - работает.

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

PROCEDURE {FINAL} Main;
PROCEDURE InitializeGC EXTERN "GarbageCollector.Initialize";
PROCEDURE TerminateGC EXTERN "GarbageCollector.Terminate";
BEGIN {UNCOOPERATIVE, UNCHECKED}
CODE
	mov r0,#3F000000H
	orr r0,r0,#200000H		

	mov r2,#8000H		
Loop:
	str r2,[r0,#20H]	

	mov r1,#0100000H
WaitA:
	subs r1,r1,#1
	bne WaitA
 
	str r2,[r0,#2CH]	; clear bit
	
	mov r1,#010000H	; wait a while
WaitB:
	subs r1,r1,#1
	bne WaitB

	b Loop			; again and again
	(* SYSTEM.SetActivity (NIL);
	SYSTEM.SetFramePointer (NIL);
	Environment.Initialize;
	InitializeGC;
	Processors.Initialize;
	Activities.Execute (PublishRegisteredModules);
	Processors.Terminate;
	FinalizeModules;
	Activities.Terminate;
	Queues.Terminate;
	Environment.Terminate;
	TerminateGC; 
	Environment.Exit (Environment.status); *)
END END Main;
Ну что, продвижение за сегодня неплохое. Дальше нужно, чтобы функции вызывались. Нужно разобраться с этими "фиксапами" - похоже, что они там есть, а я что-то сомневаюсь, что они там должны быть, ведь статическая же сборка. Мне кажется, что либо должен где-то быть код, который их разрешает и превращает в настоящие адреса, либо что-то не так с линковкой.

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

Re: Пытаюсь запустить под ARM, часть 2

Сообщение БудДен » 27.10.21 23:09

Изменил команду линковки, теперь сборка делается так:

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

Release.Build --build --path="./" A2RPiCooperative ~
StaticLinker.Link -a --fileName=kernel.img --extension=Gof --displacement=8000H --path="./" Trace CPU Runtime Counters Processors Queues BaseTypes Timer Activities ExclusiveBlocks HeapManager Interrupts Environment Mutexes Machine Heaps Modules GarbageCollector Objects Kernel ~

Так тоже мигает:

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

PROCEDURE {NOPAF} Led1*;
CODE
	mov r0,#3F000000H
	orr r0,r0,#200000H		

	mov r2,#8000H		
Loop:
	str r2,[r0,#20H]	

	mov r1,#010000H
WaitA:
	subs r1,r1,#1
	bne WaitA
 
	str r2,[r0,#2CH]	; clear bit
	
	mov r1,#010000H	; wait a while
WaitB:
	subs r1,r1,#1
	bne WaitB

	b Loop			; again and again
END Led1;



PROCEDURE {FINAL} Main;
PROCEDURE InitializeGC EXTERN "GarbageCollector.Initialize";
PROCEDURE TerminateGC EXTERN "GarbageCollector.Terminate";
BEGIN {UNCOOPERATIVE, UNCHECKED}
 Led1;
	Led1;
	Led1;
	(* SYSTEM.SetActivity (NIL);
	SYSTEM.SetFramePointer (NIL);
	Environment.Initialize;
	InitializeGC;
	Processors.Initialize;
	Activities.Execute (PublishRegisteredModules);
	Processors.Terminate;
	FinalizeModules;
	Activities.Terminate;
	Queues.Terminate;
	Environment.Terminate;
	TerminateGC; 
	Environment.Exit (Environment.status); *)
END Main;
Следующая задача - чтобы процедура мигания вызывалась из другого модуля (а что-то не факт, что она вызывается) - это уже на завтра.
Последний раз редактировалось БудДен 27.10.21 23:49, всего редактировалось 1 раз.

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

Re: Пытаюсь запустить под ARM, часть 2

Сообщение БудДен » 27.10.21 23:48

Перенёс пр-ру мигания в RPI.Environment.Mod - мигает.

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

Re: Пытаюсь запустить под ARM, часть 2

Сообщение БудДен » 28.10.21 01:02

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

tag = 00000005
memtag = 0000011C
memTag.size = 989855744

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

Re: Пытаюсь запустить под ARM, часть 2

Сообщение БудДен » 28.10.21 12:25

Оно теперь падает где-то в районе включения остальных процессоров - загрузка начинает выполняться повторно. Либо я своими отладочными выводами вмешался в какую-то гонку и изменил в ней победителя, либо достигнут предел работоспособности. Пойду читать их учебные курсы...

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

Re: Пытаюсь запустить под ARM, часть 2

Сообщение БудДен » 28.10.21 16:13

Имеется устойчивое ощущение, что код инициализации модуля не то, что не вызывается, а даже не линкуется. Картина слегка смазана тем, что я довольно долго читал дизассемблерный листинг от старого ядра, однако то, что не вызывается - это факт. Это непохоже на правду, т.к. там инициализируются некие константы. Возможно, я что-то не понял. Попробую найти хоть одну работающую кооперативную сборку для любой платформы и посмотрим, как она линкуется и вызывается ли там этот код.

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

Re: Пытаюсь запустить под ARM, часть 2

Сообщение БудДен » 28.10.21 19:08

В некооперативной сборке код вызывается.

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

Re: Пытаюсь запустить под ARM, часть 2

Сообщение БудДен » 28.10.21 20:40

Посмотрел на современной (октябрь 2021) ЯОС - поломана генерация кода, ассемблерные инструкции кривые. Нахаляву не прокатило :)

Ответить