Дневник копошений с Minos

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

Дневник копошений с Minos

Сообщение БудДен » 12.10.23 22:33

Описание модулей ZbL (являющегося урезанной версией Minos, например, без планировщика) пока длится 20 календарных дней.

Достигнутый на данный момент результат можно увидеть здесь:

https://tvoygit.ru/budden/jaos/src/bran ... С.фок#L105

Текущая цель проекта крайне скромна:

* ✓ завершаем описание модулей Minos, входящих в ZbL
* - (не будем ждать) ждём, пока чел, ради которого всё это началось, снова спросит
* если будет совсем не лень, то пробуем запустить планировщик задач и сделать две задачи, которые печатают буковки
Вот сегодня не совсем лень, можно попробовать.
Последний раз редактировалось БудДен 16.10.23 20:36, всего редактировалось 1 раз.

смотритель
Site Admin
Сообщения: 20
Зарегистрирован: 25.04.18 15:17

Re: Дневник копошений с Minos

Сообщение смотритель » 16.10.23 20:34

Завершил описание модулей ZbL, теперь хотим запустить Minos.Mos - в ней находится планировщик Minos.

Сделал ветку восстановление-minos . Какие ещё модули нужны?

IMPORT SYSTEM, Kernel, R := Reset, Device, Modules, Log, OFS, Strings, Platform, Interrupts, Tools, Trace, Heaps, UartConstants, Memory, IoControl, SerialLog;

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

Re: Дневник копошений с Minos

Сообщение БудДен » 16.10.23 20:35

опс, перелогинился.

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

Re: Дневник копошений с Minos

Сообщение БудДен » 16.10.23 20:51

IMPORT SYSTEM,
  • Kernel = ZbL.Kernel.Mos
  • Reset - НЕ ХВАТАЕТ - реально не хватает
  • Device - был ARM/Minos/Device.Mos ->
  • Modules = ZbL.Modules.Mos
  • Log - был ARM/Minos/Log.Mos
  • OFS = ZbL.OFS.Mos
  • Strings = MinOs.Strings.Mos
  • Platform = MinOs.HAL.Zynq.Platform.Mos
  • Interrupts = MinOs.HAL.Zynq.Interrupts.Mos
  • Tools - был ARM/Minos/Tools.Mos
  • Trace - MinOs.Trace.Mos
  • Heaps - MinOs.Heaps.Mos
  • UartConstants - Был ARM/Minos/UartConstants.Mos
  • Memory - MinOs.HAL.Zynq.Memory.Mos
  • IoControl - НЕ ХВАТАЕТ - похоже, что реально не хватает. Нет нигде и не гуглится.
  • SerialLog - Был ARM/Minos/SerialLog.Mod

    По зависимостям:
  • Uart - был Uart.Mos
По зависимостям выходят

Из Device:
  • UartMin - есть MinOs.Zynq.UartMin.Mos
Из Log - ничего

Из Tools - OFS, Disks, OFSDiskVolumes, Device, SerialLog, Kernel, Platform, Log, Strings, Trace - нет новых

Из UartConstants - ничего

Из SerialLog - Device, Platform, Log, Uart, Trace - добавил Uart

Из Uart - System, Platform

Вроде всё. Теперь надо составить из них пакет и попробовать его перевести.
Последний раз редактировалось БудДен 16.10.23 22:56, всего редактировалось 1 раз.

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

Re: Дневник копошений с Minos

Сообщение БудДен » 16.10.23 22:04

Также добавил интересное на вид:

MinOs.ProcessMonitor.Mos
MinOs.StartUp.Mos

Но они хотят UartLoader. Где он? MinOs.Zynq.Uart.Loader.Mos - т.е. уже есть.

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

Re: Дневник копошений с Minos

Сообщение БудДен » 16.10.23 22:50

Пытаюсь избежать двойного перевода всего, поэтому:

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

Compiler.Compile -p=Minos --metaData=simple 
   --objectFile=Minos --useFPU32 --useFPU64 
   --symbolFileExtension=.Syb --traceModule=Trace 
   --путьКОбъИСимвФайлам='buildZbL/' MinOs.KernelUtils.Mos ~
- это компилируется.

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

Re: Дневник копошений с Minos

Сообщение БудДен » 16.10.23 22:59

В общем, так не работает, поэтому действуем согласно

https://tvoygit.ru/budden/jaos/src/bran ... ский-heaps

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

Re: Дневник копошений с Minos

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

ГрКодоступ сломан настолько, что не компилируется. Надо сделать, чтобы хотя бы компилировался. На этом, видимо, всё на сегодня.

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

Re: Дневник копошений с Minos

Сообщение БудДен » 18.10.23 22:53

To set the pin state in ARM assembly language for the Zynq platform, you will need to access the appropriate memory-mapped registers that control the GPIO pins. Here's a general outline of the steps involved:

1. Identify the GPIO pin: Determine the specific GPIO pin you want to control on the Zynq platform. Refer to the platform's documentation or pinout diagram to find the GPIO pin number and its corresponding memory-mapped register.

2. Enable GPIO functionality: Configure the appropriate memory-mapped register to enable the GPIO functionality for the pin you want to control. This typically involves setting the corresponding bit in the GPIO controller's register.

3. Set the pin direction: Configure the direction of the GPIO pin as an input or an output. This can be done by writing to the appropriate memory-mapped register, such as the GPIO direction register.

4. Set the pin state: If the pin is configured as an output, you can set its state to high or low. This can be done by writing to the appropriate memory-mapped register, such as the GPIO data register.

Here's an example code snippet in ARM assembly language for setting the state of a GPIO pin on the Zynq platform:

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

.equ GPIO_BASE, 0xE000A000  @ Base address of the GPIO controller
.equ GPIO_DIRECTION_OFFSET, 0x04  @ Offset of the GPIO direction register
.equ GPIO_DATA_OFFSET, 0x00  @ Offset of the GPIO data register

@ Enable GPIO functionality for the desired pin
ldr r0, =GPIO_BASE
ldr r1, [r0]
orr r1, r1, #0x1  @ Set the appropriate bit to enable GPIO functionality
str r1, [r0]

@ Set the pin direction as output
ldr r0, =GPIO_BASE
ldr r1, [r0, #GPIO_DIRECTION_OFFSET]
orr r1, r1, #0x1  @ Set the appropriate bit to configure as output
str r1, [r0, #GPIO_DIRECTION_OFFSET]

@ Set the pin state to high
ldr r0, =GPIO_BASE
ldr r1, [r0, #GPIO_DATA_OFFSET]
orr r1, r1, #0x1  @ Set the appropriate bit to set the pin high
str r1, [r0, #GPIO_DATA_OFFSET]
Please note that the specific memory-mapped addresses and register offsets may vary depending on the Zynq platform's documentation and the specific GPIO pin you are targeting. Make sure to consult the platform's documentation or reference manual for the correct addresses and offsets.

Additionally, keep in mind that accessing memory-mapped registers and controlling GPIO pins in assembly language requires a good understanding of the hardware and low-level programming concepts. It's recommended to refer to the Zynq platform's documentation and any provided examples or libraries for more detailed guidance on GPIO pin control in ARM assembly language.

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

Re: Дневник копошений с Minos

Сообщение БудДен » 18.10.23 22:54

Согласно Zybo_RM, пины 24 и 26 - это соотв RXD1 и RXD3 в Enet.
На этом всё на сегодня и скорее всего на эту неделю.

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

Re: Дневник копошений с Minos

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

Добил заглушки, Minos собрался, запустил, получился кирпич. В общем-то ожидаемо. На следующем кванте попробую разобраться, какие модули задублировались и что вообще должно происходить, а не происходит. Не стал бы этим сегодня заниматься, но как посмотришь hh.ru, так сразу дурно становится - везде C++. Т.е. можно водки было выпить, а можно вот так давать ответ страшному миру: стучать во время грома по сковородке, чтобы гром тоже меня боялся (рецепт из книг Рокуэлла Кента).

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

Re: Дневник копошений с Minos

Сообщение БудДен » 26.10.23 20:57

Пытаемся убрать дубликаты. Возникла странная заморочка с символьными файлами, их надо скопировать почему-то из buildZbl в work. Установка пути к файлам на buildZbl почему-то приводит к падению среды, но не буду разбираться.

Список выявленных близнецов:
  • ZblBootstrap: ZbL.Zynq.TraceDevice.Mos , A2: Zynq.TraceDevice.Mos, Minos: -
Итак, Device - использует UartMin. У нас уже есть какой-то Uart в ZbL. Две подзадачи:
  • понять, тот же
  • понять, можно ли выкинуть тот, к-рый в Device.
Что есть в модуле Device?

DeviceDesc - (* A generic driver Plugin that every serial device must implement. All calls are non blocking.*)
Также есть getDevice (по имени), DumpDevice . А при чём тут Uart? А при том, что в него и выводится DumpDevice - больше
никак не используется. Куда переадресовать? Надо найти более ранние формы трассировки в ZbL и туда переадресовывать.

Но задача понять, какой у нас Uart - Mini или нет, остаётся. Приступаем.
Последний раз редактировалось БудДен 26.10.23 21:04, всего редактировалось 3 раза.

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

Re: Дневник копошений с Minos

Сообщение БудДен » 26.10.23 20:58

Вот какие волшебные числа есть в модуле UartMin (который хотим избавиться от):

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

 	BaseUART0 				= SIGNED32( 0E0000000H );
	BaseUART1 				= SIGNED32( 0E0001000H );

	CONTROLREG0			= SIGNED32( 00H );
	MODEREG0				= SIGNED32( 04H );
	INTRPENREG0				= SIGNED32( 08H );
	INTERDISREG0				= SIGNED32( 0CH );
	INTERMASKREG0			= SIGNED32( 10H );	(* read only *)
	CHNLINTSTSREG0			= SIGNED32( 14H );
	BAUDRATEGENREG0		= SIGNED32( 18H );	
	RCVRTIMEOUTREG0		= SIGNED32( 1CH );
	RCVRFIFOTRIGLEV0		= SIGNED32( 20H );
	MODEMCTRLREG0		= SIGNED32( 24H );
	MODEMSTATUSREG0		= SIGNED32( 28H );
	CHANNELSTATUSREG0	= SIGNED32( 2CH );
	TXRXFIFO0					= SIGNED32( 30H );
	BAUDRATEDIVREG0		= SIGNED32( 34H );
	FLOWDELAYREG0			= SIGNED32( 38H );
	TXFIFOTRIGLEV0			= SIGNED32( 44H );

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

Re: Дневник копошений с Minos

Сообщение БудДен » 26.10.23 21:01

В ZbL есть Zynq.PsUartMin.Mod , но в нём есть пр-ра Install, которой передаётся адрес, и она вызывается откуда-то ещё. Откуда?

Три вхождения, но нас сейчас интересует ZbL.Zynq.TraceDevice.Mos

Приходим к

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

 		(* ===== UART ===== *)
		UartBase* = [ADDRESS(0E0000000H),ADDRESS(0E0001000H)]; (* base address for all UART controllers present in the system *)
Гипотеза - это один и тот же UART. А значит, можно выкинуть из сборки Minos MinOs.Zynq.UartMin.Mos и воспользоваться ZbL.Zynq.TraceDevice.Mos (модуль так и называется - TraceDevice и вроде в пакете Minos нет модуля с таким именем)

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

Re: Дневник копошений с Minos

Сообщение БудДен » 26.10.23 21:40

Идём дальше, модуль Log (MinOs.Log.Mos) . От него дофига всего зависит, поэтому выкинуть его нельзя, а надо как-то переделать, чтобы он опирался на инфраструктуру из ZbL. Но он ни от чего и не зависит, это абстрактный интерфейс. Видимо, сюрпризы нас ждут ниже, где он будет инициализироваться.

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

Re: Дневник копошений с Minos

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

MinOS.UartConstants.Mos пропускаем - он явно вспомогательный
И приступаем к Minos.Zynq.Uart.Mos

странно, адреса те же самые, а модуль второй. Это жжжж неспроста.

А есть ещё просто Zynq.Uart.Mos, но он нигде не используется. Похоже, мы пришли к самому сложному, и если через это пройти, то ларчик откроется. Итак, клиенты модуля Uart в пакете MinosOS:

* MinOs.Minos.Mos : Uart.DoUart
* MinOs.SerialLog.Mos : Uart.Install
* MinOs.Zynq.Uart.Loader.Mos : Uart.EnableIrqMode
* MinOs.Zynq.Uart.Task.Mos : Uart.DoUartCheck

Вот соответственно, если мы хотим заменить MinOs.Zynq.Uart.Mos на что-то, то
это что-то должно предоставлять все эти функции. EnableIrqMode никто не предоставляет. Ах.

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

Re: Дневник копошений с Minos

Сообщение БудДен » 26.10.23 22:13

ну вот, модуль почти на 1000 строчек, и работающий с железкой, и работоспособность его неизвестна. Это, конечно, печально и сулит недели работы.

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

Re: Дневник копошений с Minos

Сообщение БудДен » 26.10.23 22:35

Попытался выводить хотя бы сообщение в Trace перед инициализацией "большого UART".
Текущее состояние собирается в "некирпич", а в командный интерпретатор ZbL, который работает (можно набирать белиберду, которая
не будет видна в консоли, а потом нажать Enter и тебе скажут, что у тебя плохая команда. Кстати, как же включить эхо?).

Поменял модуль Bootstrap, чтобы он грузил не Bootloader, а Startup (последний из пакета MinosOs).

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

Re: Дневник копошений с Minos

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

FinishStartUp не успеет быть вызван, как всё падает. Что делать тут?

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

Re: Дневник копошений с Minos

Сообщение БудДен » 26.10.23 23:30

А так зависает (т.е., возможно, работает).

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

	Trace.StringLn("Complete Init of Minos.");

	(* мой временный костыль, чтобы понять, почему падает *)
	FinishStartUp();
	(* конец костыля *)

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

Re: Дневник копошений с Minos

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

В общем, я дошёл до того, что планировщик задач запустился. Не пора ли на этом остановиться? А хотя нет, надо ещё
сделать две задачи, которые будут печатать буквы с какими-то временными интервалами, и потом перенести всё это
в русскую версию. А то оно сейчас в английской ветке, а это нехорошо :)

Ответить