Перевод ARM-специфичного кода

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

Перевод ARM-специфичного кода

Сообщение БудДен » 04.01.23 02:28

Внутри репозиториев ЯОС есть MINOS и другой код для Zynq.
Надо сделать, чтобы переводилось всё, поскольку сейчас вообще нет последней русскоязычной версии. Предположительный план:
  • ✓ревизия всех файлов описания проектов
  • определение компилируемых не тем компилятором
  • распределение по полезности
  • ✓удаление ненужных
  • запуск нужных
Нашлись такие:
  • стёр. ARM/ARM.A2/ARM.Release.Tool - похожа на A2, но подтягивает часть файлов из других директорий. Видимо, нужно сверить с тем, что мы сейчас собираем для Zynq
  • + ARM/Enet/Enet.Tool - что-то про сетевой стек для MinOS - и всё!
  • + ARM/Minos/Minos.Tool - скромненько, пакеты Init, Heaps, Log, Fpga, Kernel, String, Devices, Uarts, Fs, FileTools, Modules, Streams, Scheduler
  • стёр. ARM/USB/Release.Tool - по размеру и содержимому похож на старую версию ЯОС.фок
  • + ARM/zbl/BootloaderRelease.Tool - включает в себя Minos и Enet через #include, пакет Bootstrap, Bootloader, TFTPLoader, XModemLoader, ZynqFPGAProgrammer, A2ConfigProgrammer, MD5Checksum
Последний раз редактировалось БудДен 05.01.23 13:45, всего редактировалось 1 раз.

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

Re: Перевод ARM-специфичного кода

Сообщение БудДен » 04.01.23 16:39

Необходимо (наверное) объединить все файлы описания конфигураций в один. Проблема состоит в том, что там есть понятие "исключить пакеты", но нет понятия "включить пакеты". Видимо, придётся доделать, иначе глупость получится - из всех интеловских пакетов надо будет выкинуть всё, что касается Zybo, и наоборот.

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

Re: Перевод ARM-специфичного кода

Сообщение БудДен » 05.01.23 13:48

Сделал необходимое для объединения всех файлов проекта - теперь в файле описания конфигураций можно (и нужно) для каждой конфигурации описать, какие пакеты в неё входят. Раньше по умолчанию входили все пакеты, и нужно было писать список исключений. Это становилось совсем уж неудобно при объединении разнородных и слабо пересекающихся проектов в одном файле.

Хотя, конечно, с архитектурной точки зрения это тупик. Приложения заведомо будут иметь отдельные файлы конфигурации. Т.е. нужно было не поддерживать единое пр-во имён пакетов, а внутри переводчика ввести понятие
"файл конфигурации" и обеспечить там пространства имён в рамках файлов конфигурации.

Но это более трудоёмко, поэтому пока пусть будет так. Есть ведь ещё такой нюанс, что Sd.Mod используется в разных файлах конфигурации. Ох, а ещё ведь и одноимённые модули возникнут из разных директорий, например, Strings. Ну вот, похоже, фронт работ расширится. Хотя с другой стороны, они же и так у нас были, просто у них были разные имена файлов. Возможно, что достаточно будет обеспечить уникальность имён файлов и сложить их в единую директорию source, для сохранения простоты. В перспективе это не сработает для подддержки приложений, но об этом потом подумаем.

Но пока, видимо, всё на эти каникулы по кодированию.

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

Re: Перевод ARM-специфичного кода

Сообщение БудДен » 05.01.23 15:27

Надо будет на самом деле поддерживать имена файлов с этими вот Zbl или с именами директорий - в этом случае они становятся такими же уникальными, как BIOS.*.Mod vs ARM.*.Mod. А вариант с префиксами платформы у нас уже и так работает. Т.е. вроде всё не страшно, но главное не забыть об этом к следующем разу, поэтому и пишу.

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

Re: Перевод ARM-специфичного кода

Сообщение БудДен » 24.03.23 18:56

Пока попробую такой алгоритм:

* файлы, которые в сборке упоминаются как ФС:путь/внутри/ИмяФайла.Расширение, сохраняем на своём месте на диске, но
файл переименовываем в ФС.путь.внутри.ИмяФайла.Расширение - с точностью до маловероятных совпадений вида приказ:казнить/нельзя.помиловать/имяФайла.Mod, должно сработать. Понадобится найти все упоминания файла во всех сборочных скриптах и поправить их.

* при этом потребуется внести изменения и в алгоритмы, например, в LisCompiler.ДайФайлДляЗаписиПеревода - отрезать файловую систему и директорию от имени файла.

Э, нет, на этом проблемы не кончатся. Нам либо надо всё перенести в source, либо научить переводчик работать с поддиректориями, чтобы он клал переводы в нужное место в директории переводов (которого у нас в принципе не существует, т.к. мы же файлы копируем в source, а место назначения будет source/../расшифровкаСмонтированнойФС. Пока кажется проще первое (заодно исчезнут файловые системы MINOS и прочее), надо подумать.

Пример заковыристого файла:

MINOS:HAL/zynq/Zynq.Initializer.Mos
ENET:/Minos.EnetEnvironment.Mod
ENET:/EnetTiming.Mod (без префикса Minos!)
MINOS:/Trace.Mos (повезло, уникальный)
MINOS:/Strings.Mos (тоже повезло)

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

Re: Перевод ARM-специфичного кода

Сообщение БудДен » 24.03.23 19:10

В общем, ощущение, что преобразование ФС:путь/к/Файл.расширение

нужно провести с самими файлами, превратив такой файл в
ЯОС:source/ФС..путь.к.файл.расширение - и тогда всё почти точно будет уникально, а переводчик не потребует никаких изменений.

Изменений потребуют *.фок, скрипты сборки Zybo и наши свежие клоны от них - скрипты перевода.

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

Re: Перевод ARM-специфичного кода

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

От ZYNQ: осталось только несколько бинарных файлов, пусть пока там будут, хотя можно сразу убрать...

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

Re: Перевод ARM-специфичного кода

Сообщение БудДен » 26.03.23 01:40

Ура, перетасовал всю сборку и все исходники для ARM (кучу кода выкинул, относящегося к Minos, жалко, а что поделать, работа в одиночку требует жёсткого управления объёмом проекта, MinOs - очень интересный проект, но ресурсов разбираться с ним нет, а значит - в помойку его). В итоге код для Zynq перевёлся хотя бы формально, вот кусочек модуля ARM.Kernel.Mod:

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

(** -- Garbage collection -- *)

(** Activate the garbage collector immediately. *)
проц GC*;
нач
	Кучи.ЗапустиПометкуИПолноеСметание
кон GC;

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

Re: Перевод ARM-специфичного кода

Сообщение БудДен » 26.03.23 01:42

Следующий этап - интегрировать эту работу в перевод всех конфигураций (который делается единым процессом с учётом условной компиляции, ChatGPT бы не справился).

Ответить