Linux_embedded_cz1.pdf
(
296 KB
)
Pobierz
Wprowadzenie do Linux’a embedded
KURS
Wprowadzenie
do Linux’a embedded
Tabela 1. Minimalne wymagania syste-
mowe Linuxa z jądrem 2.6.x
Procesor: 32 – bitowy (ARM, MIPS, PPC)
Taktowanie procesora: 60MHz
Pamięć RAM: 4MB
Pamięć masowa (FLASH/Karta SD): 2MB
Współczesne oprogramowanie urządzeń powszechnego użytku staje
się coraz bardziej skomplikowane. Nowoczesne urządzenia mają
gra
fi
czny interfejs użytkownika, najczęściej dotykowy, coraz bardziej
skomplikowane interfejsy komunikacyjne, takie jak WiFi, USB czy
Ethernet. Dostępne funkcje oprogramowania stwarzają nam takie
możliwości, o których kilka lat temu można było tylko marzyć.
Urządzenia stają się coraz bardziej przyjazne dla użytkownika
i coraz bardziej kolorowe. Kto by przypuszczał że kupując
współczesny telefon np. z systemem Android, kupujemy urządzenie
o wydajności komputera biurkowego sprzed kilkunastu lat, który
możemy zmieścić w kieszeni? Niestety coraz większe skomplikowanie
oprogramowania stawia coraz to nowe wyzwania programistom
i konstruktorom, i dlatego Ci coraz chętniej sięgają po systemy
operacyjne. Jednym z nich jest Linux embedded.
Tabela 2. Zalecane wymagania syste-
mowe Linuxa z jądrem 2.6.x
Procesor: 32 – bitowy (ARM, MIPS, PPC)
Taktowanie procesora: 200MHz
Pamięć RAM: 32MB
Pamięć masowa (FLASH/Karta SD): 32MB
dzania pamięcią MMU, oraz dużą pamięcią
RAM. Z uwagi na znaczny spadek cen, kom-
ponenty niezbędne do budowy prostego
systemu mikroprocesorowego dla systemu
Linux możemy nabyć w cenie dużego mi-
krokontrolera jednoukładowego.
O ile niegdyś w ramach małej fi rmy na-
pisanie od postaw skomplikowanego opro-
gramowania było całkiem realne, o tyle
dziś już coraz trudniej temu podołać. Ko-
nieczność obsługi kolorowych wyświetla-
czy LCD, paneli dotykowych i skompliko-
wanych interfejsów powoduje, że obsługa
tych wszystkich peryferiów wykonywana
na „piechotę” poprzez dostęp do rejestrów,
bez żadnych dodatkowych bibliotek, jest
w zasadzie nie do wykonania w sensownym
czasie. W przypadku, gdy projekt jest sto-
sunkowo prosty, możemy skorzystać z do-
datkowych bibliotek coraz częściej dostar-
czanych przez producentów mikrokontro-
lerów. W przypadku większych projektów
takie podejście również okazuje się nie-
wystarczające. Brak jednolitego interfejsu
w świecie mikrokontrolerów powoduje, że
większość standardowego oprogramowania
(na przykład serwer www z szyfrowaniem
SSL) będziemy musieli utworzyć samo-
dzielnie. Również brak ochrony pamięci
pomiędzy zadaniami/procesami powoduje,
że nawet mały błąd w kodzie powoduje za-
wieszenie się całego urządzenia, a o błędy
w dużym i skomplikowanym programie nie
jest trudno.
Rozwiązaniem wyżej wspomnianych
problemów jest użycie systemu operacyj-
nego znanego z większych komputerów
biurkowych. Dzięki temu zyskujemy me-
chanizm ochrony pamięci pomiędzy proce-
sami, gdzie błędnie działająca aplikacja nie
może zawiesić całego systemu. Dostajemy
również dostęp do wielu standardowych
bibliotek i programów, przez co możemy za-
oszczędzić wiele czasu na tworzenie czegoś,
co zostało wymyślone kiedyś. Obecnie naj-
lepszym systemem operacyjnym przezna-
czonym do zastosowania w urządzeniach
wbudowanych jest system Linux, z uwagi
na jego skalowalność, otwarty kod źródło-
wy, brak konieczności zakupu kosztownych
licencji oraz dostępność na w zasadzie każ-
dą platformę sprzętową. Linux potrafi dzia-
łać na bardzo różnych mikrokomputerach,
począwszy od małych systemów mikropro-
cesorowych, poprzez PC, do komputerów
typu
mainframe
. Dzięki temu zdobywa on
coraz większą popularność w urządzeniach
wbudowanych i jest już używany w 25% te-
lefonów komórkowych (Android).
Niestety, zastosowanie Linux’a wymaga
użycia dużego procesora z jednostką zarzą-
Minimalny system
mikroprocesorowy potrzebny
do uruchomienia Linuksa.
Wymagania systemowe
W
tabeli 1
umieszczono minimalne wy-
magania systemowe które powinien speł-
niać system mikroprocesorowy, niezbędne
do uruchomienia systemu Linux z jądrem
w wersji 2.6.x, dla systemów wbudowanych.
Są wymagania minimalne, w przypadku
których ciężko mówić o komfortowej pracy.
Aby zapewnić w miarę komfortową pracę
należy zbudować system mikroprocesoro-
wy o parametrach co najmniej takich, jak
wymienione w
tabeli 2
.
Rysunek 1. Schemat blokowy przykładowego, minimalnego systemu mikroprocesoro-
wego dla Linux działającego na AT91RM9200
107
ELEKTRONIKA PRAKTYCZNA 4/2011
KURS
Istnieją również wersje linuksa, mogące
pracować bez MMU np. na procesorach
ARM7TDMI, czy CORTEX-M3, jednak są
one dużo mniej wydajne ponieważ MMU
jest emulowane, oraz nie zapewniają
odpowiedniego poziomu bezpieczeństwa.
Więc nie możemy go traktować jako
pełnoprawną wersję systemu Linux.
szczególne zadania kodowane są za pomocą
maszyn stanów w sposób jawny lub z wyko-
rzystaniem małych systemów RTOS, takich
jak FreeRTOS, czy ISIX, które zapewniają
nam wykonywanie zadań, bez konieczności
tworzenia podatnych na popełnienie błędu
maszyn stanu. Na
rysunku
3
przedstawio-
no model zależności pomiędzy sprzętem
a przykładową aplikacją wielozadaniową
dla mikrokontrolera jednoukładowego.
Aplikacja ma trzy zadania realizujące
różne funkcje. System RTOS jest odpowie-
dzialny za przełączanie zadań, synchroni-
zację międzyzadaniową, która jest realizo-
wana za pomocą semaforów i kolejek. Na-
tomiast obsługa sprzętu realizowana jest za
pomocą dodatkowej biblioteki dostarczonej
przez producenta mikrokontrolera. Aplika-
cje, RTOS oraz biblioteki obsługi sprzętu
działają w ramach jednej wspólnej prze-
strzeni adresowej, która jest określana pod-
czas etapu linkowania. Każdy element apli-
kacji, czyli poszczególne zadania, RTOS,
biblioteki obsługi sprzętu, mają dostęp do
całej przestrzeni adresowej oraz systemu
przerwań. W takim modelu jedno błędnie
działające zadanie, które np. nadpisało pa-
mięć w drugim zadaniu, jest w stanie spo-
wodować zawieszenie działania całego pro-
gramu. Jedynym ratunkiem jest wówczas
zadziałanie sprzętowego układu watchdog.
O ile w prostych programach możliwość
wyszukania tego typu błędów jest w miarę
łatwa, to wykrycie ich w przypadku rozbu-
dowanych aplikacji jest dość problematycz-
ne. Do niewątpliwych zalet modelu progra-
mowego ze wspólną przestrzenią adresową
Rysunek 2. Pamięć RAM zamontowana mikrokontrolerze (źródło:
www.wikipedia.org
).
Kluczowym elementem do prawidło-
wego działania systemu, jest dostępność
odpowiedniej ilości pamięci RAM, która
musi być znacznie większa, niż w przy-
padku aplikacji dla mikrokontrolerów jed-
noukładowych. Podobnie wygląda sprawa
z pamięcią, w której jest przechowywany
fi
rmware
urządzenia. Samo jądro linuk-
sa z włączoną obsługą sieci zajmuje około
1 MB. Dużo mniej krytycznym aspektem
jest częstotliwość pracy procesora, i nawet
przy taktowaniu rzędu 60 MHz, system
będzie pracował w miarę wydajnie. Przy
wyborze odpowiedniego procesora kluczo-
wym znaczeniem jest jego dostępność oraz
powszechność. Im bardziej układ jest popu-
larny i używany przez większą liczbę osób
, tym lepiej dopracowany i stabilny jest
kod jądra przeznaczonego dla niego Linu-
x’a. Również kluczowe znaczenie ma tutaj
cena układu, a wiadomo – im układ bardziej
powszechny, tym jego produkcja jest tań-
sza. Ponieważ obecnie na rynku systemów
wbudowanych królują mikrokontrolery
z rdzeniem ARM, w dalszej części tekstu
będziemy skupiać się wyłącznie na tej ar-
chitekturze. Na
rysunku
1
przedstawiono
przykładowy, minimalny system mikropro-
cesorowy z AT91RM9200, na którym może-
my w miarę komfortowo uruchomić system
linux:
Sercem układu jest dość leciwy mi-
krokontroler AT91RM9200, z rdzeniem
ARM920T do którego dołączono kluczowe
elementy, czyli pamięć SDRAM o wielkości
32MB. Pamięć masową dla systemu stanowi
pamięć Datafl ash 128KB, w której przecho-
wywany jest program ładujący (bootloader),
oraz karta SD na której przechowywany jest
właściwy system linux. Zamiast pamięci
Datafl ash i karty SDRAM w nowszych ukła-
dach np. 9260, SAM-G20 możemy użyć
pojedynczej pamięci typu NAND-FLASH.
Pozostałe elementy stanowią interfejsy ko-
munikacyjne i są w opcjonalne. Jak więc
widzimy, w stosunku do klasycznego roz-
wiązania układowego jedyną różnicą jest
konieczność dołączenia zewnętrznych
pamięci do układu. Koszt procesora, oraz
dodatkowych pamięci (SDRAM jest bardzo
tani) , jest porównywalny do większych mi-
krokontrolerów jedno-układowych a możli-
wości są nieporównanie większe. Niestety
problemem jest tutaj konieczność wyprowa-
dzenia całej magistrali , co znacząco kom-
plikuje konstrukcję. Jednak nadzieją są tu-
taj rozwiązania typu „Package on Package”,
umożliwiające umieszczenie pamięci nad
procesorem, i złożenie z nich jakby jedne-
go układu, np. rozwiązanie OMAP-DM510,
zawierającą pamięć DDR umieszczoną na
procesorze (
rysunek
2
).
Ochrona pamięci systemowej
i co z tego wynika, czyli różnice
pomiędzy pisaniem aplikacji
dla mikrokontrolera a aplikacją
przeznaczoną dla Linux’a
Oprogramowanie dla mikrokontrolerów
jednoukładowych
jest najczęściej pisa-
ne na dwa sposoby:
bez systemu opera-
cyjnego, gdzie po-
Rysunek 3. Model zależności pomiędzy sprzętem a przykładową
aplikacją wielozadaniową dla mikrokontrolera jednoukładowego
Rysunek 4. Model programowy dla projektów realizowanych
z użyciem systemu Linux
108
ELEKTRONIKA PRAKTYCZNA 4/2011
Wprowadzenie do Linux’a embedded
możemy zaliczyć prostotę dostępu do za-
sobów. W zależności od potrzeb, z każde-
go miejsca aplikacji możemy bezpośrednio
obsługiwać sprzęt poprzez bezpośredni do-
stęp do rejestrów układów peryferyjnych,
z poziomu zadania, biblioteki, czy samego
RTOS-a. Również przekazywanie danych
pomiędzy zdaniami jest łatwe, ponieważ
każde zadanie ma dostęp do tego samego
obszaru pamięci, który może być zapisy-
wany lub odczytywany. Podobnie wygląda
sprawa z systemem przerwań, choć najczę-
ściej jest ona realizowana przez oddzielny
zestaw funkcji OS-a.
Na
rysunku
4
zaprezentowano model
programowy dla projektów realizowanych
z wykorzystaniem systemu Linux. Dla syste-
mu Linux działającego na procesorze z jed-
nostką MMU, jest realizowana wzajemna
ochrona zasobów jądra i przydzielonych po-
szczególnym procesom (zadaniom). Każdy
proces ma niezależną, wirtualną przestrzeń
adresową, co zapewnia wzajemną ochronę
aplikacji oraz samego jądra systemu przed
błędnym działaniem innych procesów, jak
również umożliwia optymalne wykorzysta-
nie pamięci poprzez mapowanie adresów
wirtualnych na adresy fi zyczne za pomocą
mechanizmu stronicowania. Każde odwoła-
nie do nieprawidłowego adresu wirtualne-
go powoduje zatrzymanie procesu poprzez
sygnał
SEGFAULT
informujący o błędnym
odwołaniu do pamięci. Z poziomu aplikacji
nie ma możliwości bezpośredniego odwoły-
wania się do sprzętu, a komunikacja z nim
musi odbywać się za pomocą wywołań sys-
temowych jądra, które przekazują żądania
obsługi sprzętu do sterowników urządzeń.
Wywołanie systemowe (w przypadku ar-
chitektury ARM instrukcja SWI) powoduje
przejście aplikacji z trybu użytkownika do
trybu jądra i wykonanie określonych czyn-
ności przez jądro na rzecz procesu (mówimy
wówczas że mamy do czynienia z wykony-
waniem kodu jądra w kontekście procesu).
Natomiast samo jądro wraz ze wszystkimi
sterownikami urządzeń działa w ramach
wspólnej pojedynczej przestrzeni adreso-
wej. Odizolowanie aplikacji od urządzeń
zapewnia również dostęp do danego urzą-
dzenia przez wiele procesów oraz chroni
przed błędnym działaniem poszczególnych
aplikacji.
Dostęp do urządzeń z procesu użyt-
kownika jest realizowany poprzez otwarcie
pliku urządzenia a następnie pisanie i czy-
tanie za pomocą standardowych wywołań
systemowych
read
,
write
,
select
itp. Wywo-
łania systemowe w aplikacji realizowane są
za pośrednictwem standardowej biblioteki
libc
(b
iblioteka języka C
), z której wywo-
ływane są funkcje realizujące wywołania
systemowe jądra. Przygotowanie projektu
z wykorzystaniem systemu Linux intensyw-
nie wykorzystującego zewnętrzne układy
peryferyjne, jest bardziej skomplikowane,
niż przy pisaniu aplikacji dla mikrokontro-
lera jednoukładowego, ponieważ będziemy
musieli napisać (lub wykorzystać gotowe)
sterowniki dla urządzeń oraz osobno napi-
sać aplikację, która będzie komunikowała
się ze sterownikami. Przy pisaniu sterowni-
ków musimy zachować szczególną ostroż-
ność, tak jak w przypadku pisania na mikro-
kontrolery bez MMU, ponieważ sterownik
zawsze ma dostęp do wszystkich zasobów,
więc głównie od jakości sterowników zale-
żeć będzie stabilność systemu.
Lepszym rozwiązaniem będzie wyko-
rzystanie standardowego mikrokontrolera
jednoukładowego, oraz ewentualnie syste-
mu RTOS takiego jak ISIX gdy:
– Wykonujemy aplikację, która reali-
zuje prosty algorytm niepotrzebujący
dużych zasobów, skomplikowanych
obliczeń ani dodatkowych bibliotek
zewnętrznych i niewymagający duże-
go nakładu pracy na napisanie samej
aplikacji. W Linux’ie napisanie samego
sterownika urządzenia może się okazać
zadaniem dużo bardziej skomplikowa-
nym, niż dodatkowy nakład potrzebny
na napisanie aplikacji samodzielnie.
– Wykonujemy urządzenie produkowane
masowo o niezbyt skomplikowanym
działaniu, gdzie koszt dodatkowej pra-
cy programistycznej jest niewspółmier-
nie mały do kosztów całego projektu
i konieczności minimalizacji kosztów
jednostkowych urządzenia. Takim przy-
kładem może być np. sterownik z in-
terfejsem ETHERNET, gdzie napisanie
aplikacji pod Linux’em jest bardzo pro-
ste, natomiast w przypadku mikrokon-
trolera jednoukładowego jest bardziej
skomplikowane, ale wykonalne w sen-
sownym czasie np. z użyciem bibliotek
udostępnianych przez producentów.
Jak więc widzimy użycie systemu mi-
kroprocesorowego z systemem Linux nie
jest lekarstwem na wszystko. W przypadku
prostych układów sterujących typu załącz/
wyłącz/steruj, lepszym rozwiązaniem bę-
dzie wykorzystanie klasycznego rozwiąza-
nia opartego o mikrokontroler jednoukła-
dowy.
Kiedy będziemy potrzebować
Linux’a?
Spróbujmy odpowiedzieć na pytanie,
w jakich przypadkach będziemy potrzebo-
wać systemu mikroprocesorowego z syste-
mem Linux, a kiedy szybsze i tańsze będzie
zastosowanie standardowego rozwiązania
opartego o zwykły mikrokontroler jedno-
układowy i mini system operacyjny np.
ISIX.
Systemu mikroprocesorowego z Linu-
kx’em będziemy potrzebować, gdy:
– Istnieje konieczność używania skom-
plikowanych interfejsów komunika-
cyjnych WiFi, Bluetooth, Ethernet itp.
(Linux ma wbudowane sterowniki dla
większości typowych urządzeń siecio-
wych oraz stosy WiFi, TCP/IP, BT, USB
HOST itp.).
– Potrzebujemy skomplikowanego inter-
fejsu użytkownika z dużym, kolorowym
wyświetlaczem TFT oraz panelem do-
tykowym. Korzystając z zewnętrznych
bibliotek grafi cznych, serwera X oraz Qt
czy GTK, możemy projektować bardzo
skomplikowane interfejsy grafi czne nie-
wielkim nakładem środków.
– Potrzebujemy aplikacji multimedial-
nej wyświetlającej fi lmy, odtwarzającej
pliki MP3 itp. Możemy wykorzystać
bardzo bogate biblioteki kodeków, np.
ffmpeg
itp.
– Jest wymagana komunikacja z wykorzy-
staniem szyfrowania danych SSL.
– Potrzebujemy wykonać urządzenie z in-
terfejsem sterowanym przez przeglądar-
kę WWW z bezpiecznym protokołem
HTTPS oraz dużą liczbą dynamicznie
generowanych stron. Możemy zainsta-
lować standardowy serwer www+PHP
i pisać aplikację, tak jak w przypadku
pracy z dużym komputerem PC.
– Potrzebujemy wykonać bardziej skom-
plikowane zadanie, a znaleźliśmy bi-
blioteki OpenSource pozwalające w ła-
twy sposób osiągnąć zamierzony efekt.
– Potrzebujemy urządzenia sterującego
niezależnymi procesami, z gwarancją
prawidłowego działania nawet w przy-
padku uszkodzenia jednego z proce-
sów.
Krótki kurs pisania aplikacji dla
Linux’a.
W literaturze, Internecie oraz na wy-
kładach prowadzonych na wyższych uczel-
niach, możemy znaleźć wiele informacji na
temat programowania w systemie Linux.
Kursy te najczęściej są poświęcone ogólnym
zagadnieniom dotyczącym programowania
systemowego, najczęściej z wykorzysta-
niem komputerów PC. Niestety, brakuje lite-
ratury poświęconej Linux’owi w zastosowa-
niach embedded. W tym kursie postaram się
wypełnić tę lukę pokazując, w jaki sposób
do przykładowej płytki z Linux’em dołączyć
standardowe układy typu wyświetlacz LCD
czy klawiatura oraz w jaki sposób odwołać
się do nich za pomocą aplikacji systemu
operacyjnego. Jako platformę testową wy-
brano zestaw ewaluacyjny BF210 (
http://
www.boff.pl/?shop=1&p_id=5
) zawierający
mikrokontroler AT91RM9200, dla którego
będą prezentowane gotowe obrazy karty SD
pozwalające bez dodatkowych czynności
uruchomić prezentowane przykłady.
Lucjan Bryndza, EP
lucjan.bryndza@boff.pl
109
ELEKTRONIKA PRAKTYCZNA 4/2011
Plik z chomika:
bulwion
Inne pliki z tego folderu:
Wentylatory.pdf
(1666 KB)
Star Wars. Katalizator. Wprowad - James Luceno.pdf
(1665 KB)
Gordon R. Dickson - Smoczy rycerz T2.pdf
(1663 KB)
LOKOMOTYWA TOWAROWA EMD JT42CWRM(Class66).pdf
(1662 KB)
Greer Luanshya - Kto sieje wiatr 02 - Po burzy spokój.pdf
(1660 KB)
Inne foldery tego chomika:
- - 1024--Fillm
- - 2024--FULL---
- - 2K wallpapers
- - ART PICS
- - FILMY 2023-2025 WSZYSTKIE NOWOŚCI
Zgłoś jeśli
naruszono regulamin