Konfiguracja i kompilacja jądra Linux Based on Free Electrons
Obsługiwane platformy Rodzaje obsługiwanych architektury katalog arch/ Minimum: 32 bit, opcjonalnie MMU, gcc Architektura 32 bit: arm, avr32, blackfin, c6x, m68k, microblaze, mips, score, sparc, um Architektura 64 bit: alpha, arm64, ia64, tile Architektura 32/64 bit: powerpc, x86, sh, sparc
Źródła jądra Linux Oficjalne wersje tylko opublikowane przez Linusa Torvalds a na http://www.kernel.org Wielu producentów chips etów sami rozwijają swoje wersje jądra (często ich zmiany są dołączane do mainline z dużym opóźnieniem) Źródła ściągamy z: http://kernel.org/pub/linux/kernel Częściej jednak korzystamy z git s
Zadanie laboratoryjne nr 2 Pobrać źródła jądra Linux z repozytorium (clone) git://git.kernel.org/pub/scm/linux/kernel/git/ torvalds/linux.git Stworzyć lokalnie nową gałąź w repozytorium o nazwie <nazwisko-kernel> dla wersji 3.XX
Struktura katalogów jądra Linux arch/<arch> Źródła specyficzne dla platformy arch/<arch>/mach-<machine>, kod specyficzny dla danej maszyny arch/<arch>/include/asm, header y związane z architekturą arch/<arch>/boot/dts, źródła Drzewa Urządzeń (Device Tree) związane z architekturą Block/ - Block layer core COPYING warunki licencji (GNU GPL) CREDITS główni twórcy crypto/ biblioteki kryptograficzne
Struktura katalogów jądra Linux cd. Documentation/ - dokumentacja jądra (ważne!!!) drivers/ - wszystkie sterowniki poza dźwiękiem (usb, pci...) firmware/ - obrazy starych sterowników urządzeń (legacy) fs/ - systemy plików (fs/ext3/, itd.) include/ - headery include/linux/ - nagłówki związane z samym jądrem include/uapi/ - nagłówki user API (do wywołania z przestrzeni użytkownika init/ pliki inicjalizacji Linuxa (main.c) ipc/ komunikacja międzyprocesorowa (potoki, sygnały, itd.)
Struktura katalogów jądra Linux cd. Kbuild pliki niezbędne przy kompilacji i linkowaniu jądra Kconfig Ogólny plik konfiguracyjny (parametry kompilacji jądra) kernel/ źródła właściwego jądra Lib/ Misc funkcje bibliotek wykorzystywanych w jądrze (zlib, crc32...) MAINTAINERS Programiści odpowiedzialni za poszczególne części jądra Makefile plik do budowy jądra mm/ zarządzanie pamięcią net/ źródła obsługi sieci (NIE STEROWNIKI)
Struktura katalogów jądra Linux cd. README Instrukcje kompilacji REPORTING-BUGS Instrukcje zgłaszania błędów samples/ przykłady dla nowych deweloperów (make, kprobes, kobjects...) scripts/ skrypty pomocnicze security/ implementacja modelu bezpieczeństwa (SELinux...) sound/ obsługa w jądrze oraz sterowniki dzwięku tools/ kod funkcji pomocniczych dla użytkownika (większość C) usr/ źródła do generowania archiwum initramfs cpio virt/ wsparcie dla wirtualizacji (KVM)
Zadanie laboratoryjne nr 3 Zapisz czterobajtowy Int = 0x02010702 1) jako Big endian: bajt 1 bajt 2 bajt 3 bajt 4 2) jako Little endian: bajt 1 bajt 2 bajt 3 bajt 4
Przenoszalność jądra na różne platformy Wszystkie źródła poza arch/ są przenoszalne na wszystkie obsługiwane platformy!!! Źródła jądra wykorzystują makra i funkcje do obłsugi specyficznych platform: cpu_to_be23(), cpu_to_le32(), be32_to_cpu(), le32_to_cpu() Jądro może korzystać tylko ze swoich własnych bibliotek pomocniczych (printf(), malloc(), memset() nie działa) I/O, DMA API, zarządzanie pamięcią NIE UŻYWAMY float (niektóre architektury mogą nie mieć obsługi operacji zmiennoprzecinkowych Możemy emulować float lub soft-float w przestrzeni użytkownika
Narzędzia niezbędne do kompilacji jądra (dla Ubuntu) libncurses5 libncurses5-dev libelf-dev asciidoc binutils-dev linux-source libncurses5 libncurses5-dev fakeroot build-essential crash kexec-tools makedumpfile kernel-wedge kernelpackage Zadanie: proszę o instalacje modułów przy użyciu apt-get
Narzędzia do konfiguracji jądra menuconfig, nconfic (tryb tekstowo-okienkowy) xconfig (tryb graficzny, konieczny moduł libqt4- dev g++) gconfig (tryb graficzny, moduł libglade2-dev) konfiguracja jest zapisywana do pliku /boot/.config w formie: key=value Sugeruje przed zapisaniem konfiguracji backup ować stary plik konfiguracyjny Zaciągnięcie konfiguracji z poprzedniej wersji jądra: make oldconfig.
Kompilacja make (bez parametrów wtedy make przyjmuje architekturę hosta, nie musi być root) make j5 (pięć wątków kompilacji np. dla czterokorowego procesora + 1) Wynik: vmlinux plik w formacie ELF, nieskompresowane jądro arch/<arch>boot/*image skompresowane, boot owalne jądro bzimage dla x86 zimage dla ARM vmimage.gz dla Blackfin arch/<arch>/boot/*.dtb skompilowane drzewo sterowników (dla tej samej architektury) w odpowiednich katalogach źródłowych wszystkie moduły z rozszerzeniem.ko
Zadanie laboratoryjne nr 4 Proszę skompilować jądro na architekturę hosta, tak aby skompresowany plik nie był większy, niż 2MB