Kanał - ATNEL tech-forum
Wszystkie działy
Najnowsze wątki



Teraz jest 29 mar 2024, o 02:11


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 3 ] 
Autor Wiadomość
PostNapisane: 18 lip 2020, o 16:08 
Offline
Nowy

Dołączył(a): 15 gru 2014
Posty: 13
Pomógł: 0

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
Obrazek
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) )
Obrazek
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 )



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 18 lip 2020, o 18:13 
Offline
Użytkownik

Dołączył(a): 17 mar 2020
Posty: 70
Pomógł: 5

lukasz_0xfff napisał(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 )


Build dla ESP32 ma mega fajną dokumentacje i bazuje na CMAKE z dodatkową wartwą komend od producenta - utworzyli koncepcje "komponentów", które są konfigurowalne i mają swoje pliki "CMakeList" i to tam się podaje jakie pliki mają być kompilowane, jakie pliki to interfejsy dla innych modułów, a jakie tylko dla użytku wewnątrz takiego komponentu.

Oczywiście wiesz, że w przypadku tego układu i domyślnego toolchaina od producenta pod spodem już i tak działa zmodyfikowana wersja FreeRTOSa? I to co u siebie nazywasz "egzekutor" to "scheduler", żądania aplikacji to "syscalle" - a i jeszcze kwestie priorytetów itp. Aczkolwiek takie rzeczy możesz podejrzeć ze źródeł linuxa - wszystko jest dostępne i podpatrzeć niektóre rozwiązania - tak samo kwestia o którą pytałeś odnośnie innych modułów itp - to też jest do podejrzenia.

Generalnie ambitne cele sobie postawiłeś i każdy punkt składowy będzie miał dużo tematów "dookoła" o których jeszcze nie myślałeś - ale powodzenia :)

Cały projekt potem będziesz opisywał? Publikował na githubie postępy?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 19 lip 2020, o 01:01 
Offline
Nowy

Dołączył(a): 15 gru 2014
Posty: 13
Pomógł: 0

Dzięki za odpowiedź muszę więc zgłębić dokumentację i to jak obsługiwać, już miałem próby z plikami CMakeList ale na razie bez sukcesów ale dobrze wiedzieć że tędy droga. Tak jestem świadom, że to obija się o wiele pojęć dookoła, jak pisałem to tylko mały wycinek całości co opisałem. Tak byłem świadomym podanej przez ciebie terminologii może ewentualnie mniej kojarzyłem syscall ale jest to zupełnie logiczna nazwa. Nie zastosowałem jej tylko ze względu na to aby nie zaciemnić odbioru i ewentualnie żeby czegoś nie pomylić przypadkiem.
Tak wiem FreeRTOS siedzi tam od początku i nie mamy wprost dostępu do startu procesora a jednie uruchomieniem appmain przez tego os’a. Z tego też powodu nie mam zamiaru, nie skorzystać z tego systemu szczególnie, że jak pisałem pewnie w przyszłości zemine architekturę.
Na pewno chcę udokumentować ten system szczególnie jeśli chodzi o tworzenie w nim aplikacji ale także jego funkcjonalności. Właśnie to jest jedna z idei która mi przyświeca aby ktoś poza mną potrafił tego użyć. No nie chce szyć tego pod siebie szczególnie że to dość spory projekt i szkoda bym tylko ja mógł z niego korzystać.
Co do dokumentacji postępów myśle że bedzie, teraz nie powiem jeszcze w jakiej formie, ale myślę że zacznę od momentu gdy już system będzie w takim stanie że będzie można na nim cokolwiek pokazać. Chociaż może w trakcie budowania też ale nie obiecuję, no zapewne będzie jeszcze dużo kwestii do opanowania.
Myślę że binarki do wgrania i przystosowania będą udostępniane, ale to dopiero jak będzie to miało sens bo póki system nie będzie miał nawet zarysu to chyba nie ma sensu. Będzie też dokumentacja połączeń gdzie co podłączyć przy domyślnej konfiguracji może w przyszłości też opracuję jakąś płytę główną do tego sprzętu.
Wiem że przekrój tematów jakie przecina ten projekt jest olbrzymi od algorytmiki po sieci i wiele elementów/mechanizmów kernela systemu o których jeszcze nie myślę. W zasadzie chaczy prawie o każdą gałąź informatyki szeroko pojętej Będzie to bardzo złożone aż zastanawiam się czy w pamięci się zmieści.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
Wyświetl posty nie starsze niż:  Sortuj wg  
Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 3 ] 

Strefa czasowa: UTC + 1


Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zidentyfikowanych użytkowników i 3 gości


Nie możesz rozpoczynać nowych wątków
Nie możesz odpowiadać w wątkach
Nie możesz edytować swoich postów
Nie możesz usuwać swoich postów
Nie możesz dodawać załączników

Szukaj:
Skocz do:  
cron
Sitemap
Technologię dostarcza phpBB® Forum Software © phpBB Group phpBB3.PL
phpBB SEO