![[personal profile]](https://www.dreamwidth.org/img/silk/identity/user.png)
Мысль у меня бродит.
Ко мне периодически обращаются, спрашивают, как бы приспособить RetroBSD для нынешних микроконтроллеров. Я сам давно задался вопросом, только маленько ширшее. Ясно, что идея юникса не годится (потом объясню), но вероятно её можно как-то изменить, приладить к реалиям современных чипов. И натолкнул меня на мысль тот самый компьютер Агонь Лайт, точнее его операционка MOS. Глянул я исходники - фактически народ удачно сваял с нуля подобие CP/M. Нашёл я и клон CP/M, перепёртый кем-то на Си для прикола (x86_cpm_22_0_1.zip). Внезапно осознал, что это оно самое и есть. Ну то есть почти. Реализация бог с ней, а основополагающая идея правильная. Однозадачная операционка по типу CP/M или MS-DOS с поддержкой файловой системы. Но без исторических кривостей и странностей. Ровно то, что по сути хотят сторонники RetroBSD. Пусть всего одна задача, зато с файловой системой, динамическим загрузчиком, загружаемыми драйверами, подключением к сети (отдельный интересный вопрос).
Для конкретики покажу платку, которую я подобрал для такой разработки.


Плата называется Sparkfun Thing Plus RP2040. Тот же процессор, что и Raspberry Pico: два ядра Cortex M0+. Пока задействуем одно ядро, а второе позже пригодится для стека TCP/IP. Имеем 256 килобайт оперативной памяти, 128 мегабайт Flash-памяти и гнездо для внешней SD-карточки.
Представьте, что вы подключаете платку через USB к компьютеру, открываете окошко доступа к консоли (виртуальному или физическому серийному порту) и видите знакомое приглашение:
Система должна получиться более-менее переносимой. На этой платке свет клином не сошёлся, да и на микроконтроллере тоже. Два основных требования к процессору: размер RAM хотя бы в несколько десятков килобайт, и Flash-память, прямо отображаемая на адресное пространство процессора.
Как всё это будет фунциклировать - уточню позже, а пока перечислю основные компоненты:
Ко мне периодически обращаются, спрашивают, как бы приспособить RetroBSD для нынешних микроконтроллеров. Я сам давно задался вопросом, только маленько ширшее. Ясно, что идея юникса не годится (потом объясню), но вероятно её можно как-то изменить, приладить к реалиям современных чипов. И натолкнул меня на мысль тот самый компьютер Агонь Лайт, точнее его операционка MOS. Глянул я исходники - фактически народ удачно сваял с нуля подобие CP/M. Нашёл я и клон CP/M, перепёртый кем-то на Си для прикола (x86_cpm_22_0_1.zip). Внезапно осознал, что это оно самое и есть. Ну то есть почти. Реализация бог с ней, а основополагающая идея правильная. Однозадачная операционка по типу CP/M или MS-DOS с поддержкой файловой системы. Но без исторических кривостей и странностей. Ровно то, что по сути хотят сторонники RetroBSD. Пусть всего одна задача, зато с файловой системой, динамическим загрузчиком, загружаемыми драйверами, подключением к сети (отдельный интересный вопрос).
Для конкретики покажу платку, которую я подобрал для такой разработки.


Плата называется Sparkfun Thing Plus RP2040. Тот же процессор, что и Raspberry Pico: два ядра Cortex M0+. Пока задействуем одно ядро, а второе позже пригодится для стека TCP/IP. Имеем 256 килобайт оперативной памяти, 128 мегабайт Flash-памяти и гнездо для внешней SD-карточки.
Представьте, что вы подключаете платку через USB к компьютеру, открываете окошко доступа к консоли (виртуальному или физическому серийному порту) и видите знакомое приглашение:
Диск С: находится в Flash-памяти микроконтроллера. Дальше стандартными командами DIR, CD и прочими бродите по диску и запускаете с него нужные программы. На внешней SD-карточке лежит диск A:. К нему тоже можно обращаться, переписывать файлы туда-сюда, вызывать программы. Активировать и деактивировать загружаемые драйвера. Создавать и запускать BAT-файлы, то есть скрипты. Редактировать и компилировать программы из исходников. Скачивать файлы из интернета, или наоборот, посылать в интернет.c:/> _
Система должна получиться более-менее переносимой. На этой платке свет клином не сошёлся, да и на микроконтроллере тоже. Два основных требования к процессору: размер RAM хотя бы в несколько десятков килобайт, и Flash-память, прямо отображаемая на адресное пространство процессора.
Как всё это будет фунциклировать - уточню позже, а пока перечислю основные компоненты:
- Командная оболочка, аналог /bin/sh в юниксе или cmd.exe в Windows.
- Файловая система exFAT.
- Набор системных вызовов, видимо подобие Posix.
- Динамический загрузчик, для связывания адресов в момент запуска программ.
- Механизм загружаемых драйверов.
no subject
Date: 2023-02-01 09:44 (UTC)Название с разделителем неудобное. Где теперь эти OS/2 и прочие. Гораздо лучше взять какое-нибудь древнее имя собственное от какого-нибудь эльфа, гнома или другого сказочного персонажа.
no subject
Date: 2023-02-01 09:54 (UTC)Были же всякие A/UX, RSTS/E, OS/360, OSF/1 и даже μC/OS-II.
no subject
Date: 2023-02-01 09:59 (UTC)no subject
Date: 2023-02-01 10:06 (UTC)no subject
Date: 2023-02-01 10:12 (UTC)И смотреть надо, опять же, не на программистов, а на их начальников.
no subject
Date: 2023-02-01 10:24 (UTC)no subject
Date: 2023-02-01 18:00 (UTC)no subject
Date: 2023-02-01 10:18 (UTC)no subject
Date: 2023-02-01 10:25 (UTC)no subject
Date: 2023-02-01 10:41 (UTC)no subject
Date: 2023-02-01 12:38 (UTC)no subject
Date: 2023-02-01 14:24 (UTC)no subject
Date: 2023-02-02 01:21 (UTC)no subject
Date: 2023-02-02 01:37 (UTC)no subject
Date: 2023-02-01 12:39 (UTC)Это я к вопросу "как-бы приспособить"
no subject
Date: 2023-02-01 18:18 (UTC)no subject
Date: 2023-02-01 18:38 (UTC)no subject
Date: 2023-02-01 13:39 (UTC)Ну так все равно же драйверы и прерывания, и чо бы сразу M/PM не всобачить. А то народ на прерывания будет вещать задачи.
no subject
Date: 2023-02-01 18:20 (UTC)Был такой многозадачный DOS на писишках, но популярностью не пользовался.
no subject
Date: 2023-02-01 21:54 (UTC)no subject
Date: 2023-02-01 22:07 (UTC)Многозадачная версия CPM.
no subject
Date: 2023-02-01 17:18 (UTC)no subject
Date: 2023-02-01 22:50 (UTC)https://www.theregister.com/2022/12/16/gcc_13_will_support_modula2/
no subject
Date: 2023-02-02 00:24 (UTC)Программы под POSIX предполагают, что это UNIX или Linux и используют процессы.
no subject
Date: 2023-02-02 00:45 (UTC)no subject
Date: 2023-02-02 01:36 (UTC)no subject
Date: 2023-02-02 06:08 (UTC)На писишках уже было не такое разнообразие. Один-два флопика, один-два диска. Помнить типы дисков уже не имело смысла.
На микроконтроллерах будет один, максимум два диска: внутренняя Flash-память и внешняя SD-карточка. Мне кажется, букв A и C будет достаточно.
no subject
Date: 2023-02-02 08:18 (UTC)Иначе пользователю для выполнения любого действия в shell придётся прибивать тот, возможно важный, процесс, ради которого он и использует микроконтроллер.
no subject
Date: 2023-02-02 08:45 (UTC)Интересно
Date: 2023-02-02 20:46 (UTC)no subject
Date: 2023-02-02 21:03 (UTC)no subject
Date: 2023-02-06 12:42 (UTC)Да, опционально для экономии памяти, кое-что нужно сделать с .data. При загрузке (exec) исполняемого файла изменяемые данные .data продублировать в своп область. А константными программа будет оперировать с Flash. Для такой особенности нужно немного переписать Си, как кажется. Кому-то далеко до этого. Но если закончить разбираться с ar+ld+as+stip, то может за полгода или год до Си, возможно, сначало изучив Би, вполне добраться. И ничего лучшего, чем понять
и проститьи портировать, наверное, нет (для усвоения материала).P.S. Сам такое сделал бы давно, но, увы, с 2018 узнал(диагностировали), что давненько хожу с так называемым орфанным недугом. Вот-то оно и работается мне не очень, не более 1-2 часа в день. Делаю все как получается. А как хотелось
рыбкивездесущего Unix для микроконтроллеров!!!no subject
Date: 2023-02-07 06:33 (UTC)Недавно его затащили на ARM Cortex-M4 под названием DiscoBSD: https://github.com/chettrick/discobsd
Но как-то Юникс не приживается. Есть несколько причин.
1. Для Юникса требуется место для swap, а его нету. Без swap не реализуется основополагающий механизм создания процессов fork(). Хотя бы два мегабайта нужно для RetroBSD. Приходится создавать специальный раздел на SD-карточке. В результате без SD-карточки ядро вовсе не может стартовать.
2. Никого не радует необходимость форматировать карточку как юниксную файловую систему. А переделать ядро на ExtFS не выйдет, там гораздо больше памяти потребуется.
3. Доступ к периферии микроконтроллера из юниксного процесса весьма затруднённый. Условно говоря, под каждый чих приходится драйвер писать. Просто так из программы ножками GPIO не подёргаешь.
Многозадачность как раз для народа некритична. Думаю, что подобие CP/M или PC-DOS подошло бы лучше.
no subject
Date: 2023-02-07 08:57 (UTC)Про него в первом посте и писал, в общем-то.
Насчет второго, не знаю, полезная инфа или нет, но было вот такое: https://ru.wikipedia.org/wiki/UMSDOS
Насколько возможно отображать Юникс filesystem на FAT? Это вопрос.
А что касается третьего, наверное, есть и другая крайность, не стандартизированный доступ, порождает не очень хорошую переносимость. Ну к примеру, демосценеров, их собственно можно понять, скорость абсолютно важна, задействование напрямую специфических особенностей железа, это да. Насчет прямого доступа к USART,I2C,... Не знаю. Библиотеки всех спасут! Ну если народу зайдет, то и ладно, на здоровье!
Я когда в немного в истории железа копался, часто натыкался, на непростую генеологическую линию аэсок, много слухов ходит, якобы CP/M это есть как бы упрощенная RT-11, созданная Килдалом, а MSDOS это такоЕ некое творение Франкенштейна, все что смогли заимствовать сначала с CP/M, а потом Xenix, по частям.
А назвать аэску можно Microcontroller Control Program(MCP), по приколу, это во-первых напоминает CP/M, буквы переставлены немного, а во-вторых напоминает главпрограмму из фильма TRON. То же есть кому-то чо вспомнить.