Programowanie Systemów Wbudowanych

Podobne dokumenty
Komputery Przemysłowe i Systemy Wbudowane

Programowanie Systemów Wbudowanych

Użytkownicy I. Użytkownik. Głównym celem istnienia użytkowników i grup w systemie jest utrzymanie porządku i separacja uprawnień.

Pracownia Technik Obliczeniowych

IdyllaOS. Prosty, alternatywny system operacyjny. Autor: Grzegorz Gliński. Kontakt:

Typy plików. Oznaczenie f -

Ćwiczenie Nr 7 Instalacja oraz konfiguracja wskazanego systemu operacyjnego

Programowanie Systemów Wbudowanych

Warstwy systemu Windows 2000

Instalacja Systemu Linux na maszynie writualnej

Linux: System Plików

System plików Linuxa. Tomasz Borzyszkowski

K. Konopko; Toolchain. Jądro Linuksa. dr inż. Krzysztof Konopko

System operacyjny UNIX system plików. mgr Michał Popławski, WFAiIS

"Klasyczna" struktura systemu operacyjnego:

Bezpieczeństwo systemów informatycznych

Księgarnia PWN: Emmett Dulaney - Novell Certified Linux Professional (NCLP)

Administracja systemem Linux p. 1

Systemy operacyjne. Instrukcja laboratoryjna. Ćwiczenie 1: Polecenia systemu UNIX/LINUX. Opracował: dr inż. Piotr Szpryngier

Utwórz na pulpicie katalog: pierwsza-litera-imienia_nazwisko (np. j_kowalski). W tym katalogu zapisz pliki, które będą tworzone w ramach ćwiczenia

SYSTEMY OPERACYJNE: STRUKTURY I FUNKCJE (opracowano na podstawie skryptu PP: Królikowski Z., Sajkowski M. 1992: Użytkowanie systemu operacyjnego UNIX)

SYSTEMY OPERACYJNE I laboratorium 3 (Informatyka stacjonarne 2 rok, semestr zimowy)

Gdy dystrybucja Linuksa staje się niepotrzebna

Programowanie Systemów Wbudowanych

Instalacja Linuksa i podstawowa konfiguracja. Marcin Bieńkowski. Instytut Informatyki Uniwersytet Wrocławski

Programowanie Systemów Wbudowanych

Linux Elementy instalacji. 1 Podział dysku na partycje. 2 Konfiguracja sprzętu (automatycznie) 3 Założenie użytkowników

Programowanie Systemów Wbudowanych

Architektura systemów informatycznych WPROWADZENIE DO SYSTEMU LINUX

Sprawozdanie z zadania 2. Artur Angiel, śr. 12:15

PROFESJONALNE USŁUGI BEZPIECZEŃSTWA

Kurs systemu Unix wykład wstępny. Kurs systemu Unix 1

Linux. Uprawnienia pliku / katalogu, właściciel pliku, UID, GID, sticky bit.

Proces instalacji systemu operacyjnego Linux Red Hat 7.3 (1)

GRUB (GRand Unified Bootloader) - jest bootloaderem instalowanym standardowo w Ubuntu, potrafiącym obsłużyć kilka systemów jednocześnie (Multiboot).

Zespól Szkół Ponadgimnazjalnych Nr 17 im. Jana Nowaka - Jeziorańskiego Al. Politechniki 37 Windows Serwer 2003 Instalacja

Zakład Systemów Rozproszonych

IBM SPSS Modeler Social Network Analysis 16 podręcznik instalowania i konfigurowania

Ćwiczenie 1. Podstawowe wiadomości

Pracownia Komputerowa wykład III

Tworzenie oprogramowania

System plików Linuksa

ABA-X3 PXES v Podręczna instrukcja administratora. FUNKCJE SIECIOWE Licencja FDL (bez prawa wprowadzania zmian)

UNIX SYSTEM PLIKÓW. UNIX System plików

Graficzny terminal sieciowy ABA-X3. część druga. Podstawowa konfiguracja terminala

Okiełznać Pingwina.... czyli podstawy systemu GNU/Linux

Kernel Kompilacja jądra

System operacyjny Linux

Linux Ubuntu - zarządzanie użytkownikami

Pracownia komputerowa. Dariusz wardecki, wyk II

Język JAVA podstawy. wykład 1, część 2. Jacek Rumiński. Politechnika Gdańska, Inżynieria Biomedyczna

Uruchomienie Raspberry Pi

Administracja serwerami

Konsola Linux. autor: Mariusz Barnaś

2. System uprawnień w linuxie

IBM SPSS Statistics dla systemu Linux Instrukcje instalacji (licencja sieciowa)

Kompilacja jądra systemu Linux

Q E M U.

System operacyjny Linux wybrane zagadnienia. Magda Mielczarek Katedra Genetyki Uniwersytet Przyrodniczy we Wrocławiu

Uruchomienie Raspberry Pi

Niektóre katalogi są standardowymi katalogami zarezerwowanymi do użytku przez system. Znaczenie wybranych katalogów systemowych jest następujące:

KATEGORIA OBSZAR WIEDZY NR ZADANIA Podstawowe informacje i czynności

Zarządzanie użytkownikami w

Podstawy systemów UNIX

Kalipso wywiady środowiskowe

Acronis Backup & Recovery 10 Server for Linux. Instrukcja szybkiego rozpoczęcia pracy

Narzędzia zarzadzania i monitorowania w systemach Linux

Konfiguracja i kompilacja jądra Linux. Based on Free Electrons

Paweł Skrobanek. C-3, pok pawel.skrobanek.staff.iiar.pwr.wroc.pl

Podstawowa konfiguracja routerów. Interfejsy sieciowe routerów. Sprawdzanie komunikacji w sieci. Podstawy routingu statycznego

Podstawy użytkowania Linux a

PAMIĘĆ OPERACYJNA...107

Pracownia Komputerowa wykład III

Wstęp do systemów wielozadaniowych laboratorium 02 Praca w systemie plików

Czym jest router?... 3 Vyatta darmowy router... 3 Vyatta podstawowe polecenia i obsługa... 3 Zarządzanie użytkownikami... 3 Uzupełnianie komend...

Skrócony przewodnik OPROGRAMOWANIE PC. MultiCon Emulator

Embedded GNU/Linux. Krzysztof Mazur

Prawa dostępu do plików

Znaki globalne w Linuxie

Qmail radość listonosza. Autorzy: Bartosz Krupowski, Marcin Landoch IVFDS

Systemy Operacyjne I: System plików

Instalacja serwera baz danych PostgreSQL ze źródeł i pierwsze uruchomienie

U M L. System operacyjny Linux zagnieżdżony w zewnętrznym systemie operacyjnym (Linux)

Acronis Universal Restore

Instrukcja obsługi. Grand IP Camera III. Kamera IP do monitoringu

Linux cz.2: terminal, użytkownicy, grupy

Działanie komputera i sieci komputerowej.

Automatyczna instalacja oraz zmiana konfiguracji w ramach całego klastra.

Uruchomienie Intel Galileo

System komputerowy. System komputerowy

Instrukcje dotyczące systemu Windows w przypadku drukarki podłączonej lokalnie

Struktury systemów operacyjnych

Egzamin pisemny z przedmiotu: Systemy operacyjne Semestr I

Komputery bezdyskowe - wprowadzenie

PROGRAM DO ARCHIWIZACJI NOŚNIKÓW KOPII ELEKTRONICZNEJ

Pracownia Komputerowa wykład II

Szybki start instalacji SUSE Linux Enterprise Server 11 SP1

Skanowanie podsieci oraz wykrywanie terminali ABA-X3

Dokumentacja fillup - MS SQL

SPIS TREŚCI: KARTY GRAFICZNE... 15

Transkrypt:

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