Tworzenie systemu operacyjnego może i nie jest takie popularne aktualnie ale ja chciałem się podjąć tego zadania. Przychodzę tu dzisiaj aby zadać kilka pytań, z nadzieją że znajdzie się jakaś miłe osoby które podzielą się doświadczeniem w tej kwestii, a także jakie macie opinie na ten temat.
Tak więc przejdźmy najpierw do platformy i ogólnego założenia czy też wizji. Tak więc platforma startowa którą opracowałem składa się z dwurdzeniowego procesora esp32 na taktowaniu 160MHz jak mnie pamięć nie myli( wiem że może być więcej ale przy maksymalnym taktowaniu, coś nie chciał mi się zachować stabilnie ale to może kwestia zasilania ). Pamięć masową mają stanowić karty sd( może być więcej niż jedna, myśle że tak ze dwie minimalnie ) a raczej micro sd. Procesorem graficznym ma być tu FT810(bardzo prawdopodobnie będzie obsługiwana cała rodzina FT8xx). Natomiast kwestia adio mają być urządzenia działające na magistrali I2S( aktualnie posiadam UDA1334A ), w tym momencie myślę tylko o wyjściu audio, ale nie wykluczam też wejścia w przyszłości. Zegar czasu rzeczywistego będzie zapewne jakiś układ na magistrali i2c ( aktualnie posiadam DS3231 więc pewnie ten układ będzie domyślnie obsługiwany ).
Układami wejścia do komunikacji z użytkownikiem miałby być zarówno ekran dotykowy jaki może być obsłużony przez FT8xx, jak i klawiatura która pierwotnie ma współpracować z procesem przez UART( mam przeróbkę zwykłej klawiatury bluetooth na taką komunikującą się uartem jest ona oparta na atmdze ). Przy czym przy założeniu, że chce aby system mógł być użyty w troszkę innej kombinacji sprzętowej, cały system ma mieć możliwość obsługi tylko klawiaturą ( w przyszłości dodam obsługę innych klawiatur np na ps2 czy na bluetooth, nie wiem czy usb bo pewnie potrzebowałbym jakiegoś kontrolera host usb )
Całe urządzenie (przynajmniej na razie to tak widzę) miałby formę małego laptopa
To teraz małe podsumowanie platformy dla tych do których blok tekstu nie przemawia
Platforma bazowa
Teraz przejdźmy do wizji systemu. Jak już po opisie można wywnioskować będzie to systemem z interfejsem graficznym( FT ze spokojem daje nam takie przywileje )
System ma zapewniać obsługę kont i ich prostych uprawnień( już na poziomie jądra ) Natomiast powłoka zapewnia pulpit którego funkcjonalności nie będę jeszcze wymieniał gdyż będzie ich dużo i pewnie będą się jeszcze zmieniały. Na pewno będzie można mieć skróty do aplikacji i plików być może jakiś system widgetów( pogoda kalendarz itd )
Przejdźmy więc do aplikacji tu mam dobre i złe wieści. Dobrę są takie, że przewiduje w systemie obsługę aplikacji z zewnątrz( na karcie np sd ) co więcej przewiduje wsparcie toolchaina do tworzenia aplikacji( kompilator będzie wręcz częścią systemu ). Co do języku co pewnie was ciekawi będzie to prawdopodobnie, język bliski C rozszerzony o jakieś aspekty obiektowości( ale twego nie jestem jeszcze pewien ) , będzie też assembly dla wytrwałych i chętnych stworzenia kompilatorów innych języków
Teraz jest ta zła wiadomość, aplikacje będą pracować na wirtualnym CPU. Zapewne zastanawiasz się czemu. Odpowiedź nie jest prosta ale też nie aż tak trudna. Wpierw chcę zaznaczyć, że nie wnika to z tego, że nie chce się zgłębiać w możliwości proca i osiągnąć aplikacje pracujące na fizycznym procesorze( chociaż nie wiem czy esp32 ma w ogóle takie możliwości, może ktoś wie ? )
Są inne powody jest ich kilka:
Zacznijmy od tych mniej ważnych dla mnie, ponieważ sprzętowo dałoby się je rozwiązać, otóż bezpieczeństwo i stabilność systemu. Jak wiemy w systemie gdzie dopalać możemy kod nie skompilowany przez nas miło byłoby gdyby awaria programu nie powodowała awarii systemu, lub też dokonania jakiś szkód w naszym cyfrowym dobytku. O wiele prościej jest to zapewnić w wirtualnym procesorze( szczególnie jeśli fizyczny procesor nie ma zestawu instrukcji do tego dedykowanych ) lecz nie znaczy to, że jest to proste.
A teraz najważniejszy powód, po jakimś stadium rozwoju planuję się pożegnać z procesorami esp32( teraz już dostrzegam ich wady ) i prawdopodobnie przybić piątkę z jakąś rodziną mikrokontrolerów ARM. Co za tym idzie nie chciałbym by cały powstały soft do tego momentu trafił szlak (a nie mam takiego mocy jak Apple żeby sobie tworzyć rosetty(dla niezorientowanych to taki emulator poprzedniej architektury na której bazował Apple na swoim sprzęcie )) i tak system to już duże przedsięwzięcie.
Dobrze teraz jeszcze kwestie tego co sam system zapweni. Na pewno będzie parę appek wbudowanych w tym na pewno terminal( do sterowania systemem ),
jakiś eksplorator plików, media player( na początku wav, potem jeszcze mp3, i może nawet jakiś format wideo ), edytor tekstowy i środowisko do programowania to będą aplikacje wbudowane w system. W przyszłości na pewno myślę też o jakiejś prostej przeglądarce i czytniku pdf. Największym chyba szczytem byłoby opracowanie apki która potrafi współgrać z youtube ale to może być fantazja
Zapewne zdążyliście już dostrzec, iż jest to bardzo rozbudowane. Sam zastanawiam się czy esp32 pomieści to wszystko jak tak teraz to zapisałem ale najwyżej aplikacje zostaną przeportowane na wirtualnym cpu i będą na zewnętrznej pamięci.
To teraz może trochę o realizacji z racji na to, że jest tego masa posłużę się już częścią gotowych rzeczy mam nadzieję że nikt się nie urazi tym. Wpierw jeśli chodzi o przełączanie zadań i ich kolejkę posłużę się FreeRTOS( w przyszłości na przejściu na inną architekturę mam zamiar zastąpić ten os własną implantacja ) ale i tak bardzo go rozszerzę o własny manager czasu procesora i zasobów a także mechanizm interfejsów( o tym jeszcze później )
Skorzystam jeszcze z gotowej biblioteki do obsługi kart sd z systemem plików FAT32 chociaż pragnę go poszerzyć o system uprawnień.
[Uwaga pytanie pierwsze]
I tu zwracam się z pierwszym pytaniem czy uważacie że zmodyfikowany FAT32 będzie dobrym wyborem czy jednak wybrać coś innego może stworzyć samemu chociaż przy własnej realizacji nie wiem czy starczyłoby mi czasu
No i to by było na tyle z gotowców, mi pozostaje zarządzanie zasobami, wirtualny cpu, system interfejsów, powłoka systemowa w tym subsystem kontrolek. Dalej opracowanie aplikacji które wymieniłem już wyżej jak i toolchaina do tworzenia aplikacji na ten system. [Uwaga pytanie drugie]
I tu pytanie dla was bardzo dedykowane. Z racji na to że nie jest to mój pierwszy systemik chociaż pierwszy był mniej złożony(tylko tryb tekstowy na lcd 20x4 znaki i atmedze128) ale miał wielki mankament, był szyty zupełnie pode mnie. A więc niektóre rzeczy były na szybko jak i mało zrozumiałe dla kogokolwiek poza mną więc nie nadawał się on do udostępnienia( no i miał parę błędów zaszytych głęboko w projektowaniu jego ). Ale w tym przypadku nie mam zamiaru tego błędu popełniać , chce by i wyście mogli się tym pobawić poeksperymentować.
I tu jest pytanie bo pewnie znaleźliby się śmiałkowie którzy chcieliby zrobić platformę po swojemu. I temu mogę otworzyć furtkę myślicie jak? A no budując wszystkie sterowniki na interfejsach które mogą być też obsługiwane przez moduły wykonane przez wirtualny procesor, co daje możliwość zastąpienia domyślnego sterownika innym dedykowanym sterownikiem (a więc i innym układem peryferyjnym! ) Co znaczy że śmiałkowie mogli by użyć innego układu graficznego czy też klawiatury. I pytanie brzmi czy mam to implementować czy ktoś ma chęci się bawić w to?
Bo jest jeszcze jedna kwestia dodanie tego spowoduje drobne zmniejszenie wydajności sterownika wbudowanego a wiadomo iż w przypadku sterownika z zewnątrz obciążenie też będzie nieco większe( procesora ).
[Uwaga pytanie trzecie]
Teraz kieruje pytanie do osób doświadczonych programistycznie( ale miło będzie usłyszeć każdą opinie, więc jeśli ktoś czuje że może coś dodać lub zmienić chętnie się o tym dowiem ) szczególnie jeśli chodzi o systemy.
Jaką formę interfejsów czy też jakiegoś łącznika można zastosować. Ja widzę to tak jest kolejka na której umieszcza się polecanie wysłane do interfejsu i jest proces który wykonuje żądania i jest usypia, jeśli żadnych nie ma do wykonania( domyślnie wbudowany program sterownika lub zastąpiony przez program wirtualnego procesora wykonującego kod obsługi danego żądania(dedykowany sterownik) )
Rysunek pokazuje mniej więcej jak widzę tą sprawę, co do pomarańczowego bloku to jest to po prostu narzędzie które ułatwi tworzenie aplikacji wbudowanych. Będzie to zbiór funkcji wydający konkretne żądania, co da nam efekt w którym używamy funkcji jak w zwykłej bibliotece obsługującej dane urządzenie. Po prostu daje to odczucie jakby pracowało się bez tego całego mechanizmu.
Ktoś może teraz zapytać ale czemu aplikacje wbudowane nie użyją po prostu funkcji z bibliotek ?. Niektórzy zapewne znają odpowiedź, dla tych którzy jednak mają wątpliwości odpowiadam. Z racji na to, że egzekutor będzie mógł być zamieniony na wirtualny procesor zamiast biblioteki aby obsługiwać inny sprzęt takie rozwiązanie spowodowałoby że aplikacje systemowe nie działałyby z innym sprzętem.
Ufff przebrnąłem przez to mam nadzieje, że nie zanudziłam na śmierć tym opisem
Liczę też że w miarę nakreśliłem obraz mojej wizji tego co chce zrealizować, choć zapewne domyślacie się, że to niewielki wycinek całości.
Teraz czekam na waszą odpowiedź, dodam tylko, że nie zbytnio interesują mnie przemowy dlaczego coś takiego się współcześnie nie opłaca czy nie ma sensu. Bez urazy oczywiście ja i tak to zrobię choćby miało wyjść tylko kawałek tego co opisałem bo jestem uparciuch
Jest jeden wyjątek od tego gdyby ktoś próbował stworzyć też własny systemik ale zakończyło się niepowodzeniem chętnie też o tym poczytam może dać mi to cenne wskazówki, które może mnie uratują też przed jakąś porażką. W ogóle jestem otwarty (jeśli macie jakieś swoje systemiki to pochwalcie się ) na wszelkie wskazówki i sugestie po to tu dziś do was piszę (: Poza tym jestem też ciekaw czy ktoś byłby chętny tego użyć, jak powstanie, co prawda nie mam zamiaru przynajmniej na razie sprzedawać żadnych platform do tego, ale myślę, że wykonanie tego we własnym zakresie, to będzie ciekawa przygoda( dodam tylko, że mój prototyp na razie nie ma żadnego robionego przeze mnie laminatu więc nie jest to takie trudne ) Wiem nie wychodzi to super tanio może nawet w praktyce taniej wyszła by malina( raspberry pi ) ale to jednak coś własnego.
Jeszcze jedno pytanie jak nazwać system macie jakieś propozycje chciałem użyć nazwy SamrtOS ale niestety jest zajęta
, hmm może po prostu Smart ? albo troszkę oszukańczo Smart OS( ze spacją to już coś innego
) Co myślicie?
ps
Wiem, że może robienie systemu z graficznym interfejsem jest drobnym szaleństwem na mikrokontrolerze ale mam chce spróbować a i w takim środowisku zaczerpnę wiedzy o tworzeniu systemów jest to z resztą na pewno jeden z celów.
I tak wiem może w was się coś buntować bo w końcu używam tu innego systemu pod spodem. Ale jak już pisałem będzie on przeze mnie zmodyfikowany rozszerzany więc myślę że będzie to już własny indywidualny twór( pierwsze windows’y miały w sercu DOS’a
)
I tu jeszcze pytanko bonusowe czy ktoś mierzył się z toolchaniem na windowsa dla esp32 dla języka c oczywiście, jeśli tak to mam krytyczne pytanie jak ujarzmić tą bestie by w projekcie mieć pliki(*.c i *.h) w innym miejscu niż folder z main( w sensie na przykład w podfolderach bo coś nie chce to u mnie kompilator tego nie do końca je widzi )