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!

Web Scalability for Startup Engineers

If you are into technology, you can order my book Web Scalability for Startup Engineers on Amazon. I would love to hear what are your thoughts so please feel free to drop me a line or leave a comment.

Follow my RSS