Programowanie Systemów Wbudowanych Główny system plików Linux Iwona Kochańska Katedra Systemów Elektroniki Morskiej WETI PG April 5, 2016
Elementy wbudowanego OS Linux Toolchain kompilator i inne narzdzia do tworzenia kodu dla urzadzeń Bootloader inicjalizuje platform sprzętowa oraz ładuje jadro systemu Kernel serce systemu, zarzadza zasobami i komunikuje się ze sprzętem Root filesystem GUT Intel 2015/16 2/66 biblioteki i programy uruchamiane w systemie
Uruchamianie systemu Linux GUT Intel 2015/16 3/66
Po uruchomieniu jadra... Jadro szuka głównego systemu plików, którym może być: initramfs obraz systemu plików podany jako root= w linii poleceń jadra Jadro wykonuje program, którym domyślnie jest: /init dla initramfs, /sbin/init dla zwykłego systemu plików Program init uruchamiany jest z uprawnieniami root-a. Jest to pierwszy proces w systemie operacyjnym, więc otrzymuje PID 1 Jeśli init nie może zostać uruchomiony, wystapi kernel panic Po procesie init dziedzicza wszystkie inne procesy w systemie GUT Intel 2015/16 4/66
Zadania programu-demona init Init zarzadza cyklem życia OS, od uruchomienia do zamknięcia: Podczas rozruchu systemu - uruchamia programy-demony i konfiguruje parametry systemu [opcjonalnie] uruchamia program-demon getty w terminalach, który umożliwia logowanie Adoptuje osierocone procesy (w wyniku nagłego zamknięcia procesu-rodzica i braku innych procesów w grupie watków) Odpowiada na nagłe zamknięcie procesów-dzieci poprzez przechwycenie sygnału SIGCHLD (zapobieganie tworzeniu procesów-zombie) Uruchamia ponownie programy-demony Obsługuje proces zamykania OS GUT Intel 2015/16 5/66
Główny system plików: root filesystem Jadro OS ma do dyspozycji główny system plików jako: ramdisk - przekazany przez bootloader jako wskaźnik urzadzenie blokowe zamontowane w linii poleceń jadra poprzez parametr root= Po zamontowaniu głównego systemu plików jadro uruchamia pierwszy program: init Program init rozpoczyna przetwarzanie skryptów i uruchamia inne programy poprzez wywołania funckji biblioteki, które z kolei dokonuja wywołań systemowych GUT Intel 2015/16 6/66
Główny system plików - minimum init: uruchamia pierwsze skrypty i programy powłoka (shell): środowisko do wykonywania skryptów oraz linia poleceń użytkwonika demony (daemons): programy uruchamiane w tle biblioteki (libraries): statyczne i współdzielone pliki konfiguracyjne: jako pliki tekstowe ASCII, zwykle w /etc GUT Intel 2015/16 7/66
Główny system plików - minimum węzły urzadzeń (device nodes): pliki specjalne umożliwiajace dostęp do sterowników urzadzeń /proc i /sys: wirtualne systemy plików reprezentujace dane jadra OS moduły jadra (kernel modules): zwykle w /lib/modules/[kernel version].... oraz programy realizuj ace oczekiwane funkcjonalności systemu wbudowanego. GUT Intel 2015/16 8/66
Organizacja katalogów System operacyjny nie wymga specjalnej organizacji plików i katalogów (poza nazwa programu init= i rdinit=) Takiej specjalnej organizacji moga jednak oczekiwać uruchamiane programy Filesystem Hierarchy Standard (FHS) - standard definiuj acy rozmieszczenie plików i katalogów w systemach operacyjnych z rodziny Linux i Unix. GUT Intel 2015/16 9/66
Organizacja katalogów /bin: podstawowe pliki wykonywalne (binaries) dostępne dla wszystkich użytkowników (np. cat, ls, cp). /dev: pliki urzadzeń /etc: pliki konfiguracji OS /lib: biblioteki dla programów z katalogów /bin/ i /sbin/. /proc: wirtualny system plików proc informuj acy o stanie systemu i poszczególnych procesów, w większości pliki tekstowe (np. network). GUT Intel 2015/16 10/66
Organizacja katalogów /sbin: Pliki wykonywalne do zarzadzania systemem (system binaries; np. init, route, ifup). /sys: wirtualny system plików sysfs /tmp: pliki tymczasowe, których stan nie jest gwarantowany po zamknięciu systemu. /usr: tzw. drugorzędowa hierarchia dla danych (Unix system resources), dane tylko do odczytu. Powinnien zawierać co najmniej katalogi: /usr/bin, /usr/lib i /usr/sbin. Może być zamontowany na innej partycji niż główny system plików. /var: pliki często ulegaj ace zmianom (variable files) podczas działania OS, takie jak: logi, bazy danych, tymczasowe pliki e-mail. GUT Intel 2015/16 11/66
Katalog podstawowy (staging directory) Utworzenie katalogu podstawowego na komputerze host-a GUT Intel 2015/16 12/66
Prawa dostępu do plików Każdy proces (uruchomiony program) należy do określonego użytkownika oraz grupy użytkowników Użytkownik 32-bitowy identyfikator user ID (lub UID) informacja o użytkownikach jest przechowywana w /etc/passwd Grupa to 32-bitowy identyfikator group ID (lub GID) informacja o grupach jest przechowywana w /etc/group GUT Intel 2015/16 13/66
Prawa dostępu do plików Użytkownik główny (root user): UID = 0 nazywany również super-użytkownikiem (super-user) ma wszelkie prawa do wszystkich zasobów OS Grupa główna (root group): GID = 0 Bezpieczeństwo w systemach Linux to zarz adzanie uprawnieniami użytkowników i ograniczanie dostępu do konta root-a GUT Intel 2015/16 14/66
Prawa dostępu do plików Każdy plik i katalog ma swojego właściciela i grupę Poziom dostępu różnych użytkowników do zasobów - zbiór flag (access permission flags, mode of the file): trzy grupy po trzy bity: wartości grupy bitów: read (r), write (w), execute (x) GUT Intel 2015/16 15/66
Prawa dostępu do plików Dodatkowa grupa 3 bitów: SUID (4): pozwala na uruchomienie pliku wykonywalnego z prawami właściciela tego pliku często ustawiana flaga daje użytkownikowi tymczasowe prawo używania praw root-a SGID (2): pozwala na uruchomienie pliku wykonywalnego z prawami grupy tego pliku Sticky (1): plik może być usunięty lub przemianowany tylko przez właściciela pliku lub katalogu, lub jeśli proces ma prawo ich modyfikacji[1]. często stosowany w katalogach: /tmp i /var/tmp, do których dostęp moga mieć wszyscy użytkownicy systemu wyklucza usuwanie przez użytkowników plików do nich nienależacych GUT Intel 2015/16 16/66
Prawa dostępu do plików Polecenie chmod - ustawienie uprawnień Przykład: ustaw SUID dla /bin/ping GUT Intel 2015/16 17/66
Prawa dostępu do plików w ścieżce głównej Prawa dostępu do plików, które będa umieszczone na platformie docelowej: wrażliwe zasoby - tylko dostęp dla root-a programy uruchamiane z prawami zwykłego użytkownia - w razie ataku z zewnatrz umożliwia one dostęp do ograniczonych zasobów przykład: Plik urzadzenia /dev/mem umożliwia dostęp do pamięci. Powinien więc być własnościa root-a w trybie 600 (brak praw odczytu i zapisu dla wszystkich poza właścicielem) GUT Intel 2015/16 18/66
Programy głównego systemu plików: init Program init Pierwszy uruchamiany program ( PID 1 ). Uruchamiany jako własność root-a (potrzebny szeroki dostęp do zasobów platformy) Uruchamia skrypty powłoki, które uruchamiaja demony (programu działajace w tle, bez komunikacji z terminalem) GUT Intel 2015/16 19/66
Programy głównego systemu plików: powłoka (shell) Programy powłoki (shell): Uruchamia skrypty i obsługuje linię poleceń Przekazuja informacje między programami Przydatne w procesie rozwoju, debugowania, testowania Raczej nie przydatne w gotowym urzadzeniu GUT Intel 2015/16 20/66
Programy głównego systemu plików: powłoka (shell) Programy powłoki: bash (Bourne-Again Shell) - jedna z najpopularniejszych powłok systemów uniksowych. Domyślna w: większości dystrybucji systemu GNU/Linux systemie OS X od wersji 10.3 środowisku Cygwin dla systemów Win32. ash (The Almquist shell): systemy BSD. dużo mniejsza niż bash popularna w systemach wbudowanych obecna w BusyBox hush: bardzo mała powłoka (dla programów rozruchowych). przydatna w systemach o bardzo małej pamięci obecna w BusyBox Zawsze testów skrypty powłoki na maszynie docelowej! GUT Intel 2015/16 21/66
Programy głównego systemu plików: narzędzia (utlilities) Programy narzędziowe: sprawiaja, że powłoka jest użyteczna w minimalnej, podstawowej wersji systemu plików jest co najmniej 50 programów narzędziowych problem z kompilacja każdego z nich problem z rozmiarem plików wykonywalnych GUT Intel 2015/16 22/66
BusyBox BusyBox - projekt zrealizowany w 1996 roku przez Bruce Perens, który zbudował instalacje Debiana mieszczac a się na dyskietce 1.44 MB korzysta z zasady 80:20 (80% najbardziej potrzebnej funkcjonalności implementowane jest jako 20% kodu) łaczy funkcje podstawowych narzędzi Uniksa w jednym pliku wykonywalnym. używany w zastępstwie pakietu GNU Coreutils w małych, jednodyskietkowych lub wbudowanych dystrybucjach Linuksa. działanie programu jest zależne od tego pod jaka nazwa zostanie wywołany. "uniwersalny scyzoryk dla wbudowanego Linuksa". GUT Intel 2015/16 23/66
BusyBox zbiór apletów, każdy z nich udostępnia swoja funkcjonalność jako: [applet]_main. Przykład: polecenie: cat Składnia: implementacja: coreutils/cat.c $ busybox cat m y _ f i l e. t x t aplet: cat-main Polecenie busybox bez parametrów - lista dostępnych apletów GUT Intel 2015/16 24/66
BusyBox Tworzenie symbolicznego linku z /bin/cat do /bin/busybox: Po wywołaniu komendy cat uruchamiany jest program busybox, który sprawdza parametr wejściowy: GUT Intel 2015/16 25/66
BusyBox BusyBox ma ponad 300 apletów, w tym: program init kilka programów powłoki narzędzia do większości zadań administracyjnych prosty edytor vi Typowa instalacja BusyBox: pojedynczy program z linkami symbolicznymi dla każdego apletu. GUT Intel 2015/16 26/66
Budowanie BusyBox Budowanie BusyBox te same narzędzia Kconfig i Kbuild co dla jadra systemu Źródła: Domyślna konfiguracja: Uruchomienie make menuconfig - dopasowanie konfiguracji Ustawienie ścieżki instalacji (głównego katalogu) - Busybox Settings Installation Options (CONFIG_PREFIX) GUT Intel 2015/16 27/66
Building BusyBox Kompilacja skrośna: wynik - plik wykonywalny busybox. np. przy domyślnej konfiguracji dla ARM v7 - rozmiar 900 kb Instalacja: : Plik wykonywalny zostanie skopiowany do ścieżki określonej przez CONFIG_PREFIX i utworzone zostana linki symboliczne (odpowiadajace narzędziom powłoki) GUT Intel 2015/16 28/66
Główny system plików - biblioteki Jeśli programy używaja bibliotek współdzielonych, ich kopie musza się znaleźć w katalogu głównym dla platformy docelowej Skad wiadomo które? Można skopiować wszystkie, ale: pełna glibc jest duża (dziesiatki MB) można wykorzystać uclibc lub Musel libc Sprawdzenie, które biblioteki sa potrzebne GUT Intel 2015/16 29/66
Główny system plików - biblioteki Sprawdzenie katalogu głównego: Można go zapamiętać w zmiennej SYSROOT: Sprawdzenie powiazań dla /lib/ld-linux-armhf.so.3: Itd... Wszystkie linki symboliczne oraz pliki powinny być skopiowane do katalogów platformy docelowej GUT Intel 2015/16 30/66
Główny system plików - biblioteki Jak ograniczyć rozmiar bibliotek? Biblioteki i programy sa często kompilowane z tablica symboli dla debugera (opcja -g) Wyczyszczenie plików z tablic symboli pozwala zaoszczędzić miejsce: Czyszczenie modułów jadra - z opcja strip-unneeded GUT Intel 2015/16 31/66
Pliki urzadzeń (device nodes) W systemach Unix wszystko jest plikiem - poza interfejsami sieciowymi, które sa gniazdami (sockets) Większość urzadzeń reprezentowanych jest w systemie jako pliki (device nodes) Plik device node może dotyczyć: urzadzenia blokowego (block device) - urzadzenia pamięci masowej typu karty SD, dyski twarde urzadzenia znakowego (character device) - wszystkie pozostałe urzadzenia (poza interfejsami sieciowymi) Lokalizacja plików urz adzeń: /dev Przykład: port szeregowy - plik /dev/ttys0 GUT Intel 2015/16 32/66
Pliki urzadzeń (device nodes) Pliki urzadzeń tworzone sa za pomoca programu mknod (skrót od make node): name - nazwa pliku type - typ urzadzenia: c - znakowe, b - blokowe major number i minor number - używane przez jadro do łaczenia pliku urzadzenia z plikiem sterownika lista numerów: Documentation/devices.txt. Pliki urzadzeń moga być tworzone: ręcznie za pomoca polecenia mknod automatycznie (podczas działania systemu) za pomoca jednego z programów typu device managers GUT Intel 2015/16 33/66
Pliki urzadzeń Do uruchomienia BusyBox potrzebne sa tylko 2 pliki urzadzeń: console - dostępna dla root-a (właściciela pliku urzadzenia) - uprawnienia ustawione na 600. null - odczyt i zapis dla wszystkich - uprawnienia ustawione na 666 Ustawienie trybu pliku podczas jego tworzenia: opcja -m dla polecenia mknod Usunięcie pliku urzadzenia - standardowe polecenie rm GUT Intel 2015/16 34/66
Wirtualny system plików proc i sysfs proc i sysfs - wirtualne systemy plików umożliwiajace kontrolę pracy jadra dane jadra usystematyzowane sa jako hierarchiczne pliki odczyt pliku formatowanego w locie przez funkcje jadra możliwy jest zapis do niektorych plików -> wołanie funkcji jadra z nowymi danymi montowane w katalogach /proc i /sys: GUT Intel 2015/16 35/66
Wirtualny system plików proc proc - część systemu Linux od zawsze pierwotne przeznaczenie - przekazywanie informacji o procesach do przestrzeni użytkownika dla każdego procesu - katalog /proc/<pid> z informacja o jego stanie ps - szybka informacja o działajacych procesach /proc/cpuinfo - informacja o CPU /proc/interrupts - informacja o przerwaniach /proc/sys - pliki do obserwacji i zarzadzania stanem procesór jadra, pamięcia i siecia man page proc - pomoc (dokumentacja) GUT Intel 2015/16 36/66
Wirtualny system plików sysfs sysfs - od wersji Linux 2.6 informacje o systemie w bardziej zorganizowanej formie wiele plików zorganizowanych w drzewo katalogów GUT Intel 2015/16 37/66
Montowanie systemu plików Polecenie mount - umożliwia dołaczenie systemu plików do już istniejacej ścieżki Przykład: Główny system plików (root filesystem) - system plików na szczycie drzewa, montowany przez jadro OS podczas uruchamiania Montowanie systemu plików proc polecenie mount wymaga podania pliku urzadzenia, a taki nie istnieje dla proc można podać dowolna nazwę pliku urzadzenia. Przykład - dwa polecenia daja ten sam skutek: GUT Intel 2015/16 38/66
Moduły jadra Moduły jadra - instalowane w głównym systemie plików za pomoca polecenia make modules_install Moduły (wraz z plikami konfiguracyjnymi dla polecenia modprobe) kopiowane sa do katalogu /lib/modules/<kernel version> W ten sposób tworzone jest powiazanie między jadrem a głównym systemem plików Aktualizacji j adra zawsze powinna towarzyszyć aktualizacja systemu plików! GUT Intel 2015/16 39/66
Przenoszenie systemu plików na platformę docelowa Przeniesienie głównego systemu plików do katalogu głównego na platformie docelowej ramdisk: obraz systemu plików ładowany do RAM przez program rozruchowy łatwy do utworzenia, bez powiazań (np. do bibliotek współdzielonych) używany podczas aktualizacji głównego systemu plików (lub jego awarii) wczesna przestrzeń użytkownika w dystrybucjach Linux w małych systemach wbudowanych może być głównym systemem plików skompresowany ramdisk zajmuje bardzo mała ilość pamięci RAM zawartość ramdisk jest ulotna - dane stałe (np. konfiguracja) powinny być przechowywane w inny sposób GUT Intel 2015/16 40/66
Przenoszenie systemu plików na platformę docelowa Przeniesienie głównego systemu plików do katalogu głównego na platformie docelowej obraz dyskowy (disk image): kopia głównego systemu plików przykłady obraz w formacie ext4 kopiowany z karty SD obraz w formacie jffs2ładowany do pamięci flash przez bootloader jest to najbardziej popularny sposób przenoszenia systemu plików GUT Intel 2015/16 41/66
Tworzenie rozruchowego ramdisk Podczas rozruchu systemu Linux uruchamiany jest ramdisk rozruchowy (initial RAM filesystem, initramfs) Format cpio - stary format archiwum Unix, podobny do TAR i ZIP, ale łatwiejszy w dekodowaniu Do obsługi initramfs potrzebne jest ustawienie CONFIG_BLK_DEV_INITRD w jadrze Sposoby tworzenia rozruchowego ramdisk: samodzielne archiwum cpio - najbardziej elastyczny sposob, ale nie wszystkie programy rozruchowe umożliwiaja załadowanie niezależnego ramdisk, archiwum cpio wbudowane w jadro jako tabela urzadzeń przetwarzana przez jadro GUT Intel 2015/16 42/66
Samodzielny ramdisk Utworzenie kopii systemu plików, skompresowanie i dodanie nagłówka U-Boot: Oszacowanie rozmiaru: uramdisk file - 2.9 MiB (bez plików jadra) zimage file - 4.4 MiB U-Boot - 440 KiB = potrzeba 7.7 MiB by uruchomić platformę GUT Intel 2015/16 43/66
Samodzielny ramdisk Jeśli rozmiar jest problemem: Zmniejsz jadro (przez usunięcie niepotrzebnych sterowników i funkcji) Zmniejsz BusyBox (przez usunięcie niepotrzbnych narzędzi) Skompiluj BusyBox statycznie Użyj uclibc lub musl libc zamiast glibc GUT Intel 2015/16 44/66
Uruchamianie ramdisk Uruchomienie powłoki (interakcji z urzadzeniem): dodanie r d i n i t =/ bin / sh do linii poleceń jadra i rozruch Przykład: Montowanie proc - poprzez skrypt (przekazany jako parametr do rdinit=) GUT Intel 2015/16 45/66
Uruchamianie ramdisk w emulatorze QEMU Uruchomienie QEMU z opcja -initrd $ cd ~/ r o o t f s $ QEMU_AUDIO_DRV=none qemu system arm m 256M nographic M vexpress a9 k e r n e l zimage append " console=ttyama0 r d i n i t =/ bin / sh " dtb vexpress v2p ca9. dtb i n i t r d i n i t r a m f s. cpio. gz GUT Intel 2015/16 46/66
Wbudownie archiwum cpio w jadro systemu Jeśli program rozruchowy nie potrafi załadować samodzielnego ramdisk Konfiguracja jadra: ustawienie opcji CONFIG_INITRAMFS_SOURCE na ścieżkę do archiwum cpio Menuconfig - General setup Initramfs source file. Archiwum musi mieć czysty format.cpio (nie wersja gzip) Budowa jadra (będzie miało większy rozmiar) GUT Intel 2015/16 47/66
Wbudownie archiwum cpio w jadro systemu Uruchomianie w QEMU: $ cd ~/ r o o t f s $ QEMU_AUDIO_DRV=none qemu system arm m 256M nographic M vexpress a9 k e r n e l zimage append " console=ttyama0 r d i n i t =/ bin / sh " dtb vexpress v2p ca9. dtb Uruchomienie na platformie docelowej: Zawsze gdy zmienia się ramdisk trzeba przbudować jadro! GUT Intel 2015/16 48/66
Program Init Istnieje wiele programów init, jeden z nich zawarty jest w BusyBox init rozpoczyna działanie od przeczytania pliku konfiguracyjnego /etc/inittab pierwsza linia inittab - uruchomienie skryptu powłoki rcs druga linia inittab - wyświetlenie komunikatu Please press Enter to activate this console w konsoli i rozpoczęcie działania powłoki po Enter - przed /bin/ash - powłoka logowania (czyta /etc/profile i $HOME/.profile) GUT Intel 2015/16 49/66
Program Init BusyBox tworzy domyślny inittab, jeśli plik ten nie jest obecny w systemie plików Skrypt /etc/init.d/rcs - polecenia inicjalizujace (np. montowanie systemu plików proc i sysfs): rcs musi być wykonywalny! Sprawdzenie init w QEMU - dodanie opcji -append Sprawdzenie init na platformie docelowej: GUT Intel 2015/16 50/66
Konfiguracja kont użytkowników Zła praktyka: uruchamianie wszystkich programów jako root Dobra praktyka: używanie kont użytkowników o ograniczonych przywilejach, kiedy tylko to możliwe Konfiguracja kont użytkowników: /etc/passwd Jeden użytkownik = jedna linia w pliku: nazwa (login) hasło (lub x jeśli hasło jest w /etc/shadow) UID GID komentarz (może być pusty) ścieżka domowa GUT Intel 2015/16 51/66
Konfiguracja kont użytkowników Przykład: pierwsza linia - root (UID 0), druga linia - daemon (UID 1): ustawienie /bin/false dla użytkownika daemon - brak możliwości logowania w powłoce Programy czytaja plik /etc/passwd - problem z bezpieczeństwem haseł! Hasła mog a być przechowywane w /etc/shadow (dostępnym tylko dla root-a) GUT Intel 2015/16 52/66
Konfiguracja grup użytkwoników Grupy użytkowników - plik /etc/group. Format: Przykład: nazwa grupy hasło (x jeśli grupa nie ma hasła) GID opcjonalnie - lista użytkowników należacych do grupy GUT Intel 2015/16 53/66
Dodanie użytkowników do głównego systemu plików Dodanie etc/passwd, etc/shadow (permission 600) i etc/group do głównego katalogu program init czyta plik /etc/inittab inittab restartuje getty po zakończeniu terminala powłoki getty - program do obsługi procedury logowania (część BusyBox) GUT Intel 2015/16 54/66
Uruchomienie procesu demona Przykład: syslogd (zbiera logi od innych programów, głównie demonów) Uruchomienie demona - dodanie linii do etc/inittab: respawn - jeśli program zakończy działanie, automatycznie uruchom go ponownie -n - uruchom jako proces w tle Log zapisywany jest w /var/log/messages. GUT Intel 2015/16 55/66
Konfiguracja sieci Podstawowa konfiguracja sieci - dla interfejsu Ethernet (eth0) i prostej konfiguracji IP v4 BusyBox ifup/ifdown - wystarczajace do najprostszych przypadków Główna konfiguracja sieci jest przechowywana w /etc/network/interfaces. Niezbędne lokalizacje w głównym katalogu: GUT Intel 2015/16 56/66
Konfiguracja sieci etc/network/interfaces dla statycznego IP : etc/network/interfaces dla dynamicznego IP otrzymanego od DHCP: udchpcd - klient DHCP (BusyBox). Potrzebuje skryptu /usr/share/udhcpc/default.script Domyślna konfiguracja: examples//udhcp/simple.script. GUT Intel 2015/16 57/66
Sieciowe składniki dla glibc glibc używa name service switch (NSS) do kontrolowania sposobu tlumaczenia nazw w numery identyfikowane w sieci: nazwy użytkowników -> UID przez plik /etc/passwd; usługi sieciowe ->numery portów przez plik /etc/services Konfiguracja - /etc/nsswitch.conf Wszystkie tłumaczenia odbywaja się przez odpowiednie pliki w /etc (nazwy hostów - dodatkowo z DNS) /etc/hosts powinien zawierać co najmniej adres localhost: GUT Intel 2015/16 58/66
Sieciowe składniki dla glibc Biblioteki, które obsługuja tłumaczenie nazw: pluginy ładowane na podstawie zawartości nsswitch.conf, nie pokazuja się w zależności po wywołaniu readelf Dla platformy docelowej - skopiuj je z katalogu głównego: GUT Intel 2015/16 59/66
Tworzenie systemu plików na podstawie tablicy urzadzeń gen_init_cpio - narzędzie jadra do tworzenia pliku cpio na podstawie informacji w pliku tekstowym device table, device table - pozwala zwykłemu użytkownikowi tworzyć pliki urzadzeń Dla innych formatów obrazów (niż cpio): jffs2: mkfs.jffs2 ubifs: mkfs.ubifs ext2: genext2fs GUT Intel 2015/16 60/66
Tworzenie systemu plików na podstawie tablicy urzadzeń Składnia (dla każdego narzędzia): <name> <type> <mode> <uid> <gid> <major> <minor> <start> <inc> <count> type: f: zwykły plik d: katalog c: plik urzadzenia znakowego b: plik urzadzenia blokowego p: FIFO (kolejka) major i minor: numery urzadzeń start, inc, i count: - do tworzenia grup urzadzeń (poczawszy od minor w start) GUT Intel 2015/16 61/66
Tworzenie systemu plików na podstawie tablicy urzadzeń Przykład device-table.txt: Użycie genext2fs do wygenerowania obrazu systemu plików (4 MiB = 4,096 bloków o domyślnym rozmiarze 1,024 bytes): GUT Intel 2015/16 62/66
Umieszczenie głównego systemu plików na karcie SD Montowanie systemu plików z urzadzenia blokowego (karta SD) na pierwszej partycji SD znajduja się pliki do rozruchu (np. MLO i u-boot.img) Po umieszczeniu karty w slocie urzadzenia, ustaw linię poleceń jadra na root=/dev/mmcblk0p2 Sekwencja rozruchowa: GUT Intel 2015/16 63/66
Montowanie głównego systemu plików z NFS Montowanie systemu plików z sieci (podczas rozwoju oprogramowania): daje dostęp do praktycznie nieskończonych zasobów aktualizacje wykonywane na maszynie hosta sa od razu dostępne na urzadzeniu docelowym Konfiguracja jadra: ustawiona opcja CONFIG_ROOT_NFS. Linia polecen jadra: r o o t =/ dev / nfs Sczegóły NFS: n f s r o o t =<host ip >: < root d i r > Konfiguracja interfejsu sieciowego, aby był dostępny podczas rozruchu (przed uruchomieniem programu init): i p =< t a r g e t ip > GUT Intel 2015/16 64/66
Montowanie głównego systemu plików z NFS Instalacja i konfiguracja serwera NFS na maszynie hosta: $ sudo apt get i n s t a l l nfs kernel server Które ścieżki będa eksportowane do sieci? Link do pliku /etc/exports: / < path to staging > ( rw, sync, no_subtree_check, no_root_squash ) Restart serwera: $ sudo / etc / i n i t. d / nfs kernel server r e s t a r t Documentation/filesystems/nfs/nfsroot.txt. GUT Intel 2015/16 65/66
Montowanie głównego systemu plików z NFS Testowanie na maszynie docelowej: Komendy w linii polecen U-Boot: setenv s e r v e r i p 192.168.1.1 setenv ipaddr 192.168.1.101 setenv npath [ path to staging d i r e c t o r y ] setenv bootargs console=ttyo0,115200 r o o t =/ dev / nfs rw n f s r o o t =$ { s e r v e r Załadowanie jadra i drzewa urzadzeń z karty SD: f a t l o a d mmc 0:1 0x80200000 zimage f a t l o a d mmc 0:1 0x80f00000 am335x boneblack. dtb bootz 0x80200000 0x80f00000 GUT Intel 2015/16 66/66