Page 1 of 1

Использование пути "/sys"

Posted: Wed Jan 05, 2022 3:20 am
by vitalkrilov
Я сначала начну с предисловия, потом перейду к сути. Надеюсь, что «воды» много не написал, да и во всяком случае это лишним не будет (мало ли пригодится кому-нибудь).

Как все знают, в KolibriOS есть директория /sys, которая всегда существует (в стандартной сборке; независимо от параметров запуска) и (как я понимаю) ее поддержка встроена в ядро. С помощью неё осуществляется доступ к файлам системы.

Однако сложилось так, что KolibriOS обычно используют, работая на физической (или же подключённой в эмулятор) дискете или работая с образом этой же дискеты (например, kolibri.img, который поставляется внутри LiveCD образа). В таких случаях система создаёт рамдиск /rd/1, куда копирует файлы с дискеты, и затем именно на этот путь ссылается /sys. Одновременное наличие /rd/1 и /sys, я думаю, может вызывать путаницу у программистов, отчего они в своём коде могут обращаться напрямую к рамдиску. Это в большинстве случаев не заметно, ведь, как я выше написал, почти все пользуются дискетами.

Но, так как использование KolibriOS на дискете не является обязательным, пользователи могут устанавливать систему, например, на HDD. Да и с относительно недавних пор KolibriOS может загружаться по UEFI. Таким образом, система может запускаться вовсе без дискеты или её образа. Система в таком случае не создаёт рамдиск, а /sys ссылается сразу на директорию, в которой расположены файлы системы на диске. Это все очень хорошо, но возникает проблема с работой некоторых программ. Так как в своём коде они обращаются к /rd/1, а не к /sys, могут возникать непредвиденные ошибки: от невозможности запустить программу (что на данный момент замечено мной в CEdit) до каких-либо ошибок во время выполнения (я нашёл, что компилятор C-- может обратиться к /rd/1/Settings/c--.ini).

Я буду исправлять такое в исходниках существующих программ. Также я думаю, что стоит создать страницу на Wiki «Рекомендации по написанию программ», где написать, как минимум, об этом. В таком случае можно будет надеяться, что новые программы не будут обращаться напрямую к рамдиску, когда нужно обратиться к системной директории /sys.

Re: Использование пути "/sys"

Posted: Wed Jan 05, 2022 2:30 pm
by punk_joker
Можно ссылку или описание проблемы с cedit вызванная этим?

Re: Использование пути "/sys"

Posted: Wed Jan 05, 2022 2:37 pm
by vitalkrilov
punk_joker wrote:Можно ссылку или описание проблемы с cedit вызванная этим?
Я это уже исправляю. Но проблема в следующем: когда запускаешь CEdit без рамдиска, программа обращается к /rd/1. Так как его нет, вызывается Assert (в данный момент строка 161 в OpenDlg).

Re: Использование пути "/sys"

Posted: Wed Jan 05, 2022 3:10 pm
by akron1
vitalkrilov, спасибо за информацию, мне всегда казалось, что "/sys" это синоним для "/rd/1" и без образа дискеты система неработоспособна.
Исправлять CEdit не надо. Я сам исправлю это в своих программах в ближайшее время.

Re: Использование пути "/sys"

Posted: Wed Jan 05, 2022 4:12 pm
by vitalkrilov
akron1 wrote:vitalkrilov, спасибо за информацию, мне всегда казалось, что "/sys" это синоним для "/rd/1" и без образа дискеты система неработоспособна.
Исправлять CEdit не надо. Я сам исправлю это в своих программах в ближайшее время.
Ну я уже исправил и у себя протестировал: все работает. Раз не надо -- тогда заливать это на SVN не буду. Могу сюда, если нужно, скинуть исправленные исходники.
Там нужно было исправить, очевидно, "/rd/1" на "/sys". И еще в файле KOSAPI.ob07:356 нужно было в функции GetStr обновить аргумент длины с 10 на 9 (иначе программа вылетает с ошибкой, которую ядро в Board'e показывает).

Re: Использование пути "/sys"

Posted: Wed Jan 05, 2022 8:13 pm
by Leency
vitalkrilov
Cпасибо, что занялся этим.

Кстати...)
Сейчас можно подключать только одну дополнительную директорию (и это /kolibrios/) и возможно это ограничение на лишь одну нужно убрать, чтобы можно было создавать свои пути вроде %PATH%, %WIN% и т.д. что было бы полезно, например, для компиляторов.
На обсудить.

Re: Использование пути "/sys"

Posted: Wed Jan 05, 2022 8:31 pm
by vitalkrilov
Leency wrote:Сейчас можно подключать только одну дополнительную директорию (и это /kolibrios/) и возможно это ограничение на лишь одну нужно убрать, чтобы можно было создавать свои пути вроде %PATH%, %WIN% и т.д. что было бы полезно, например, для компиляторов.
Я думаю, что такая возможность была бы удобной.
Но не будет ли это сильно влиять на скорость работы системы (я еще не смотрел, как это реализовано)?
И, наверное, нужно будет посмотреть, насколько рано во время запуска системы будет появляться доступ к этим доп. директориям (не будут ли некоторые приоритетные программы запускаться раньше инициализации таких директорий и пытаться обращаться к ним).

Re: Использование пути "/sys"

Posted: Wed Jan 05, 2022 8:35 pm
by punk_joker
Leency wrote: Сейчас можно подключать только одну дополнительную директорию (и это /kolibrios/) и возможно это ограничение на лишь одну нужно убрать, чтобы можно было создавать свои пути вроде %PATH%, %WIN% и т.д. что было бы полезно, например, для компиляторов.
На обсудить.
Думаю в ядре стоит оставить только один дополнительный системный каталог. Только сделаить так, чтобы он мержился в /sys. т.е обращаемся к /sys, ядро сначало ищет в /kolibrios если она примонтирована, если нет, то идет в оригинальный /sys. Ну это так концепция которая требует размышлений.
Или реализовать симлинки как линукс, надо только глянуть реализовываются они на уровне ядра или ФС.

Re: Использование пути "/sys"

Posted: Wed Jan 05, 2022 8:36 pm
by Leency

Code: Select all

т.е обращаемся к /sys, ядро сначало ищет в /kolibrios если она примонтирована, если нет, то идет в оригинальный /sys.
Отличная идея. Избавит от кучи возни.

Re: Использование пути "/sys"

Posted: Wed Jan 05, 2022 8:38 pm
by punk_joker
Еще вопрос по этой теме, а раньше разве не было еще fd0?

Re: Использование пути "/sys"

Posted: Wed Jan 05, 2022 8:41 pm
by vitalkrilov
punk_joker wrote:Еще вопрос по этой теме, а раньше разве не было еще fd0?
Он и сейчас есть. /fd/1 вроде.
Однако с ним баг в ядре (я еще не писал об этом, нужно будет куда-то это записать): при запуске в UEFI ядро создает пустой путь -- /fd/1, но как только любая программа запрашивает доступ к нему, он удаляется.

Re: Использование пути "/sys"

Posted: Wed Jan 05, 2022 9:02 pm
by punk_joker
vitalkrilov wrote: Однако с ним баг в ядре (я еще не писал об этом, нужно будет куда-то это записать): при запуске в UEFI ядро создает пустой путь -- /fd/1, но как только любая программа запрашивает доступ к нему, он удаляется.
Пишу сюда

Re: Использование пути "/sys"

Posted: Thu Jan 06, 2022 11:14 pm
by vitalkrilov
В #9583 исправил все обращения к /rd/1 на /sys, кроме:
  • документация к одному из драйверов (пока что не встретил исходник);
  • /build.txt: там рассказывается о том, как править kolibri.img. Туда, разве что, надо добавить текст о том, что на HDD достаточно просто изменить нужный файл в /sys :) ;
  • /kernel: я не буду там ничего менять из-за того, что пока не так хорошо разбираюсь в ядре. Тут скорее просьба к тем, кто ядро пишет, чтобы проверили на всякий случай;
  • /programs: это уже следующая цель для исправлений, которой теперь займусь;
В итоге: исправления в исходниках драйверов (также пофикшено логирование одного из старых драйверов), документация на всех языках теперь использует /sys.

Re: Использование пути "/sys"

Posted: Fri Jan 07, 2022 7:08 pm
by vitalkrilov
#9585 и #9587: исправил всё оставшееся (в /programs).
В итоге осталось совсем чуть-чуть (что я выше написал). Возможно в /programs некоторые программы все ещё используют /rd/1 (старые версии фасма в programs/develop/fasm/tags/ВЕРСИЯ; некоторые файловые менеджеры, к примеру kfm, могут туда обращаться в крайнем случае). Я исправил все то, что точно должно было относиться к /sys.