Ahoj, psali jste, abych sem vylepil návod na kompilaci jádra. Na netu je jich sice dost, ale budiž. Příklad používá jako vzor jádro 2.6.20. Upravte na aktuální jádro.
Edit:
Předpoklady pro kompilaci:
sudo aptitude install build-essential kernel-package libncurses5 libncurses5-dev cpp gcc fakeroot
Pro případ, že nepoužíváte "sudo", tak příkaz "aptitude install..." vyvolat jako superuživatel
Kompilace kernelu
1. stáhnout kernel a poslední patch (například níže, postupem času budou jistě novější)
Code:
wget ftp://ftp.kernel.org/pub/linux/kernel/v2.6/linux-2.6.20.tar.bz2
wget ftp://ftp.kernel.org/pub/linux/kernel/v2.6/patch-2.6.20.1.bz2
2. zkonfigurovat kernel
Nejdříve rozbalit do src adresáře
Code:
cd /usr/src
tar jxf /path/to/linux-2.6.20.tar.bz2
Aplikovat patch
mv linux-2.6.20/ linux-2.6.20.1
cd linux-2.6.20.1/
...na zkoušku
bzcat /path/to/patch-2.6.20.1.bz2 | patch -p1 --dry-run
... a pokud nejsou chyby, tak naostro
bzcat /path/to/patch-2.6.20.1.bz2 | patch -p1
zkopírovat aktuální .configuraci z běžícího kernelu
cp /boot/config-$(uname -r) .config
make menuconfig
... po zkonfigurování
fakeroot make-kpkg clean
fakeroot make-kpkg --append-to-version "<-suffix>" --revision "<revision#>" --us --uc --initrd kernel_image kernel_headers
a pak už jen naistalovat.
Niekde som čítal že pred kompiláciou treba doinštalovať aj nejaké ďalšie balíky a knižnice, je to tak?
Jaký je správný postup, pokud chci aplikovat nový patch? Doposud jsem to řešil smazáním celého zdrojáku a převedením situace na předchozí případ.
Ja mám pocit že treba nainštalovať baličky fakeroot build-essential a ešte dačo to si už nespominam:D
Tady by mě zajímalo, jak si pak s celou věcí poradí module-assistant, protože s ním instaluju docela dost důležitých věcí
Citace od: Erich Stark kdy 01. 02. 2009, 17:09:02
Niekde som čítal že pred kompiláciou treba doinštalovať aj nejaké ďalšie balíky a knižnice, je to tak?
Pro úspěch je třeba splnit předpoklady, tj. mít v systému nainstalováno:
apt-get install kernel-package libncurses5-dev fakeroot wget bzip2 build-essential
Citace od: Ahmul kdy 02. 02. 2009, 09:37:09
Jaký je správný postup, pokud chci aplikovat nový patch? Doposud jsem to řešil smazáním celého zdrojáku a převedením situace na předchozí případ.
Můj názor je takový, že pokud je patch aplikovatelný proti stejnému zdroji, tak jej samozřejmě aplikovat jde i bez mazání a převodu na předchozí stav. Dělal jsem si tak tickless jádro s hpet a dalšími věcmi pomocí několika patchů.
Postup je vždy stejný, např. ten, co jsem popsal výše.
CitaceMůj názor je takový, že pokud je patch aplikovatelný proti stejnému zdroji, tak jej samozřejmě aplikovat jde i bez mazání a převodu na předchozí stav. Dělal jsem si tak tickless jádro s hpet a dalšími věcmi pomocí několika patchů.
Postup je vždy stejný, např. ten, co jsem popsal výše.
Myšlena byla spíše situace, kdy vyjde jádro, např. 2.6.28. Člověk nakonfiguruje, zkompiluje a beží na něm. Pak vyjde první oprava. Nikde se nic nemaže, aplikuje se patch, udělá se clean, zkompiluje a jede se. Pak vyjde druhá oprava a tady je problém, protože mám dojem, že ta je oproti původnímu stromu. Takže to řeším právě smazáním celého zdrojáku a převedením na předchozí problém, než se snažit revertovat předchozí opravu.
patche jsou kumulativní. vyzkoušel bych dry-run a viděl bych jestli to prošlo. 2x provedená stejná změna může znamenat stejný výsledek, a nové změny se aplikují v pořádku.
Výňatek z README ve zdrojácích kernelu
Citace
94 Unlike patches for the 2.6.x kernels, patches for the 2.6.x.y kernels
95 (also known as the -stable kernels) are not incremental but instead apply
96 directly to the base 2.6.x kernel.
Ale jak se píše dále v dokumentaci, tak existují jak patche oproti základnímu stromu, tak inkrementální patche
alias
ftp://ftp.kernel.org/pub/linux/kernel/v2.6/incr (ftp://ftp.kernel.org/pub/linux/kernel/v2.6/incr)
místo
ftp://ftp.kernel.org/pub/linux/kernel/v2.6/ (ftp://ftp.kernel.org/pub/linux/kernel/v2.6/)
Takže odteď alespoň vím, které patche si mám stahovat:)
myslím, že je to to, co jsem psal. Patche nejsou přírůstkové (incremental) ale souhrnové (kumulativní) a aplikují se vždy proti základnímu stromu. Ale to jistě víte. :)
Inak nedalo by sa do jadra nejak zakompilovat hned aj ovladac na grafiku?
Ja bych se chtel zeptat na jednu vec, kdyz si zkompiluji vanilku (2.6.28 napr.) kdyz do nej budu chtit pridat bezpecnostni aktualizace, ktere vychazeji, nebo dokazal by mi nekdo vysvetlit jak je to s bezpecnostnimi aktualizacemi a jejich implementacemi do vanila kernelu? Je to presne jak je tu napsano?
Diky.
Citace od: tom.i kdy 08. 02. 2009, 09:47:59
Ja bych se chtel zeptat na jednu vec, kdyz si zkompiluji vanilku (2.6.28 napr.) kdyz do nej budu chtit pridat bezpecnostni aktualizace, ktere vychazeji, nebo dokazal by mi nekdo vysvetlit jak je to s bezpecnostnimi aktualizacemi a jejich implementacemi do vanila kernelu? Je to presne jak je tu napsano?
Diky.
Takto nainstalovaný kernel si musíte aktualizovat sám... Tedy sledovat chyby a když se objeví, tak stáhnout patch, aplikovat, překompilovat, rebootovat
Dnes som sa pokusal kompilovat kernel ale ani som sa tam nedostal..je to dost zlozite :(
Kam ses nedostal?
Nebo spíše kam ses dostal?
Najprv mi neslo sa dostat do priecinku /usr/scr/linux potom som ho zmazal a vytvoril este raz..a neviem co vsetko treba nechat zapnute alebo vypnute je tam toho fakt dost..mozno aj kebyze je to po slovensky si nepomozem :-D
a inak som to skusal skompilovat a do /boot/grub/menu.lst som zapisal title (nazov kernelu) a cestu k nemu..pri bootovani ked som ho vybral ze nenaslo mi cestu
Po kompilaci musis jeste s nejvetsi pravdepodobnosti vytvorit i prislusny initrd, a to prikazem: mkinitramfs -o /boot/initrd-2.6.X-nazev 2.6.X-nazev
Citace od: Boogey kdy 12. 02. 2009, 20:41:07
Po kompilaci musis jeste s nejvetsi pravdepodobnosti vytvorit i prislusny initrd, a to prikazem: mkinitramfs -o /boot/initrd-2.6.X-nazev 2.6.X-nazev
To určitě ne. Kdyby postupoval návodu, který jsem publikoval, tak by to nepotřeboval (kompiluje se se zapnutým --initrd)
Erich má zatím ale problém se základy práce v konsoli, tak to bude muset ještě párkrát zkusit.
Citace od: Spox kdy 13. 02. 2009, 23:27:29
Citace od: Boogey kdy 12. 02. 2009, 20:41:07
Po kompilaci musis jeste s nejvetsi pravdepodobnosti vytvorit i prislusny initrd, a to prikazem: mkinitramfs -o /boot/initrd-2.6.X-nazev 2.6.X-nazev
To určitě ne. Kdyby postupoval návodu, který jsem publikoval, tak by to nepotřeboval (kompiluje se se zapnutým --initrd)
Erich má zatím ale problém se základy práce v konsoli, tak to bude muset ještě párkrát zkusit.
holt mam smolu...Musim sa viac ucit..precitat co najviac podrobnych navodou..ako spravit vsetko za sebou, mozno u niekoho su medziriadky samozrejme ale ja to bohuzial neviem :)..staci mi jeden taky navod..spravim to raz,dva,tri krat a uz to pojde od ruky :)
Neboj, to zvladns v pohode. Kuprikladu ja jsem vcera po docela dlouhym experimentovani dokazal nabootovat i bez initrd a pochopil, jak to funguje :D Je potreba si o tom jen neco precist nebo se poptat a taky venovat tomu nejakej cas. Postupne to pujde bez problemu.
Citace od: Boogey kdy 15. 02. 2009, 00:22:43
Neboj, to zvladns v pohode. Kuprikladu ja jsem vcera po docela dlouhym experimentovani dokazal nabootovat i bez initrd a pochopil, jak to funguje :D Je potreba si o tom jen neco precist nebo se poptat a taky venovat tomu nejakej cas. Postupne to pujde bez problemu.
No sak o to ide :-D
Len najhorsie je pochopit niektore veci ci ich zaskrknut v configuracii jadra alebo nie..pravdaze co je to filesystem to viem ale tak vseobecne ostatne :-D
Pocul som ze sa to da aj tak nejak ze pouzijem old config teda ten ktory je aktualny pouzity v systeme a len si tam pridam support mojej wifi karty :)
Ale uz som videl aj viac navodov. napr jeden taky ze sa to skompilovalo a dalo tusim do /boot/... a dalsi taky ze som z toho vsetkeho mal len .deb balicek a to nainstaloval.Aky je medzi tym rozdiel? Asi by mi viac vyhovovalo ten deb balicek pretoze ten si zalohujem a az by sa stalo nieco zo systemom nemusim kompilovat znova ale ho len nainstalujem :)
Muzu ti napsat postup, kterym to delam ja:
1) Stahnout jadro
Nejnovejsi vanilka:
http://kernel.org/pub/linux/kernel/v2.6/linux-2.6.29.tar.bz2
2) Rozbalit
Osvedcilo se mi do: /usr/src/
a tam by to melo vytvorit adresar linux-VERZE - tento adresar jiz obsahuje archiv
3) Vyuziti konfigurace aktualniho jadra
v /boot/ je soubor config-VERZE tak ten nakopiruj do rozbalenyho adresare s kernelem pod nazvem .config, cili bez cisla verze a s teckou na zacatku
pokud jedes presne podle navodu, tak: /usr/src/linux-VERZE/.config
4) Nastaveni kernelu dle potreb:
spustit terminal, nastavit akrualni adresar na /usr/src/linux-VERZE
make menuconfig nebo make xconfig popripade pro gnome make gconfig - je jedno, co pouzije, funguje to obdobne
5) Kompilace kernelu
make -j 3
a cekat, cekat, cekat :D
6) Instalace kernelu do /boot
make install
7) Instalace modulu do /lib/modules/VERZE
make modules_install
8) Pokud pouzivas initrd, tak:
update-initramfs -c -k VERZE
9) Update grubu
update-grub
10) Restart a modlit se :D
Poznamky:
Pokud u menu x/gconfig bude nejaky problem, tak pouzij menuconfig a nebo www.google.cz ;)
Vsechny operace je treba delat jako root.
textem VERZE je mysleno napriklad: 2.6.28.5-mujkernel
Zalezi taky, jak jste to nastavili v configu.
Citace od: Erich Stark kdy 15. 02. 2009, 11:15:07
Citace od: Boogey kdy 15. 02. 2009, 00:22:43
Neboj, to zvladns v pohode. Kuprikladu ja jsem vcera po docela dlouhym experimentovani dokazal nabootovat i bez initrd a pochopil, jak to funguje :D Je potreba si o tom jen neco precist nebo se poptat a taky venovat tomu nejakej cas. Postupne to pujde bez problemu.
No sak o to ide :-D
Len najhorsie je pochopit niektore veci ci ich zaskrknut v configuracii jadra alebo nie..pravdaze co je to filesystem to viem ale tak vseobecne ostatne :-D
Pocul som ze sa to da aj tak nejak ze pouzijem old config teda ten ktory je aktualny pouzity v systeme a len si tam pridam support mojej wifi karty :)
Ale uz som videl aj viac navodov. napr jeden taky ze sa to skompilovalo a dalo tusim do /boot/... a dalsi taky ze som z toho vsetkeho mal len .deb balicek a to nainstaloval.Aky je medzi tym rozdiel? Asi by mi viac vyhovovalo ten deb balicek pretoze ten si zalohujem a az by sa stalo nieco zo systemom nemusim kompilovat znova ale ho len nainstalujem :)
:) když budeš postupovat podle návodu, který jsem publikoval, tak budeš mít i .config zkopírovaný, jak o tom píšeš...
Pokud se ti nelíbí můj návod (který funguje 100%), nebo návod od Boogeyho, tak zkus třeba tento:
http://forum.ubuntu.cz/index.php/topic,25304.0.html (http://forum.ubuntu.cz/index.php/topic,25304.0.html)
Citace od: Spox kdy 01. 02. 2009, 16:30:10
fakeroot make-kpkg --append-to-version "<-suffix>" --revision "<revision#>" --us --uc --initrd kernel_image kernel_headers
Nejsem v tom zatím nějak moc zběhlej a tento řádek mi není moc jasný, teda spíše "suffix". Díky za radu. :)
Citace od: Petr kdy 15. 02. 2009, 22:26:37
Citace od: Spox kdy 01. 02. 2009, 16:30:10
fakeroot make-kpkg --append-to-version "<-suffix>" --revision "<revision#>" --us --uc --initrd kernel_image kernel_headers
Nejsem v tom zatím nějak moc zběhlej a tento řádek mi není moc jasný, teda spíše "suffix". Díky za radu. :)
ja som to zadal ako
sudo make-kpkg --initrd --stem linux --revision=1.0 kernel_image kernel_headers
A zatial sa mi to kompiluje ::)
EDIT: Tak uspesne som nabehol do noveho kernelu ale neni som az tak spokojny ako boli moje ocakavania..je to evidentne pomalsie..tak rozmyslam ze ostanem na tom starom.
Citace od: Petr kdy 15. 02. 2009, 22:26:37
Citace od: Spox kdy 01. 02. 2009, 16:30:10
fakeroot make-kpkg --append-to-version "<-suffix>" --revision "<revision#>" --us --uc --initrd kernel_image kernel_headers
Nejsem v tom zatím nějak moc zběhlej a tento řádek mi není moc jasný, teda spíše "suffix". Díky za radu. :)
DOplním tedy v příkladu:
fakeroot make-kpkg --append-to-version -spox --revision 01 --us --uc --initrd kernel_image kernel_headers
pro bližší vysvětlení jednotlivých opšnů prosím koukni do
man make-kpkg
Krásnej návod, ale nějak se mi to nepovedlo. Ze stejnýho serveru jsem stáhnul kernel 2.6.32 a na něj patch (bzcat /usr/src/patch-2.6.32.bz2 | patch -p1 -E -t), konfigurace se mi pravděpodobně povedla, ale během kompilace na mne vyskočila chyba, že ve dvou souborech jsou nějaký duplicitní definice, což se mi povedlo opravit, ale s další chybou si nevím rady:
CC kernel/trace/trace_output.o
kernel/trace/trace_output.c: In function 'seq_print_userip_objs':
kernel/trace/trace_output.c:416: error: 'const struct userstack_entry' has no member named 'tgid'
kernel/trace/trace_output.c: In function 'trace_print_lat_fmt':
kernel/trace/trace_output.c:503: error: 'struct trace_entry' has no member named 'lock_depth'
kernel/trace/trace_output.c:506: error: 'struct trace_entry' has no member named 'lock_depth'
make[3]: *** [kernel/trace/trace_output.o] Error 1
make[2]: *** [kernel/trace] Error 2
make[1]: *** [kernel] Error 2
make[1]: Leaving directory `/usr/src/linux-2.6.32.666'
make: *** [debian/stamp/build/kernel] Error 2
trace_output.c, řádky 409-420 (jakási chyba na ř. 416):
if (trace_flags & TRACE_ITER_SYM_USEROBJ) {
struct task_struct *task;
/*
* we do the lookup on the thread group leader,
* since individual threads might have already quit!
*/
rcu_read_lock();
task = find_task_by_vpid(entry->tgid);
if (task)
mm = get_task_mm(task);
rcu_read_unlock();
}
Ten samej soubor, řádky 477-507 (jakási chyba na ř. 503, 506):
int trace_print_lat_fmt(struct trace_seq *s, struct trace_entry *entry)
{
int hardirq, softirq;
int ret;
hardirq = entry->flags & TRACE_FLAG_HARDIRQ;
softirq = entry->flags & TRACE_FLAG_SOFTIRQ;
if (!trace_seq_printf(s, "%c%c%c",
(entry->flags & TRACE_FLAG_IRQS_OFF) ? 'd' :
(entry->flags & TRACE_FLAG_IRQS_NOSUPPORT) ?
'X' : '.',
(entry->flags & TRACE_FLAG_NEED_RESCHED) ?
'N' : '.',
(hardirq && softirq) ? 'H' :
hardirq ? 'h' : softirq ? 's' : '.'))
return 0;
if (entry->preempt_count)
ret = trace_seq_printf(s, "%x", entry->preempt_count);
else
ret = trace_seq_putc(s, '.');
if (!ret)
return 0;
if (entry->lock_depth < 0)
return trace_seq_putc(s, '.');
return trace_seq_printf(s, "%d", entry->lock_depth);
}
Google nic relevantního neví, já se v céčku nevyznám, nesetkal se s tím někdo?
Jo tak už to vypadá dobře... až na mrtě duplicitních definicí, ale s tím se po(p|s)eru ;)
Z kompilace kernelu jsem vyléčenej, několikrát jsem to zkoušel a ani jednou se mi to nepovedlo, jen jsem si nadělal chlívek, kterej sem musel odstraňovat.