• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Aplikacje bootowane z płytki (działające bez systemu operacyjnego)

Object Storage Arubacloud
+1 głos
485 wizyt
pytanie zadane 27 października 2017 w C i C++ przez Jakub 0 Pasjonat (23,120 p.)
Witam, dzisiejsze pytanie zadałem z czystej ciekawości, wiem że może być ono śmieszne i niedojrzałe ale na prawdę nie znam na nie odpowiedzi. Mianowicie każda aplikacja działa na jakimś systemie operacyjnym (lub wielu). Sam coś tam programuje w c++, w skład programu wchodzi wiele bibliotek systemowych co ją ogranicza do konkretnej technologii (to chyba że dbamy o to by kod był przenośny). Mimo wszytko nie możemy sobie uruchomić takiej apki bez żadnego systemu (no bo system zarządza zasobami pamięci programów itd...). Mimo wszystko sam system operacyjny jest uzależniony od sprzętu a nie oprogramowania (bo sam jest bardzo nisko poziomowym programem). Oczywiście nie chodzi mi o to że chce szczegółowo wiedzieć jak działa system operacyjny (wiem że zawiera on programy sterowników w jądrze). Interesuje mnie to w jaki sposób pisze się programy niskiego poziomu takie jak OS czy BIOS/UEFI. Każdy powie że w assemblerze... No tak ale nawet assembler jest uzależniony od jakiegoś systemu: https://g.bialic.po.opole.pl/e_kurs/

Po za tym np UEFI czy różne OS'y powstały m.in w C czego już całkiem nie rozumiem. Był bym wdzięczny za odpowiedzi lub linki do jakiś artykułów na ten temat. Reasumując w jakiej technologii pisze się programy uruchamiane bezpośrednio w komputerze?
komentarz 27 października 2017 przez Jakub 0 Pasjonat (23,120 p.)
słyszałem, też o czymś takim jak programowaniu mikro kontrolerów. Czy to ma coś wspólnego z moim pytaniem?
komentarz 27 października 2017 przez Jakub 0 Pasjonat (23,120 p.)
no bo na przykład dokładnie zaprogramujemy działanie takiego sprzętu (mikro kontrolera), czy ten program można nazwać systemem operacyjnym?
komentarz 27 października 2017 przez Jakub 0 Pasjonat (23,120 p.)
https://pl.wikipedia.org/wiki/Raspberry_Pi -> to mnie bardzo zainteresowało
1
komentarz 27 października 2017 przez draghan VIP (106,230 p.)
Tak, programowanie mikrokontrolerów ma sporo wspólnego z Twoim pytaniem. Z tym że na uC również istnieją systemy operacyjne. :)

Pisząc program dla uC zazwyczaj możesz wybrać między językiem asemblera dla danego procesora, językiem C, często C++. Odpowiednio ustawiając rejestry dokonujesz konfiguracji kontrolera, np. ustawiasz częstotliwości pracy timerów czy tryby przetworników. Zbierasz dane z portów wejść, przetwarzasz je i wystawiasz na ich podstawie jakieś sygnały wyjściowe.

Raspberka to trochę inna półka - nie jest to typowy mikrokontroler, tylko mały komputer z wyprowadzonymi kilkoma GPIO. ;)
komentarz 28 października 2017 przez Jakub 0 Pasjonat (23,120 p.)
A co bardziej polecasz? Mikro kontrolery czy raczej coś w stylu Arduino czy Raspberk (chyba dobrze napisałem... :) ).
komentarz 28 października 2017 przez draghan VIP (106,230 p.)

Nie wiem, czego oczekujesz - więc nie mogę nic za bardzo polecić. Jeśli chcesz się rozejrzeć za jakimś mikrokontrolerem, to możesz wybrać w zasadzie z dwóch popularnych architektur.

  • AVR - bardzo popularne 8 bitowe ATtiny, ATmegi, ATxmegi (mogą być 16-bitowe). Można kupić "goły" kontroler, ale można również kupić któreś Arduino. Różnica w cenie ale i w łatwości wdrożenia: w Arduino masz wygodnie wyprowadzone piny i bardzo ułatwiające pracę IDE ze sporą liczbą bibliotek.
  • ARM - również popularne, lecz mniej (w zastosowaniach hobbystów) niż AVR. Kontrolery 32-bitowe, produkowane np. przez firmę STMicroelectronics. Oferują naprawdę spore możliwości, chociaż ceną za to jest skomplikowana obsługa takiego kontrolera. Tutaj również możesz kupić sam uC lecz również płytkę ewaluacyjną, np. Nucleo czy Discovery.

O Raspberry pytaj Eryka, bo ja nie miałem przyjemności się bawić malinką. :)

1 odpowiedź

+1 głos
odpowiedź 27 października 2017 przez Eryk Andrzejewski Mędrzec (164,260 p.)
edycja 27 października 2017 przez Eryk Andrzejewski
 
Najlepsza

Może brzydko robię, że robię reklamę swojego projektu, ale proszę: https://github.com/qwercik/bfOS

To jest bootowalny (działający bez osobnego systemu) interpreter brainfucka. Dołączyłem tam narzędzie generujące obraz dyskietki, po której zbootowaniu wykonuje się napisany przez użytkownika kod.

Kod chyba nie jest aż taki zły, może ma jakąś wartość edukacyjną laugh

A co do twoich pytań to już tłumaczę.

Generalnie, kody systemów operacyjnych, BIOSów, (U)EFI pisze się w C (czasem pewnie C++). Ale trzeba pamiętać, że C był projektowany jako język przenośny. Miał działać na komputerze z archtekturą X, na komputerze z architekturą Y - pewnie nawet z różnymi systemami. Architektury takie jak ARM, czy x86 różnią się między sobą, więc aby skomunikować się bezpośrednio ze sprzętem, na obu architekturach robi się to inaczej. Więc chcąc dokonywać takich rzeczy, trzeba się posłużyć językiem asemblera.

W języku asemblera pisze się też (zazwyczaj) wczesne partie bootloadera.

P.S.

Język asemblera nie jest tak do końca uzależniony od systemu - od systemu uzależnione są wywoływane przez Ciebie w twoim kodzie funkcje, czy przerwania. W linku który podałeś, wywoływane są funkcje WinAPI. Pisząc swój system, nie masz takich funkcji - musisz je napisać samodzielnie laugh

P.P.S.

A jakby Cię jakimś cudem zaciekawił mój śmieszny projekcik, to zapraszam tutaj: https://github.com/qwercik/brainfuckOS

To wersja druga, działająca w trybie chronionym i jeśli się uda, to będzie lepsza, z większymi możliwościami i tak dalej. cheeky

komentarz 27 października 2017 przez Jakub 0 Pasjonat (23,120 p.)
dzięki, już bardziej rozumiem na czym to polega. Oczywiście jeszcze nie zamierzam się brać za taki projekt bo nie znam do końca jeszcze c++ ale w przyszłości może... w ogóle interesuje mnie programowanie nisko poziomowe mimo że jeszcze nigdy tego nie robiłem :)

Co do projektu to bardzo ciekawy, jak długo go pisałeś? Z czym miałeś największy problem? (bo ja bym miał z interpreterem brainfucka :) ). Mam tylko pytanie czy znasz jakiś kurs mówiący od podstaw programowania w asm aż po wykorzystanie go w takich projektach (może być po angielsku).
1
komentarz 27 października 2017 przez Eryk Andrzejewski Mędrzec (164,260 p.)

Oczywiście jeszcze nie zamierzam się brać za taki projekt bo nie znam do końca jeszcze c++

Nie trzeba znać C++ wcale , wystarczą podstawy języka asemblera i już da się coś napisać. No ale ja wolę pisać w języku wyższego poziomu niż język asemblera, więc ta nowa wersja będzie napisana w C++. wink

Co do projektu to bardzo ciekawy, jak długo go pisałeś?

Szczerze to nawet nie pamiętam, pewnie kilka dni. Zresztą jest historia commitów na githubie, można tam sprawdzić.

Z czym miałeś największy problem? (bo ja bym miał z interpreterem brainfucka :)

Sam interpreter brainfucka jest dość prosty do zrobienia (najtrudniejsze są pętle) - z tymi pętlami miałem w pewnym momencie własnie spory problem, bo okazało się że nie działają jak należy - 'normalne" działały spoko, natomiast niektóre zagnieżdżone, bo też nie wszystkie, zaczynały szwankować (wielkie dzięki dla Patrycjerza za pomoc: dzięki niemu dowiedziałem się co z nimi nie tak - samemu coś nie mogłem wykombinować wink).

Mam tylko pytanie czy znasz jakiś kurs mówiący od podstaw programowania w asm aż po wykorzystanie go w takich projektach (może być po angielsku).

Powiem Ci szczerze, że niezbyt. Sam języka asemblera zbytnio dobrze nie umiem i się z tym nie kryję, znam ledwie jakieś podstawy, które wystarczają do pisania potrzebnego mi kodu. W każdym razie pamiętam, że zerkałem dawno temu na kurs Gynvaela: https://www.youtube.com/watch?v=OTLyD2EEN0w&list=PL7CA8FE35B665D4DD

Coś tam chyba na kurs bogdro (ale to jest asm 16 bitowy): http://bogdro.fulba.com/

A tak to nie bardzo. Sporo szukałem w necie jak coś zrobić, przeglądałem różne kody i jakoś tak ogarnąłem.

Sam język asemblera (mówię o architekturze x86, bo w innych nic nie pisałem) jest stosunkowo prosty do opanowania. Masz kilka (set - ale używa się zazwyczaj kilka, kilkanaście) instrukcji procesora, które działają w prosty sposób (nie ma tutaj zbytnich abstrakcji, w końcu procesor wykonuje operacje niskopoziomowo wink). Do tego przydałoby się opanować jak mniej więcej wygląda i działa architektura na której piszemy, jakieś konwencje wywoływania funkcji (fastcall, cdecl, stdcall).

W sumie nie wiem jak Ci więcej pomóc: jeśli chodzi o pisanie OSa (czy ogólnie zapoznanie się z x86), to na pewno polecę jeszcze kilka źródeł:

  • Dokumentacja Intela do IA-32 (poszukaj w Internecie, powinieneś bez problemu znaleźć) - tylko nie przeraź się jej objętością. laugh Składa się ona chyba z trzech tomów. Jeden omawia ogólnie samą architekturę, drugi to zestaw instrukcji procesora (jest tego duuuużo, no ale na co dzień używa się raczej ich niewielkiej ilości), a trzeci to jakieś informacje dla programisty (np. jak wygląda struktura GDT, jak ją załadować i tak dalej).
  • OSDev.org - świetna strona: wiki oraz forum, zrzeszające hobbystów. Możesz się z tej strony wiele dowiedzieć, także polecam
  • Kanał IRC #osdev na freenode - po angielsku, ale jest też polski kanał #osdev.pl, tylko ruch troszkę mniejszy. cheeky

 

1
komentarz 27 października 2017 przez Eryk Andrzejewski Mędrzec (164,260 p.)

Aha, jeśli masz ochotę, to zapraszam na IRCowe pogaduchy. cheeky

komentarz 28 października 2017 przez Jakub 0 Pasjonat (23,120 p.)

dzięki za złożoną odpowiedź :), nie miałem pojęcia że...

nowa wersja będzie napisana w C++

takie rzeczy można napisać w c++, myślałem że jedynie assembler i C nadaje się do takich rzeczy. Ogólnie mówię że znam słabo c++ nie pod tym względem że jest on niezbędny do pisania takich rzeczy. Po prostu w cpp ćwiczę algorytmikę, programowanie obiektowe itd... A ciężko by było napisać coś złożonego w asm mając problem z takim samym rozwiązaniem w czytelniejszym c++... Wiem że już bardzo przeciągam temat ale mam ostatnie małe pytanko, czy można w jednym czasie uczyć się c++ (podstawy z kursu MZ znam) i do tego w wolnym czasie poznawać inne rzeczy takiej jak assembler czy programowanie webowe?  

komentarz 28 października 2017 przez Jakub 0 Pasjonat (23,120 p.)
Ciekawe po co komu pisać w winApi pod Assembler... :)

Podobne pytania

–2 głosów
0 odpowiedzi 462 wizyt
0 głosów
1 odpowiedź 106 wizyt

92,551 zapytań

141,393 odpowiedzi

319,523 komentarzy

61,936 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...