Debian fórum

Tipy, triky, návody - pouze návody, nevkládat dotazy! => Správa, údržba a nastavení systému => Téma založeno: Petr Slunský kdy 01. 02. 2009, 16:30:10

Název: Kompilace jádra ve zkratce
Přispěvatel: Petr Slunský kdy 01. 02. 2009, 16:30:10
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.
Název: Re: Kompilace jádra ve zkratce
Přispěvatel: 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?
Název: Re: Kompilace jádra ve zkratce
Přispěvatel: 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.

Název: Re: Kompilace jádra ve zkratce
Přispěvatel: Xgamer kdy 02. 02. 2009, 19:41:05
Ja mám pocit že treba nainštalovať baličky fakeroot build-essential a ešte dačo to si už nespominam:D
Název: Re: Kompilace jádra ve zkratce
Přispěvatel: Jakub Lucký kdy 03. 02. 2009, 11:55:41
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í
Název: Re: Kompilace jádra ve zkratce
Přispěvatel: Petr Slunský kdy 03. 02. 2009, 17:21:42
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
Název: Re: Kompilace jádra ve zkratce
Přispěvatel: Petr Slunský kdy 03. 02. 2009, 17:26:02
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.
Název: Re: Kompilace jádra ve zkratce
Přispěvatel: Ahmul kdy 03. 02. 2009, 21:58:33
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.
Název: Re: Kompilace jádra ve zkratce
Přispěvatel: Petr Slunský kdy 04. 02. 2009, 18:27:39
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.
Název: Re: Kompilace jádra ve zkratce
Přispěvatel: Ahmul kdy 04. 02. 2009, 18:47:03
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:)
Název: Re: Kompilace jádra ve zkratce
Přispěvatel: Petr Slunský kdy 05. 02. 2009, 20:41:19
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. :)
Název: Re: Kompilace jádra ve zkratce
Přispěvatel: Erich Stark kdy 07. 02. 2009, 21:33:53
Inak nedalo by sa do jadra nejak zakompilovat hned aj ovladac na grafiku?
Název: Re: Kompilace jádra ve zkratce
Přispěvatel: 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.
Název: Re: Kompilace jádra ve zkratce
Přispěvatel: Jakub Lucký kdy 08. 02. 2009, 11:23:22
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
Název: Re: Kompilace jádra ve zkratce
Přispěvatel: Erich Stark kdy 12. 02. 2009, 14:40:58
Dnes som sa pokusal kompilovat kernel ale ani som sa tam nedostal..je to dost zlozite :(
Název: Re: Kompilace jádra ve zkratce
Přispěvatel: Petr Slunský kdy 12. 02. 2009, 19:55:38
Kam ses nedostal?

Nebo spíše kam ses dostal?
Název: Re: Kompilace jádra ve zkratce
Přispěvatel: Erich Stark kdy 12. 02. 2009, 20:37:12
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
Název: Re: Kompilace jádra ve zkratce
Přispěvatel: 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
Název: Re: Kompilace jádra ve zkratce
Přispěvatel: Petr Slunský 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.
Název: Re: Kompilace jádra ve zkratce
Přispěvatel: Erich Stark kdy 14. 02. 2009, 12:58:53
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 :)
Název: Re: Kompilace jádra ve zkratce
Přispěvatel: 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.
Název: Re: Kompilace jádra ve zkratce
Přispěvatel: 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 :)
Název: Re: Kompilace jádra ve zkratce
Přispěvatel: Boogey kdy 15. 02. 2009, 12:26:49
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.
Název: Re: Kompilace jádra ve zkratce
Přispěvatel: Petr Slunský kdy 15. 02. 2009, 21:48:16
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)
Název: Re: Kompilace jádra ve zkratce
Přispěvatel: 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. :)
Název: Re: Kompilace jádra ve zkratce
Přispěvatel: Erich Stark kdy 16. 02. 2009, 16:30:57
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.
Název: Re: Kompilace jádra ve zkratce
Přispěvatel: Petr Slunský kdy 17. 02. 2009, 21:09:29
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
Název: Re: Kompilace jádra ve zkratce
Přispěvatel: Roman Horník kdy 28. 12. 2009, 15:17:50
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?
Název: Re: Kompilace jádra ve zkratce
Přispěvatel: Roman Horník kdy 28. 12. 2009, 18:58:40
Jo tak už to vypadá dobře... až na mrtě duplicitních definicí, ale s tím se po(p|s)eru ;)
Název: Re: Kompilace jádra ve zkratce
Přispěvatel: Ota Trkola kdy 30. 04. 2010, 17:52:07
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.