Kompilacja jądra

W tym miejscu zapraszamy Was do współpracy. Czekamy na propozycje, sugestie i rady.
Moderatorzy zatroszczą się o to, by najlepsze teksty trafiły do FAQ.

Moderatorzy: Moderatorzy, Administratorzy

Awatar użytkownika
Outlaw
Administrator
Posty: 2862
Rejestracja: 2004-06-29, 22:23
Lokalizacja: eth0
Kontakt:

Kompilacja jądra

Post autor: Outlaw »

Ostatnio aktualizowałem kernela na serwerze i pomyślałem czemu nie miałbym napisać jakiegoś faq na ten temat. Myśle że jest to najprostrzy sposób i nawet dla newbie będzie wszystko zrozumiałe. Oczywiście musimy zacząć od ściągnięcia najnowszej wersji z www.kernel.org

Kernela ściągamy do /usr/src/ i oczywiście rozpakowujemy:

Kod: Zaznacz cały


tar jxvf linux-2.*.*.tar.bz2
przechodzimy do katalogu który nam się utworzył

Kod: Zaznacz cały


cd linux-2.*.*
Potem wydajemy polecenie:

Kod: Zaznacz cały


make menuconfig

Pojawi ci sie teraz menu i tam musisz wybrać odpowiednie modugły [M] lub wkompilować w jądro [*]. Do tego wszystkiego używamy tylko spacji i entera. Moduły należy dobrać odpowiednio do posiadanego sprzętu. Poniżej zamieszczam którki opis tego menu:

Kod: Zaznacz cały



Code maturity level options
[ ] Prompt for development and/or incomplete code/driver

Możliwe jest tylko wkompilowanie tej opcji w jądro na stałe. Pozwala korzystać z nowych, rozwijających się dopiero sterowników. Nie zaleca się jej włączenia.    

   Procesor type and features
(PPro/6x86MX) Procesor family
wybieramy rodzaj zainstalowanego u nas procesora,

(1Gb) Maximum Physical Memory
określamy maksymalą wielkość pamięci

[ ] Math emulation
opcja emulująca koprocesor, przydatna tylko wtedy gdy go nie mamy

[*] MTRR (Memory Type Range Register) support
kontroluje dostęp do pamięci, należy ją włączyć przy procesorach: Pentium Pro, Pentium II i wyższych,

[ ] Symmetric multi-processing support
włącz gdy posiadasz więcej niż jeden procesor, w pozostałych przypadkach powinna być wyłączona    

   Loadable module support
[*] Enable loadable module support
Dzięki temu nasze jądro będzie zmodularyzowane -> będzie mogło korzystać z modułów.

[*] Set version information on all symbols for modules
Opcja pozwoli na korzystanie z modułów wcześniej skompilowanych nawet po kompilacji nowego jądra.

[*] Kernel module loader
Pozwala na ładowanie modułów podczas pracy kernela. Bardzo przydatna opcja.    

   General setup
[*] Network support
Obsługa sieci, jeśli masz komputer podłączony do sieci powinnieneś wybrać tę opcję, jeśli nie też :-) gdyż niektóre programy korzystaja z portów sieciowych itp.

[*] PCI support
Konieczne gdy masz urządzenia na PCI,

(Any) PCI access mode
Można ustawić czy system odczyta konfiguracje PCI z biosu czy określić ją samodzielnie. Any próbuje określić konfiguracje, jeśli się nie uda, czyta ją z biosu.

[*] PCI quirks
Pozwala na ustawienie szyny PCI jeśli BIOS komputera jest błędny, Jeśli jesteś pewnie, że mam dobry BIOS możesz wyłączyć, jeśli nie jesteś pewnien, włącz.

[*] Backward-compatible /proc/pci
dla zgodności /proc/pci ze starszymi wersjami kernela, nie rozumiem tego do końca więc, przeczytaj help`a -? :-)

[] MCA support
MicroChannel Architecture - szyna systemowa podobna do PCI i ISA, stosowana w niektórych maszynach IBM PS/2 maszynach i laptopach. Zajrzyj do dokumentacji jądra.

[] SGI Visual Workstation support
tutaj też mógłbym mi ktoś pomóc :-)

[*] System V IPC
Komunikacja między procesami za pomocą System`u V, wykorzystywanego w unixach. Zalecane zaznaczenie tej opcji.

[] BSD Process Accounting
nie wiem do czego to jest, nie jest konieczne włączenie :-)

[*] Sysctl support
Pozwala na dynamiczne zmienianie parametrów jądra.

<M> Kernel support for a.out binaries
<*> Kernel support for ELF binaries
<M> Kernel support for MISC binaries
Opcje te pozwalają na wykonywanie kodu binarnego programów skompilowanych w różnych formatach. Opcje kompilacji warto zaznaczyć tak jak powyżej.

<*> Paraller port support
Musimy zaznaczyć gdy korzystamy z urządzeń podłączonych do portu rownoległego np. drukarka. Możemy wybrać kompilacje jako moduł, jednak u mnie drukarka zadziałała dopiero pod wkompilowaniu tego sterownika w jądro :-(

--> <*> PC-style hardware
Zaznacz jeśli masz port rownóległy PC-style. Taki port mają komputery kompatybilne z IBM PC i Alpha.

--> [] Support foreign hardware
Jeśli chcesz mieć obsługę niestandardowych portów równoległych. Większość jednak nie potrzebuje tej opcji.

[] Advanced Power Management BIOS support
Zaawansowane oszczędzanie energi oparte na BIOSie komputera. Potrzebne w laptopach gdzie musimy oszczędzać akumulatory

   

   Plug and Play support
[*] Plug and Play support
Automatyczne konfigurowanie urządzeń plug and play.

<*> Auto-probe for parallel device
automatyczne rozpoznawanie urządzeń podłączonych do portu równoległego

   

   Block devices
<M> Normal PC floppy disk support
Konieczne do używania stacji dyskietek. Zalecana kompilacja jako moduł.

<*> Enhanced IDE/MFM/RLL disk/cdrom/tape/floppy support
Sterowniki obsługujące urządzenia IDE/MFM/RLL takie jak dyski twarde, cdrom, streamer`y.

[] Use old disk-only driver on primary interface
Sterowniki dla starych dysków MFM,RLL,IDE pracujących jako pierwsze.

<*> Include IDE/ATA-2 DISK support
<*> Include IDE/ATA-2 CDROM support
<> Include IDE/ATA-2 TAPE support
<> Include IDE/ATA-2 FLOPPY support
Włącza wydatniejszą obsługę dysków, cdrom`ów, dyskietek IDE/ATA-2.

<> SCSI emulation support
Włącza emulacje dyskuów IDE jako SCSI

[*] CMD640 chipset bugfix/support
--> [] CMD640 enhanced support
Poprawa błędu i rozszerzony support dla chipsetu CMD640, występującego w większości płyt dla procesorów 486 i Pentium.

[*] RZ1000 chipset bugfix/support
Poprawa błędu i rozszerzony support dla chipsetu RZ1000, występującego w większości płyt dla procesorów 486 i Pentium.

[*] Generic PCI IDE chipset support
Jeśli masz PCI system z obsługą dysków IDE, nie potrzebna, gdy korzystasz z urządzeń SCSI,

[*] Generic PCI bus-master DMA support
Jeśli Twój dysk obsługuje DMA zaznacz tę opcję.

[] Boot off-board chipset first support
Gdy chcesz pozmieniać numery kontrolerów

[*] Use DMA by default when available
Warto włączyć gdy masz urządzenia DMA

[] Other IDE chipset support
Włącz jeśli masz jakieś niestandardowe urządzenia IDE


---- Additional Block Devices

<> Loopback device support
<M> Network block device support
[] Multiple devices driver support
Pozwala na łączenie dysków w jeden system plików - tworzenie macierzy dyskowych

<> RAM disk dupport
Możesz używać części pamięci RAM jako system plików.

<> XT hard disk support
Jeśli masz bardzo stary kontroler dysku używany w IBM XT

<> Mylex DAC960/DAC1100 PCI RAID Controller support
Support dla tych kontrolerów

<> Parallel prot IDE device support
Jeśli masz podłączony CDROM lub jakieś dyski do portu równoległego

<> Compaq SMART2 support
Wsparcie dla kontrolera Compaq Smart Array

   

   Networking options
<M> Packet socket
Protokół używany przez aplikacje do kominikacji z urządzeniami sieciowymi

[*] Kernel/User netlink socket
[*] Network firewalls
Jeśli chcemy użyć firewalla do ochrony naszej sieci.

[] Socket Filtering
<*> Unix domain socket
Dostęp do unixowego mechanizmu nawiązywania i kontorli dostępu do sieci. Wykorzystywane np. przez XWindow

[*] TCP/IP Networking
Obsługa protokołu TCP/IP wykorzystywanego w Internecie i sieciach lokalnych

[*] Network firewalls
Jeśli chcemy użyć firewalla do ochrony naszej sieci.

[] IP: multicasting
[] IP: advanced router
[] IP: kernel level autoconfiguration
[] IP: firewalling
[] IP: optimize as router not host
<> IP: tunneling
<> IP: GRE tunnels over IP
[] IP: aliasing support
Przypisywanie różnych adresów sieciowych jednemu interfejsowi

[] IP: TCP syncoolie support (not enabled per default)
[] IP: Reverse ARP
[] IP: Allow large windows (not recomended if < 16Mb of Memory)
-- 

<> The IPX protocol
Obsługa Novellowego protokołu siciowegi IPX

<> Appletalk DDP
Służy do konwersacji z komputerami Apple

   

   SCSI support
<> SCSI support
Obsługa urządzeń SCSI

<> SCSI disk support
<> SCSI tape support
<> SCSI CD-ROM support
<> SCSI generic support
Wsparcie dla poszczególnych urządzeń SCSI - dysków, napędów taśmowych, CD-ROMu i innych urządzeń np. skanera

[] Probe all LUNs on each SCSI device
Wsparcie dla urządzeń, które mają więcej niż jeden Logical Unit Number (cokolwiek to znaczy :-)), np. CD jukebox

[] Verbose SCSI error reporting (kernel size +=12K)
Błędy urządzeń SCSI będą ławiejsze do zrozumienia

[] SCSI logging facility

SCSI low-level drivers -->
Tutaj wybieramy typ naszego kontrolera SCSI

   

   Network device support
[*] Network device support
Musisz zaznaczyć tę opcję, jeśli chcesz wykorzystywać sieć - internet lub intranet

-- ARCnet support
Jeśli masz karty sieciowe oparte na chipsecie ARCnet

<M> Dummy net driver support
Zaznacz, jeśli używasz sieci na protokołach SLIP lub PPP

<> EQL (serial line load balancing) support
Jeśli chcesz używać jednocześnie dwóch połączeń do tego samego komputera (wymaga 2 modemów i 2 lini telefonicznych)

<> General Instruments Surfboard 1000
Sterownik dla powyższego urządzenia

Ethernet (10 or 100Mbit)
Musisz zaznaczyć jeśli chcesz utworzyć lokalna sieć na bazie kart sieciowych i wybrać odpowiedni jej model

[] FDDI driver support
Jeśli masz kartę FDDI (szybka sieć lokalna)

<M> PLIP (paraller port) support
Jeśli chcemy połączyć dwa komputerki za pomocą portu równoległego,

<M> PPP (point-to-point) support
Gdy korzystamy z Internetu poprzez linię telefoniczną, np. dostęp przez TPSA

--CCP compresors for PPP are only built as modules <> SLIP (serial line) support
starszy brat PPP wykorzystywany (coraz rzadziej) do łączenia się z Internetem, poprzez linię telefoniczną lub do połączeń z innymi komputerami za pomocą kabla nullmodem

<> CSLIP compressed headers
to samo co SLIP, tylko, że kompresowane są nagłówki TCP/IP

[] Keepalive and linefill
dodatkowe możliwości dla SLIP przy łaczach słabej jakości

[] Six bit SLIP encapsulation

[] Wireless LAN (non-hamradui)
Sieci związane z radiem, ale nie z tzw. radiem amatorskim (amateur radio)

Token ring device -->
IBM`owski sposób komunikacji w sieci Ethernet, wymaga specjalnej karty Token ring

[] Fibre Channel driver support

WAN interfaces -->
Obsługa sieci WAN (Wide Area Network),

[] SBNI12-xx support
Driver dla powyższej karty

   

   Amateur Radio support
[] Amateur Radio support
Połączenie z internetem za pomocą "radia amatorskiego". Więcej informacji w HOWTO`s - HAM i AX25

   

   IrDA subsystem support
<> IrDA subsystem support
Obsługa urządzeń na podczerwień, a także wykorzystywanych w notebook`ach i palmptopach

   

   ISDN subsystem
<> ISDN subsystem
Obsługa urządzeń ISDN oraz ich konfiguracja. ISDN umozliwia prowadzenie wideokonferencji oraz zapewnia lepszą jakość przesyłu danych w Internecie.

   

   Old CD-ROM drivers (not SCSI, not IDE)
Sterowniki dla CDROMów starszych typów, jeśli masz takowy powinieneś wybrać tutaj swój model

   

   Character devices
[*] Virtual terminal
Możliwe jest uruchomienie kilku terminali, przełączanych za pomocą klawiszy ALT+Fx. Powinnieneś koniecznie zaznaczyć tę opcję

[*] Support for console on virtual terminal
Dzięki tej opcji będziesz mógł ustawić wirtualny terminal na konsoli - urządzeniu na które wysyłane są komunikaty i ostrzeżenia jądra systemu oraz pozwala na zalogowanie się w trybie single-user


<M> Standard/generic (dumb) serial support
Za pomocą tej opcji będziemy mogli włączyć obsługę urzadzeń działających na porcie szeregowym np. myszka, modem

[] Support for console on serial port
Będziemy mogli ustawić konsolę na porcie szeregowym, czyli komunikaty od jądra będą wysyłane na ten port, użyteczne w przypadku podłączania terminali lub profesjonalnych drukarek

[] Extended dumb serial driver options
Opcja wymagana jeśli chcemy używać HUB6 bądź więcej niż 4 porty szeregowe oraz dzielić linię szeregową

[] Non-standard serial port support
Pozwala na ustawienie niestandardowych portów, wykorzystywana w systemach gdzie konieczna jest praca wielu portów np. serwer z podłączonymi terminalami

[*] Unix98 PTY support
Pseudo-Terminal urządzenie programowe pozwalające na prace takich programów jak np. telnet, xterm

(256) Maximum number of Unix98 PTY in use (0-2048)
Maksymalna liczba pseudo-terminali mogących pracować jednocześnie, dla komputerów desktop 256 jest liczbą w zupełności wystarczającą, jednak dla serwerów udostępniających usługi telnet/ssh/rlogin itp konieczne może się okazać zwiększenie tej liczby

<*> Parallel printer support
Zaznacz jeśli Twoja drukarka jest podłączona do portu równoległego. Zazwyczaj wystarczy ustawienie tego jako moduł, ale u mnie pomogło dopiero wkompilowanie w jądro na stałe

[] Support IEEE1284 status readback
Jeśli Twoja drukarka dostosowywuje się do IEEE1284 (FireWire?), pozwala dostarczać znaki statusu np. cat /dev/lp1

[*] Unix98 PTY support
Pseudo-Terminal urządzenie programowe pozwalające na prace takich programów jak np. telnet, xterm

[*] Mouse Support (not serial mice) Mice -->
Obsługa myszki podłączonej do portu PS/2. Zaznaczenie tej opcji wymagane jest tylko i wyłącznie przy myszkach PS/2, myszki szeregowe nie potrzebują jej wcale! W sekcji Mice możemy wybrać rodzaj naszej myszki

<> QIC-02 type support
Jeśli masz takie urządzenie taśmowe (nie SCSI)

[] Watchdog Timer Support
Opcja użyteczna w przypadku serwerów, które muszą być przywrócone do pracy po reboot`ie tak szybko jak to możliwe

<> /dev/nvram support

[*] Enhanced Real Time Clock Support
Dostęp do zegara czasu rzeczywistego

Video For Linux -->
<> Video For Linux
Konieczne jest zaznaczenie tej opcji jeśli chcemy oglądać telewizję bądź słuchać radia. Powinniśmy także wybrać odpowiedni rodzaj naszej karty

Joystick support -->
<> Joystick support
Jeśli mamy podłączony do komutera joystick i chcemy go wykorzystywać w grach. Także i tutaj powinniśmy określić model naszego sprzętu

<> Double Talk PC internal speech card support
Sterownik dla DoubleTalkPC - syntezatora mowy

Ftape, the floppy tape device driver -->
Jeśli masz napęd taśmowy

   

   Filesystem
[*] Quota support
Jeśli odpowiesz tak, będziesz mógł ustawiać limity dyskowe użytkownikom. Zobacz artykuł o Quocie.

<> Kernel automonter support
Pozwala na montowanie odległego systemu plikowego na żądanie

<> Amiga FFS filesystem support
FFS (Fast File System) jest używany przez Amigi. Jeśli masz taki dysk i chcesz z niego czytać, bądź pisać na nim zaznacz tę opcję

<> Apple Macintosh filesystem support (experimental)
Pozwala na korzystanie z dyskietek i dysków twardych sformatowanych w systemie plikowym Macintosh`y

<*> DOS FAT fs support
Gdy masz obok Linux`a zainstalowanego Windows`a zaznaczenie tej opcji pozwala na korzystanie z jego partycji

-- <> MSDOS fs support
Dostęp do partycji MSDOS

<> VFAT (Windows-95) fs support
Dostęp do partycji FAT z długimi nazwami plików

<*> ISO 9660 CDROM filesystem support
ISO 9960 jest standardem jeśli chodzi o zapis na płytach kompaktowych, więc opcja ta powinna być zaznaczona, jeśli chcemy korzystać z CDROMu

[] Microsoft Joliet CDROM extisions
Joliet jest Microsoftowym rozszerzeniem dla ISO 9660, który pozwala na długie nazwy plików w formacie unicode

<> Minix fs support
Dostęp do partycji systemu Minix

<> NTFS filesystem support (read-only)
System plików Windows NT. Możliwe jest tylko czytanie z tego rodzaju partycji

<> OS/2 HPFS filesystem support (read-only)
HPFS to system plików systemu OS/2 IBM`a

[*] /proc filesystem support
Wirtualny system plików tworzony w katalogu /proc do którego jądro zapisuje pliki z informacjami o działalności systemu np. przerwania itp.

[] /dev/pts filesystem for UNIX98 PTYs
Zaznacz tę opcję jeśli zaznaczyłeś UNIX98 PTY support, jest to wirtualny filesystem dla PTY

<> ROM filesystem support
System plików tylko do odczytu wykorzystywany w inicjującym system disk-ram -ie

<*> Second extended fs support
Standardowy system plików wykorzystywany w Linuxie: ext-2. Koniecznie wkompiluj to w jądro.

<> System V and Coherent filesystem support
Jeśli chcesz korzystać z partycji systemów unixowych - SCO, Xenix i Coherent

<> UFS filesystem support
System plików wykorzystywany m.in. przez SunOS, FreeBSD, NetBSD, OpenBED i NeXTstep

Network File System -->
Support dla sieciowych systemów plikowych, np. takich jak NFS, SMB

Partition Types -->
Native Language Support -->
   

   Console drivers
[*] VGA text console
Bez tej opcji niemożliwe będzie korzystanie z Linuxa w trybie tekstowym, a praca z takim systemem będzie raczej uciążliwa. Koniecznie zaznacz.

[] Video mode selection support
Gdy masz kartę, która pozwala na ustawianie niestandardowych rozdzielczości ekranu

   

   Sound
<M> Sound card support
Jeśli masz kartę dzwiękową w swoim komputerze. Polecam wybranie tej opcji jako moduł, u mnie po wkomilowaniu na stałe w jądro wogóle nie mogłem uruchomić karty

Musisz także wybrać rodzaj swojej karty. Dla SoundBlaster 16 jest to:
<M> OSS sound modules
<M> 100% Sound Blaster compatibiles (SB16/32/64, ESS, Jazz16) support
<M> FM synthesizer (YM3812/OPL-3) support

Dla SoundBlaster Live! należy wybrać tylko i wyłącznie:
<M> OSS sound modules

Additional low level sound drivers -->
Przyjrzyj się temu menu bliżej jeśli masz karty: miroSOUND PCM12 i PCM20, Sound Blaster 32/64 lub Galant Audio Cards (SC-6000 i SC-6600)    

   Kernel hacking
[] Magic SysRq key
Będziesz miał większą kontrolę nad systemem, np. podczas debuggowania jądra. Opcja dla ludzi pracujących nad jądrem systemu.



OK jeśli wszystko już wybraliśmy to teraz:

Kod: Zaznacz cały


make dep && make clean && make bzImage && make modules && make modules_intall && make install


Dla niezorientowanych może wytłumacze
make dep && make clean <---> przygotowuje do kapilacji
make bzImage <---> buduje jadro
make modules && make modules_install <---> buduje i kopiuje do /lib moduly
make install <---> wrzuca kernela do "/"

Teraz w zależności od twojego sprzętu będziesz czekał od 2min nawet do 12h :D (na 486 leci 12h hack na 3200+ minute i 40 sekund hack)

Po wszystkim tworzysz w katalogu /boot katalog old-2.4.28 <-- w moim przypadku. Ty możesz napisać swoja starą wersje kernela. Kopiujesz do tego katalogu wszystki pliki z katalogu /boot oprócz boot_message.txt. To wszytko wrazie ta kompilacja by się nie udała to będziesz miał jeszcze wtedy starego kernela. Teraz wystarczy z "/" skopiować do /boot System.map i vmlinuz. No i na koniec reboot i jeśli zrobiłeś wszystko dobrze to powinnieneś cieszyć się nowym kernelem.

PATCHOWANIE KERNELA

Chcąc patchować kernela musimy ściągnąć patcha do swojego kernela skopiować go do katalogu /usr/src/ i potem

Kod: Zaznacz cały

# gzip -dc patch-2.*.*.gz | patch -p0
lub

Kod: Zaznacz cały

# bunzip2 patch-2.*.*.bz2 | patch -p0
Jeśli jest jakiś błąd to patch generuje plik .rej , więc żeby przekonać się czy patch został nałożony musimy sprawdzić czy nie pojawiły się żadne .rej

Kod: Zaznacz cały

find /usr/src/linux-2.*.* -name "*.rej"
Jeśli nic nie znalazło tzn że wszystko poszło dobrze i możemy przystąpić do kompilacji jądra hack
Awatar użytkownika
Skyscraper
Administrator
Posty: 753
Rejestracja: 2004-05-22, 10:46
Lokalizacja: Wrocław
Kontakt:

Re: Kompilacja jądra

Post autor: Skyscraper »

Najs :)

Mam tylko kilka uwag:
1. czy moglbys opisac dodatkowo sposob na zrobienie w LILO dwoch pozycji: stare i nowe jadro, aby po ew. niepowodzeniu z nowym bylo mozliwe latwe odpalenie starego bez kombinowania. Obecnie robisz tylko kopie starego w dodatkowym katalogu. Chodzi mi o przedstawienie procesu edycji lilo.conf itd...
2. przydalaby sie wzmianka o polozeniu skompilowanego jadra w zrodlach - dla osob ktore nie robia # make install i wzmianka o mozliwosci recznego skopiowania jadra, system.map, config w odpowiednie miejsca
3. jesli mozesz popracowac nad struktura dokumentu. Jakis delikatny podzial na rozdzialy, a nie jednym ciagiem
4. do poprawki literowki i ortografy :)

Pozdrawiam
Awatar użytkownika
Skyscraper
Administrator
Posty: 753
Rejestracja: 2004-05-22, 10:46
Lokalizacja: Wrocław
Kontakt:

Re: Kompilacja jądra

Post autor: Skyscraper »

Moze byc weekend ;)
sayetan
Moderator w st. spocz.
Posty: 2193
Rejestracja: 2004-06-20, 21:47
Lokalizacja: Jelenia Góra

Re: Kompilacja jądra

Post autor: sayetan »

moim zdaniem niejasno jest takze wytlumaczony proces kompilacji jadra(nie konfiguracji)
chodzi mi tutaj o magiczne polecenia make, na poczatku dokumentu uzyles komendy:

Kod: Zaznacz cały

tar jxvf linux-2.*.*.tar.bz2
co jednoznacznie daje do zrozumienia ze w sposob opisany dalej kompiluje sie cale drzewo 2.*.*
tak nie jest, jak wiadomo 2.6.* ma juz to bardziej sprawnie zrobione, jezeli juz uzyles takiego polecenia
przydala by sie wzmianka, ze jada z serii 2.4.* kompiluje sie tak, a 2.6.* tak...
nie ma takze opisanych graficznych konfiguratorow jadra, a czasami poczatkujacym lepiej wydac make kconfig niz latac w menu dialogowym.

to chyba wszystko
nie uwazam ze zle napisales tego FAQ, przeciwnie, jest to jeden z lepszych w sieci, bo niewiele jest takich, ktore opisuja poszczegolne opcje.
wspomnialem o zapomnianych przez Ciebie punktach procesu kompilacji jadra.
Awatar użytkownika
snaj
Moderator w st. spocz.
Posty: 1608
Rejestracja: 2004-10-10, 16:32
Lokalizacja: Warszawa
Kontakt:

Re: Kompilacja jądra

Post autor: snaj »

No disregards dla autora po prostu warte uwagi link dla poczatkujacych i do tego w pl :
http://www.linux.com.pl/forum/index.php ... 7622737c6f

Poza tym opisany na poczatku sposob patchowania przy uzyciu -p0 i z /usr/src nie jest najtrafniejszy, w przypadku gdy wewnatrz patcha bedzie inna nazwa katalogu ze zrodlami kernela niz twoja na dysku (co zdarza sie czesto) wynikna powazne problemy ktorych poczatkujacy najpewniej nie beda w stanie obejsc.
Tak wiec najlepszy sposob to patchowanie z katalogu ze zrodlami czyli : /usr/src/linux-blabla przy uzyciu parametru -p1.
*
[color=blue]Sieci[/color]/[color=green]Serwery[/color]/[color=red]Security[/color] - Freelancer
*
kemro
Użytkownik
Posty: 114
Rejestracja: 2004-06-16, 12:44

Re: Kompilacja jądra

Post autor: kemro »

no, jak dla mnie art super ze wzgledu na wlasnie opis wiekszosci, (a moze wszystkie tam sa.. nie wiem..) tych konfiguracji... i, ze jest to aktualny ich opis... (nie jakis sprzed 2 lat...). Dla kogos takiego jak mnie, nei znajacego rpawie wogole angielskiego, oraz majacego male pojecie o sprzecie tan art jest po prostu swietny.. lipa tylko taka, ze jest to dla 2.6 ... a jakos mi sie nei widzi jeszcze kompilacja tego kernela.. wole 2.4 i jak wczoraj sobie probowalem, to niestety... jest to troche udreka...

jest mozliwosc moze, zeby dalo sie zrobic cos takiego, taki opis... osobno dla jader 2.4 i 2.6 ?

Nawet jesli nie to i z tym, mysle, ze w weekend sie wezme i w koncu sprobuje poprawnie skompilowac kernela.. bo z tego co zauwazylem to po prostu rozne opcje w tych kernelach (zrodlach.. menu..) sa po prostu roznie i w roznych dzialach poukladane.. tak ?
kemro
Użytkownik
Posty: 114
Rejestracja: 2004-06-16, 12:44

Re: Kompilacja jądra

Post autor: kemro »

Heh.. to ja juz nic nie rozumiem.. :P

Probowalem wlasnie 2.4.29 skompilowac... no i wiekszosc opcji mialem w calkiem innych kolejnosciach... najpierw jedna.. pozniej druga rpzez Ciebie nie opisana, ktora ukazywala sie 3 pozycje nizej, pomiedzy ktorymi te 3 byly wogole w jakims innnym dziale itp.

Jakies lewe zrodla mam czy co.. :D
Awatar użytkownika
Outlaw
Administrator
Posty: 2862
Rejestracja: 2004-06-29, 22:23
Lokalizacja: eth0
Kontakt:

Re: Kompilacja jądra

Post autor: Outlaw »

Opcje mogą się różnić, ale sposób kompilacji pasuje to gałęzi 2.4 również.
Awatar użytkownika
Outlaw
Administrator
Posty: 2862
Rejestracja: 2004-06-29, 22:23
Lokalizacja: eth0
Kontakt:

Re: Kompilacja jądra

Post autor: Outlaw »

Skyscraper pisze:Najs :)

Mam tylko kilka uwag:
1. czy moglbys opisac dodatkowo sposob na zrobienie w LILO dwoch pozycji: stare i nowe jadro, aby po ew. niepowodzeniu z nowym bylo mozliwe latwe odpalenie starego bez kombinowania. Obecnie robisz tylko kopie starego w dodatkowym katalogu. Chodzi mi o przedstawienie procesu edycji lilo.conf itd...
2. przydalaby sie wzmianka o polozeniu skompilowanego jadra w zrodlach - dla osob ktore nie robia # make install i wzmianka o mozliwosci recznego skopiowania jadra, system.map, config w odpowiednie miejsca
3. jesli mozesz popracowac nad struktura dokumentu. Jakis delikatny podzial na rozdzialy, a nie jednym ciagiem
4. do poprawki literowki i ortografy :)

Pozdrawiam
1. Kopiujemy te pliki tak jak tu:

Kod: Zaznacz cały

cp /bzImage /boot/vmlinuz-2.4.22
cp /System.map /boot/System.map
Po wykonaniu tych kroków przechodzimy do konfiguracji /etc/lilo.conf.

Kod: Zaznacz cały

image = /boot/vmlinuz-2.*.*
root = /dev/hdc3
label = Linux-2.*.*
read-only
Teraz dajemy "lilo" i powinno być "Added Linux-2.x.x *" Jeśli tak jest to wszystko poszło pomyślnie.

2. No jeśli dajemy make install to pliki System.map i bzImage pojawiają się w katalogu głównym czyli "/" wystarczy je skopiować tak jak wyżej opisałem.

3. OK to kiedy indziej.

4. Z polskiego nie każdy może być dobry :P
Awatar użytkownika
pwe25
Użytkownik
Posty: 99
Rejestracja: 2004-12-25, 21:36
Lokalizacja: Warszawa

Re: Kompilacja jądra

Post autor: pwe25 »

a moze by wspomnial przy kompilacji o dyskach SATA i np wpisach w Grubie ?[/list]
kropka .
Awatar użytkownika
Outlaw
Administrator
Posty: 2862
Rejestracja: 2004-06-29, 22:23
Lokalizacja: eth0
Kontakt:

Re: Kompilacja jądra

Post autor: Outlaw »

Nie mam dysku SATA i też nie używam GRUB także nie będę pisał na sucho.
Awatar użytkownika
pwe25
Użytkownik
Posty: 99
Rejestracja: 2004-12-25, 21:36
Lokalizacja: Warszawa

Re: Kompilacja jądra

Post autor: pwe25 »

co do GRUBa to:

dla ATA:

Kod: Zaznacz cały

title Slackware
root (hd0,X-1)
kernel /boot/vmlinux-2.X.X root=/dev/hdaX
dla SATA:

Kod: Zaznacz cały

title Slackware
root (hd0,X-1)
kernel /boot/vmlinux-2.X.X root=/dev/sdaX
co do SATA to jeszcze nie wiem jakie ustawienia sa pewnie, co mozna a czego nie - wiem na razie na jkaich mi dziala, jak bede mial czas to moge tyu wrzucic jesli by kogos interesowalo
kropka .
Awatar użytkownika
mina86
Moderator
Posty: 3343
Rejestracja: 2004-06-14, 21:58
Lokalizacja: Linux 5.x x86_64
Kontakt:

Re: Kompilacja jądra

Post autor: mina86 »

Cóż.. Nie byłbym sobą, gdybym nie napisał własnej wersji: ;)

W poniższym FAQ-u zakłąda się, że czytelnik ma przynajmniej podstawową wiedzę odnośnie obsługi systemu GNU/Linux. O ile nie podano inaczej wszystkie komendy wykonuje się oczywiście w konsoli lub terminalu. Zaleca się również robić to wszystko co nie wymaga uprawnień roota jako zwykły użytkownik.

Obtaining the latest kernel

Kernel (pobrany z www.kernel.org lub jakiegoś mirrora) należy zapisać w /usr/src, a następnie rozpakować poelceniem tar jxvf linux-2.X.X.tar.bz2 lub tar zxvf linux-2.X.X.tar.gz zależnie od tego jaka wersja została ściągnięta (.bz2 czy .gz, osobiście polecam .bz2 - jest mniejszy). Zaowocuje to stworzeniem odpowiedniego katalogu linux-2.X.X. Zalecam zmianę nazwy katalogu na linux co się przyda później przy patchowaniu. Zrobić to można w następującym poleceniem: mv linux-2.X.X linux .

Jeżeli już posiadamy wcześniejszą wersję źródeł jądra to bez sensu ściągać wszsytko od nowa, lepiej ściągnąć tzw. incremental patch, czyli plik zawierający jedynie zapisane zmiany pomiędzy dwoma kolejnymi wersjami jądra. Z założenia jest on znacznie mniejszy od całego źródła. Poejdynczy patch (w przypadku jądra) zawiera jedynei zaminy pomiędzy dwoma kolejnymi wersjami, np. plik patch-2.6.10.bz2 pozwala na zmianę z wersji 2.6.9 do 2.6.10, ale żeby zmienić z 2.6.8 do 2.6.10 trzeba najpierw zaaplikować patch patch-2.6.9.

Zakładając, że źródła mamy w katalogu /usr/src/linux aby zaaplikować patch należy ściągnąć go z www.kernel.org (lub mirrora) do katalogu /usr.src, a następnie przejść do katalogu linux (cd /usr/src/linux) a następnie użyć jednego z poleceń: bzip2 -d <../patch-2.X.X.bz2 |patch -p1 lub gzip -d <../patch-2.X.X.gz |patch -p1 (zależnie czy ściągneliśmy .bz2 czy .gz). Jeśli jest jakiś błąd to patch generuje plik .rej, więc żeby przekonać się czy patch został nałożony musimy sprawdzić czy nie pojawiły się żadne .rej: find /usr/src/linux -name "*.rej" . Jeśli nic nie znalazło tzn że wszystko poszło dobrze i możemy przystąpić do kompilacji jądra.

Konfiguracja

Aby skonfigurować jądro należy w katalogu ze źródłem (cd /usr/src/linux) odpalić jedno z poleceń:

Kod: Zaznacz cały

make config      # ytkia konfiguracja w trybie tekstowym
make oldconfig   # wprwoadzone ostatnio w serii 2.6.X zamiast config
make menuconfig  # konfiguracja w trybie tekstowym z użyciem menu
make xcofnig     # konfiguracja w trybie graficznym (wymaga Qt)
make gconfig     # konfiguracja w trybie graficznym (wymaga GTK)
Najwygodneijsze jest rzecz jasna jedno z dwóch ostatnich. Opcje należy dobrać odpowiednio do posiadanego sprzętu. Poniżej zamieszczam którki opis części pozycji:
/* Tutaj opis by Outlaw */

W przypadku patchowania jądra można pominąć ten krok i wówczas zostaniemy zapytani jedynie o nowe opcje tuż przed kompilacją (osobiście zalecam, bo nie trzeba szukać po całym konfigu co jest nowe).

Kompilacja

Zasadniczo: Dla 2.4.x: make dep bzImage modules; Dla 2.6.X: make bzImage modules .
dep - w sumie nie wiem co robi ;) ale jest wymagane przy 2.4.X.
bzImage - kompiluje jądro
modules - kompiluje moduły
W przypadku 2.4.X, jeżeli coś pójdzie źle to można jeszcze na początku spróbować make clean, ale generalnie jest to zbędne i jedynie tracimy na tym czas bo wymusza to rekompilacje wszystkiego, co w przpadku patchowania wcale nie jest wymagane. W zależności od komputera kompilacja może trwać krótko, tak średnio, długo albo bardzo długo ;)

Instalacja

Tutaj już trzeba posiadać uprawnienia roota, toteż zanim się coś zrobi należy odpalić polecenie su i ew. podać hasło jeżeli jest to wymagane (raczej powinno być). Potem wystarczy już tylko zainstalować moduły make modules_install i kernel. Niektórzy zalecają używanie make install, ale ja osobiście temu jakoś nie ufam i wole wzsystko robić ręcznie :P Osobiście zalecam następujący sposób:

Kod: Zaznacz cały

cd /usr/src/linux
cp .config /boot/config-2.X.X
cp System.map /boot/System.map-2.X.X
cp arch/i386/boot/bzImage /boot/bzImage-2.X.X
cd /boot
mv config config~
mv System.map System.map~
mv bzImage bzImage~
ln -s config-2.X.X config
ln -s System.map-2.x.x System.map
ln -s bzImage-2.X.X bzImage
W ten sposób będziemy mieli zarówno stare jak i nowe jądro. Należy pamiętać, żeby od czasu do czasu skasować stare, niepotrzebne juz jądra.

LILO

Przy takim schemacie trzymania jądra LILO wystarczy skonfigurować tylko raz ustawiając następujące obrazu:

Kod: Zaznacz cały

image = /boot/bzImage
  root = /dev/hdaY
  label = linux
  read-only

image = /boot/bzImage~
  root = /dev/hdaY
  label = oldlinux
  read-only
Oczywiście /dev/hdaY to odpowiednia partycja root. Aby sprawdzić jaka ona jest najlepiej wykonać cat /etc/fstab po czym poszukać wiersza, w ktorej druga kolumna to / i pierwsza kolumna to właśnie interesująca nas wartość. Np. dla dysków SATA będzie to coś w stylu /dev/sdaY, a nie /dev/hdaY jak to jest w ATA.

Plik konfiguracyjny LILO to /etc/lilo.conf i należy go edytować Swoim Ulubionym Edytorem Tekstowym [tm] :) Jednakże za każdym razem po zmianie jądra należy odpalić polecenie: lilo żeby LILO zupdatował swój wpis w MBR.

GRUB

(Sekcja na podstawie wypowiedzi pwe25) Zasadniczo analogicznie do LILO tyle, że do pliku konfiguracyjnego (/etc/grub/menu.lst choć w różnych dystrybucjach może to być inny plik) należy dopisać:

Kod: Zaznacz cały

title linux
root (hd0,Y-1) 
kernel /boot/bzImage root=/dev/hdaY

title linux
root (hd0,Y-1) 
kernel /boot/bzImage~ root=/dev/hdaY
Podsumownie
Całość wygląda mniej więcej tak:

Kod: Zaznacz cały

cd /usr/src
$ wget http://ftp.kernel.org/pub/linux/2.X/linux-2.X.X.tar.bz2  # lub z mirrora
< jakiś progress widać >
$ tar jxf linux-2.X.X.tar.bz2
< długa lista plików >
$ mv linux-2.X.X linux
Lub jeżeli patchujemy:

Kod: Zaznacz cały

cd /usr/src
$ wget http://ftp.kernel.org/pub/linux/2.X/patch-2.X.X.bz2  # lub z mirrora
< jakiś progress widać >
$ cd linux
$ bzip2 -d <../patch-2.X.X.bz2 | patch -p1
< lista różnych zmian >
$ find . -name '*.rej'
< powinno być pusto >
No i potem dalej:

Kod: Zaznacz cały

cd linux
$ make xconfig   # lub co tam wolimy, można pominąć przy patchowaniu
< przebiega konfiguracja >
$ make dep       # pominąć w przypadku 2.6.X
< jakieś różne dziwne nieistotne rzeczy ;) >
$ make bzImage modules
< znowu coś czego nei trzeba rozumieć >
su             # tutaj wpisuje sie hasło jeśli wymagane
# make modules_install
< i tu też >
$ cd /usr/src/linux
$ cp .config /boot/config-2.X.X
$ cp System.map /boot/System.map-2.X.X
$ cp arch/i386/boot/bzImage /boot/bzImage-2.X.X
$ cd /boot
$ mv config config~
$ mv System.map System.map~
$ mv bzImage bzImage~
$ ln -s config-2.X.X config
$ ln -s System.map-2.x.x System.map
$ ln -s bzImage-2.X.X bzImage
$ lilo     # ewetnualnie grub czy coś takeigo
$ exit
#

Kłopoty

Q: Jako zwykły użytkownik nie mogę nic zapisać w /usr/src
A: Bardzo proste :) (wykonać jako root):

Kod: Zaznacz cały

usermod <nazwa-użtykownika> -G root
chgrp root /usr/src
chmod 775 /usr/src
Q: Przy próbie konfiguracji/kompilacji dostaje coś takiego:

Kod: Zaznacz cały

Makefile:531: /usr/src/linux/arch/i686/Makefile: Nie ma takiego pliku ani katalogu
make: *** Brak reguł do wykonania obiektu `/usr/src/linux/arch/i686/Makefile'. Stop.
A: Przed odpaleniem make'a wykonaj jeszcze polecenie: unset ARCH.

Q: LILO mówi iż: Fatal: open /boot/bzImage~: No such file or directory
A: Ten problem powinien pojawić się jedynie przy pierwszej instalacji wg. podanego wyżej sposobu. Później nie powinien on już wystąpić. Rozwiązanie jest proste:

Kod: Zaznacz cały

ln -s config-2.X.X config~
ln -s System.map-2.x.x System.map~
ln -s bzImage-2.X.X bzImage~
Co prawda uniemożliwi to wówczas uruchomienie poprzedniego jądra, ale to tylko tak za 1 razem.
Ostatnio zmieniony 2005-03-15, 17:33 przez mina86, łącznie zmieniany 1 raz.
Zastrzegam sobie prawo nieanalizowania postów pisanych niepoprawną polszczyzną.
Post generated automatically by A.I. system code name ‘mina86’ in response to the previous one.
ODPOWIEDZ