Kompilacja - kernel systemu linux

Kompilacja expresowa

Aby skompilować sobie jądro w linuxie należy przygotować system do kompilacji.

  • Aby kompilować cokolwiek pod linuxem będziemy potrzebować kompilatoró (różne wersje linuxa mogą nazywać pakiety jak c++, g++, gcc, cc itd.)
  • Ponadto będziemy potrzebowali narzędzi takich jak make
  • Ostatnią rzeczą jaką musimy zainstalować to biblioteki w wersjach developerskich. Aby zrozumieć o co chodzi należy się kilka słów wyjaśnienia. System linux składa się z jądra i wielu wielu bibliotek. Biblioteki działające w systemie są w postaci skompilowanej jak DLL pod windows. Jednak kompilacja programów lub jądra może wymagać żrudeł tych bibliotek a konkretniej nagłówków. W ten sposób kompilatory sprawdzają poprawność wywołań i wzajemnych zależności. Tak więc nawet jeśli mamy zainstalowaną bibliotekę libcurl nie będziemy w stanie skompilować rozszerzenia php php-curl poniwearz kompilator nie będzie w stanie odnaleźć nagłówków. W skrócie, jeśli cos kompilujemy potrzebne będą nam nagłówki w debianie biblioteki z nagłówkami nazywane są z przyrostkiem -dev. np php-dev. Przez to niektóre dystrybucje jak PLD czy debian mogą wymagać instalacji plików nagłówkowych jądra by utworzone zostały odpowiedni linki symboliczne i przygotowane środowisko do kompilacji kernela.

Po przygotowaniu środowiska i rozpakowaniu źródeł np. do /usr/src/linux należy:

  1. przejść do katalogu ze źródłami czyli /usr/src/linux
  2. wpisać: make mrproper co wyczyści wszelkie śmieci
  3. wpisać: make menuconfig co otworzy nam menu konfiguracji
  4. skonfigurować i zapisać konfig wychodząc z konfiguratora
  5. wpisać: make dep co dokona kontroli zależności
  6. wpisać: make clean co wyczyści śmieci i zapewni spokojne kompilowanie
  7. wpisac: make bzImage by utworzyć jądro lub make bzDisk by stworzyć dysk startowy
  8. jeśli kompilowaliśmy bzImage to jądro jest w arch/i386/boot
  9. wpisać: make modules co skompiluje wszystkie potrzebne moduły
  10. wpisać: make modules_install co przeniesie je do /lib/modules/2.x.x
  11. przekopiować jajo do /boot pod nową nazwą np: bzImage.test
  12. edytować /etc/lilo.conf dodając wpis o nowym jaju
  13. zainstalować nowy MBR wpisując lilo
  14. wystartować (SHIFT przy starcie gdy pokaże się LILO) wybrać nowe jądro i testować !

Moduły

Co to są te moduły ? No więc można by je porównać mniej więcej do bibliotek dynamicznych DLL z windows. Różnica polega na tym że są częścią jądra i nie są zmieniane w trakcie życia systemu. Monolityczna budowa jądra linuxa zaczęła być niewygodna (jądro się strasznie szybko rozrasta) i wymyślono że najlepiej jak pewne części kodu będzie można sobie wczytać w trakcie pracy na żądanie. W ten sposób można się pozbyć z jądra sterowników, usług które pracują sporadycznie i rożnego świństwa.

Praktycznie nie trzeba się bać bo moduły są równie stabilne i szybkie. Jedyna różnica to że gdy zostają wywołane funkcje modułu musi on być załadowany do pamięci. Dlatego zaleca się stosowanie ich prawie wszędzie gdzie to możliwe. Odchudza to znacznie jajo i zwalnia sporo ramu. O ile jajo 2.2.19 w potato r3 zajmuje ponad megas to konfiguracja jak poniżej daje kernel 440KB. Po starcie różnica wolnej pamięci sięga aż 7 MB.

Korzystając z modułów należy pamiętać że nie można ich zamieniać pomiędzy jądrami ! Każde jądro powinno mieć osobno skompilowane moduły.

Konfiguracja

To są oczywiście kroki które prowadzą najszybciej lecz jeżeli chcecie to robić po raz pierwszy i nie chcecie zepsuć sobie systemu to przeczytajcie dalej.

Tak wygląda menu konfiguracyjne jądra.

menuconfig

Aby nic się nie knociło zalecam następujące ustawienia (przy w miarę nowym komputerze bo na starszych niż 486 może trzeba inaczej). Osobiście używam takiej konfiguracji na celeronie 400 z dwoma kartami sieciowymi. Komputer służy jako bramka, server ssh, mysql, www, ftp, samby i do rożnych bzdetów.

  • Code maturity level options
    • Prompt for development and/or incomplete code/drivers - co umożliwia wykorzystanie dodatkowych sterowników i opcji
  • Processor type
    • Processor family - wybierz odpowiedni typ
    • Math emulation - jeżeli masz procesor gorszy niż 486DX lub nie masz koprocesora
    • Symmetric multi-processing support - jeżeli masz jeden procesor wyłącz to !
  • Loadable module support
    • Enable loadable module support - jeżeli chcesz korzystać z dobrodziejstwa modułów (TAK)
    • Set version information on all symbols for modules - jeżeli chcesz mieć kilka jąder w tej samej wersji i nie chcesz żeby moduły się mieszały to zaznacz. Jeśli kompilujesz nowsze jądro możesz to odpuścić.
    • Kernel module loader - jeżeli chcesz używać modułów zaznacz (TAK)
  • General setup
    • Networking support (TAK)
    • PCI support (TAK)
    • PCI access mode (Any)
      • PCI quirks (Tak)
      • Backward-compatible /proc/pci (Tak)
    • System V IPC (Tak)
    • Sysctl support (Tak)
    • Kernel support for a.out binaries (Tak/Mod)
    • Kernel support for ELF binaries (Tak) kiedyś zaznaczyłem tu M i miałem problemy z modułami ... ale może miałem problem z czymś jeszcze.
    • Kernel support for MISC binaries (Tak/Mod)
    • Advanced Power Management BIOS support - jeżeli chcesz żeby system sam sie zamykał i oszczędzał energię to (Tak)
      • Enable PM at boot time (Tak)
      • Use real mode APM BIOS call to power off - jeżeli system nie zamyka się prawidłowo lub wiesza przy starcie to (TAK)
  • Plug and Play support
    • Plug and Play support (Tak)
  • Block devices
    • Normal PC floppy disk support (Tak)
    • Enhanced IDE/MFM/RLL disk/cdrom/tape/floppy support (Tak)
    • Include IDE/ATA-2 DISK support (Tak)
    • Include IDE/ATAPI CDROM support (Mod - bo i tak się rzadko korzysta)
    • reszta tak jak jest domyślnie
  • Networking options
    • Packet socket (Tak)
    • Kernel/User netlink socket (Tak)
    • Routing messages (Tak)
    • Netlink device emulation (Mod)
    • Network firewalls (Tak)
    • Socket Filtering (Tak)
    • Unix domain sockets (Tak/Mod)
    • TCP/IP networking (Tak)
    • IP: multicasting (Tak)
    • IP: advanced router - jeżeli ma działać jako router czy maskarada to Tak
    • IP: verbose route monitoring - jeśli jako router to Tak
    • IP: firewalling (Tak)
    • IP: firewall packet netlink device (Tak)
    • IP: transparent proxy support - jeśli chcesz stawiać Proxy to Tak (średnio przydatne)
    • IP: masquerading - jeśli ma być jako maskarada to Tak
      • IP: ICMP masquerading - jeśli maskarada to Tak
      • IP: optimize as router not host - jeśli ma być obciążonym routerem to tak
      • IP: tunneling (Mod)
      • IP: aliasing support (Tak)
    • IP: Allow large windows (not recommended if <16Mb of memory) (Tak jeśli >16 ramu)
    • The IPX protocol (Mod) jeśli chcesz w ogóle korzystać z IPX
  • Telephony Support
    • Linux telephony support - jeśli używasz modemu to (Mod) jeśli nie to nie
  • SCSI support
    • SCSI support - raczej nie chyba że masz
  • I2O device support
    • I2O support - raczej nie ale możesz Mod
  • Network device support
    • Network device support (Tak) chyba że nie masz kart sieciowych
    • Dummy net driver support (Tak/Mod)
    • Ethernet (10 or 100Mbit) - jeśli masz sieciówkę
      • RealTek 8129/8139 (not 8019/8029!) support - To jest sterownik dla najpopularniejszych teraz kart rodziny Realtek 8139 (Mod)
      • EISA, VLB, PCI and on board controllers - jeśli to nie ten realtek to (Tak)
        • PCI NE2000 support - to jest następny najpopularniejszy standard jeśli nie masz realteka a inną kartę PCI to powinna działać na ne2k
    • PPP (point-to-point) support - jeśli masz modem
  • Amateur Radio support
    • Amateur Radio support - nie .. chyba że masz
  • IrDA (infrared) support
    • IrDA subsystem support - tylko jeśli korzystasz z portów podczerwieni
  • ISDN subsystem
    • ISDN support - tylko jeśli korzystasz z ISDN
  • Old CD-ROM drivers (not SCSI, not IDE)
    • Support non-SCSI/IDE/ATAPI CDROM drives - to nie powinno ci się przydać :)
  • Character devices - Zostaw wszystko tak jak jest ... chyba że musisz coś zmienić
    • Mouse Support (not serial mice) - możesz wyłączyć jeśli to jest server i, i tak nie używasz.
  • USB support
    • USB support - tylko jeśli nie możesz się bez tego obejść, musisz też wybrać wtedy driver
  • Filesystems - raczej zalecam takie ustawienia. Można coś dodać ale te rzeczy raczej są konieczne.
    • Quota support - tak jeśli zamierzasz ograniczać przestrzeń dyskową użytkownikom.
    • Kernel automounter support (Mod) - żeby automatycznie montował dyski (rzadko się używa więc mod)
    • DOS FAT fs support (Mod) - raczej tak
    • MSDOS fs support (Mod) - może się przydać
    • UMSDOS: Unix-like filesystem on top of standard MSDOS filesystem (Mod) - może się przydać.
    • VFAT (Windows-95) fs support (Mod) - spora szansa że się przyda.
    • ISO 9660 CDROM filesystem support (Mod) - raczej tak
    • Microsoft Joliet CDROM extensions - (Tak) żeby nie było że płytek nie czyta.
    • /proc filesystem support - (Tak)
    • /dev/pts filesystem for Unix98 PTYs - (Tak)
    • Second extended fs support - (Tak)
    • Native Language Support
      • NLS ISO 8859-2 (Latin 2; Slavic/Central European Languages) - (Mod) polskie literki
  • Console drivers
    • VGA text console (Tak)
    • Video mode selection support - nie używam Xów więc nie wiem ale to może być potrzebne.
  • Sound
    • Sound card support - tylko jeśli używasz (Mod)
  • Kernel hacking
    • Magic SysRq key - chyba ci się nie przyda ;)

Comments

Post new comment

Image CAPTCHA

About the author

Artur Ejsmont

Hi, my name is Artur Ejsmont,
welcome to my blog.

I am a passionate software engineer living in Sydney and working for Yahoo! Drop me a line or leave a comment.

Follow my RSS