# Die richtige Vorgehensweise beim Kernel ... ?

## brainchild1

Hallo,

Was ist eurer Meinung nach die richtige Vorgehensweise um einen Kernel zu backen. Da ich neu bei Gentoo bin - und das System selber erstmal für sehr interessant halte  :Wink:  habe ich warscheinlich naturgemäß mit genkernel angefangen. Dieser bietet aber ohne Menuconfig ein bisschen zu wenig von dem was ich brauche (Sound etc). Also warum keinen neuen Kernel backen - gedacht getan:

```

# make clean && make mrproper

# make defconfig

# make menuconfig

# make && make install && make modules install

```

Leider habe ich dann Probleme mit coldplug und hotplug. Ehe ich jetzt irgendwie sinnlos in der Gegend rumstochere würde ich gerne von euch erfahren - wie Ihr beim Kernel backen vorgeht - so das es am Ende "passt"  :Wink: 

Grüße

----------

## SinoTech

Also als ich vor gut einem Jahr anfaing hat auch genkernel alles für mich gemacht. Als ich dann selbst Hand anlegen wollte bin ich einfach in "/usr/src/linux" und habe mir mit einem "make menuconfig" angesehen was genkernel alles für mich aktiviert hat. Ist natürlich ziemlich  :Wink: . Habe mich dann schön überall durchgeklickt, überall die Help angesehen und dann eine Option nach der anderen deaktiviert (Natrülich nur die Option wo ich mir sicher war das ich sie nicht brauche). Dann Kernel gebacken, rebootet und gecheckt ob auch noch alles läuft (War natürlich nicht immer der Fall  :Wink:  ). Mit der Zeit bekommt man dann ein Händchen dafür.

Mfg

Sino

EDIT:

```

 make && make install && make modules install 

```

sollte so aussehen

```

 make && make install && make modules modules_install 

```

Wobei du das "make modules" weglassen kannst da es eine Abhängigkeit von "make modules_install" ist. Also reicht das:

```

 make && make install && make modules_install 

```

----------

## Linux-Spielkind

Wie sieht es eigentlich mit kernel-modulen aus????

Ich hau alles in komplett rein wenn ich mir nen kernel back. Jetz frag ich mich ob das  so sinnvoll in hinsicht auf performance ist. Mich würd mal interessieren wie der rest von euch sich den kernel backt.

Thx

----------

## Mailman04

Wenn du genkernel benutzen willst und trotzdem die Konfiguration anpassen willst verwende einfach die Option --menuconfig.

Alle Module mitzucompilieren sorgt einfach dafür, dass selbiges ne Weile dauert. Performance kostet das aber hinterher natürlich nicht, solange die Module nicht geladen werden. Aber wenn man eh weiß, dass man ein Modul nicht braucht - wozu soll man es dann compilieren lassen?

----------

## platinumviper

 *Linux-Spielkind wrote:*   

> Ich hau alles in komplett rein wenn ich mir nen kernel back.

 Und was fängst Du dann mit 30 SCSI Treibern auf einem Rechner an, der nur IDE hat?

 */usr/src/linux-2.6.11.11/README wrote:*   

> 
> 
> ```
>         - having unnecessary drivers will make the kernel bigger, and can
> 
> ...

 

platinumviper

----------

## pir187

ich nehme alle module mit in den kernel rein. außer dem grafiktreiber (nvidia) ist alles im kernel drin.

ist mir egal, ob die funktionalität nun im kernel liegt oder ich die module dann manuell lade, der speicherverbrauch dürfte nicht anders sein (korrekturen erwünscht).

wenn ich ein neues kernel-release einspiele, kopiere ich die datei 

```
/usr/src/linux/.config
```

 des alten releases in das neue unterverzeichnis von /usr/src. dann führe ich ein 

```
make oldconfig
```

 aus, um die kerneleinstellungen, die bisher liefen in die neue config zu übernehmen. gleichzeitig wird dabei nachgefragt, wenn es neue optionen gibt, für die in der alten config noch keine angabe existierte. vorher wird der symlink "/usr/src/linux" noch auf das neue kernelrelease aktualisiert.

das klappt eigentlich immer recht gut.

dann erstellt ein 

```
make && make modules_install
```

 den neuen kernel und die nötigen wenigen module (firmware-irgendwas). anschließend werden die dateien 

```
.config, System.map und /arch/i386/boot/bzImage
```

 nach /boot kopiert.

danach klappt auch meist der reboot.

ich habe mich am anfang nicht an die kernelgeschichte herangetraut, aber eigentlich gehört es zum "linux benutzen" mehr oder weniger dazu. man kommt sowieso nicht drumherum und lernt dabei nicht gerade wenig und ist dann stolz, wenn der rechner wieder (oder endlich) ordentlich bootet.

so weit meine story...

mfg, pir187

----------

## Freiburg

Ich kopier mir auch immer die alte Konfig, spart einem ne menge Arbeit, da ich nur das auswaehle was auch im Rechner steckt, ausser ein paar Sachen bei USB (mass-storage etc...) es kommt ja nicht so oft vor das man neue Karten einbaut, wieso sollte man dann alles kompilieren? Generkernel muss ich ganz ehrlich sagen find ich nicht so toll, man braucht sicher was bis man alle Sachen weiss die man braucht, aber es lohnt sich auf jeden Fall finde ich. Man bekommt neue Entwicklungen  mit wenn man selbst alles auswaehlt z.B.

----------

## platinumviper

Wenn 2.6.11.12 erscheint, werde ich folgendes tun (als normaler User):

```
mkdir /Kernel/2.6.11.12

cp /Kernel/2.6.11.11/.config /Kernel/2.6.11.12

cd /usr/src/linux-2.6.11.12

make O=/Kernel/2.6.11.12 oldconfig

make O=/Kernel/2.6.11.12 gconfig    # falls ich etwas ändern will

make -j6 O=/Kernel/2.6.11.12 all

sudo make O=/Kernel/2.6.11.12 modules_install

sudo make O=/Kernel/2.6.11.12 install

cd /Kernel/2.6.11.12

sudo mkrescue --iso --size HD

```

Bis auf mkrescue entspricht das der Vorgehensweise, die in der README beschrieben ist. make install kopiert den Kernel, System.map und die config nach /boot (jeweils mit Endung -2.6.11.12), legt die Links vmlinuz und vmlinuz.old an und kümmert sich um LILO bzw GRUB.

mkrescue legt ein bootfähiges CD-Image an.

Das Verzeichnis /Kernel ist nur für Mitglieder der Gruppe "kernel" beschreibbar. Das hat u.a. den Vorteil, das die Gruppenmitglieder keine vollständigen root-Rechte brauchen um ein Kernel-Update zu machen. Einige Konfigurationsdateien (z.B. /etc/modules.autoload.d/kernel-2.6) gehören auch der Gruppe "kernel".

platinumviper

----------

## Linux-Spielkind

 *Quote:*   

>  Und was fängst Du dann mit 30 SCSI Treibern auf einem Rechner an, der nur IDE hat? 

 

Ich schätz mal da hab ich mich wohl ein bisschen unklar ausgedrückt, sorry. Bei sieht es in etwa so wie bei pir187 aus. Mein einzigstes modul ist der nvidia graka treiber. Mich interresiert halt ob ich irgendwie damit resourcen einbuse.

----------

## pir187

 *Quote:*   

> Das hat u.a. den Vorteil, das die Gruppenmitglieder keine vollständigen root-Rechte brauchen um ein Kernel-Update zu machen.

 

Meiner Meinung nach hat aber keiner außer root ein Kernel-Update zu machen  :Twisted Evil: ! Oder sehe ich das falsch?

mfg, pir187

----------

## platinumviper

 *pir187 wrote:*   

> Meiner Meinung nach hat aber keiner außer root ein Kernel-Update zu machen ! Oder sehe ich das falsch?

 Im Prinzip hast Du recht, aber wenn ich im Urlaub, Flugzeug, auf einem Schiff, ... bin wenn eine wichtige Sicherheitslücke bekannt wird, muss jemand ein Update machen können, ohne dass er gleich vollen root-Zugriff hat. Ausserdem sollte man so selten wie möglich etwas als root machen.

platinumviper

----------

## blue.sca

 *platinumviper wrote:*   

> Ausserdem sollte man so selten wie möglich etwas als root machen.
> 
> 

 

genau, deshalb updated root auch nur kernels :)

ka, wer nen kernel update machen darf, darf wohl auch root rechte haben, viel schlimmeres kann er ja eigentlich nicht machen...

----------

## Yonathan

irgendwo habe ich mal gelesen, dass die grafikkartentreiber erneut emerged werden müssen, nachdem ein neuer kernel gebaut wurde. stimmt das? und wenn ja, warum?

kann ich den alten kernel nach wie vor laden, auch wenn ich den link von /usr/src/linux schon auf die neue kernelversion geändert habe?

yona

----------

## _hephaistos_

 *Yonathan wrote:*   

> irgendwo habe ich mal gelesen, dass die grafikkartentreiber erneut emerged werden müssen, nachdem ein neuer kernel gebaut wurde. stimmt das? und wenn ja, warum?

 

der kernel (verschiedene versionen; uname -r) legt die module in /lib/modules/<kernelversion>/....

deine grafikkartentreiber kommen auch dorthin.

wenn du nun einen neuen kernel baust, dann sind deine grafikkartentreiber natürlich nicht automatisch in dem neuen verzeichnis unter /lib/modules...

btw: die aussage "ich back alle meine module fest in den kernel ist ein widerspruch in sich"  :Smile: 

cheers

----------

## Anarcho

 *hephaistos6 wrote:*   

>  *Yonathan wrote:*   irgendwo habe ich mal gelesen, dass die grafikkartentreiber erneut emerged werden müssen, nachdem ein neuer kernel gebaut wurde. stimmt das? und wenn ja, warum? 
> 
> der kernel (verschiedene versionen; uname -r) legt die module in /lib/modules/<kernelversion>/....
> 
> deine grafikkartentreiber kommen auch dorthin.
> ...

 

Nicht nur bei neuen Kernelversionen, sondern auch wenn grundlegende Einstellungen geändert werde, wie etwa SMP an/aus schalten.

----------

## platinumviper

 *Yonathan wrote:*   

> kann ich den alten kernel nach wie vor laden, auch wenn ich den link von /usr/src/linux schon auf die neue kernelversion geändert habe?

 

Wo die Kernel-Sourcen liegen gehört in die Variable KERNEL_DIR, wo das Output-Verzeichnis liegt gehört in die Variable KBUILD_OUTPUT. Du kannst z.B. in /etc/profile die Zeilen

```
KERNEL_DIR=/usr/src/linux-`uname -r`

KBUILD_OUTPUT=/Kernel/`uname -r`

export KERNEL_DIR KBUILD_OUTPUT
```

einfügen, dann sind sie immer richtig gesetzt, egal mit welchem Kernel gebootet wurde. Den Link /usr/src/linux sollte es überhaupt nicht geben. 

 */usr/src/linux-2.6.11.12/README wrote:*   

> Do NOT use the /usr/src/linux area! This area has a (usually
> 
>    incomplete) set of kernel headers that are used by the library header
> 
>    files.  They should match the library, and not get messed up by
> ...

 Bei Gentoo liegen die sys-kernel/linux-headers zwar an anderen Stellen, aber vielleicht ändert sich das ja endlich einmal. Obige Warnung stand übrigens auch schon in den 2.4er Kerneln.

platinumviper

----------

## platinumviper

 *blue.sca wrote:*   

>  *platinumviper wrote:*   Ausserdem sollte man so selten wie möglich etwas als root machen.
> 
>  
> 
> genau, deshalb updated root auch nur kernels 
> ...

 Ich kenne eine Menge Leute, die einen Kernel konfigurieren können, an eine verteilte Datenbank (in meinem Fall Adabas D auf 6 Rechnern) würde ich die meisten aber nicht ran lassen.

Ausserdem: Paranoia is tax-free  :Very Happy:  und */usr/src/linux-2.6.11.12/README wrote:*   

> To do the actual install you have to be root, but none of the normal
> 
>    build should require that. Don't take the name of root in vain.

 

platinumviper

----------

## psyqil

 */usr/src/linux-2.6.11.12/README wrote:*   

> To do the actual install you have to be root, but none of the normal
> 
>    build should require that. Don't take the name of root in vain.

 Warum eigentlich? Kann ich grub nicht auch /home/normalo/bzImage laden lassen?

----------

## platinumviper

 *psyqil wrote:*   

> Kann ich grub nicht auch /home/normalo/bzImage laden lassen?

 Es ging ums installieren des Kernels, dafür brauchst Du root-Rechte, die Parameter für den Linux/HURD Loader sind 'ne andere Sache. Da /home normalerweise eine eigene Partition ist musst Du /home vermutlich durch das HURD Kauderwelsch für die Platte/Partition ersetzen. Vor solchen Sachen muss root sich durch Passwörter schützen, auch booten von Floppy, CD, USB-Stick/Platte/Kamera sollte ohne Passwort nicht möglich sein.

platinumviper

PS

Kauderwelsch ist nicht abwertend bezüglich HURD gemeint, unter IRIX und Solaris verwende ich ja auch eine völlig andere Syntax als unter Linux. Es würde mich aber stören, wenn ich unter Linux teilweise die Syntax eines anderen OS verwenden müsste, deshalb verwende ich den Linux-Loader LILO bis nächstes Jahr  :Twisted Evil:   HURD herauskommt. Dann bin ich natürlich bereit den HURD-Loader GRUB zu benutzen, aber unter HURD, nicht unter Linux.

----------

## Louisdor

 *platinumviper wrote:*   

> Den Link /usr/src/linux sollte es überhaupt nicht geben. 
> 
>  */usr/src/linux-2.6.11.12/README wrote:*   Do NOT use the /usr/src/linux area! This area has a (usually
> 
>    incomplete) set of kernel headers that are used by the library header
> ...

 

Hm, bei mir sieht das so aus:

```
root@gentoo: /usr/src # ll -a

insgesamt 3,5K

drwxr-xr-x   6 root root  240 14. Jun 22:16 .

drwxr-xr-x  19 root root  704 11. Jun 10:39 ..

-rw-r--r--   1 root root    0 11. Jun 10:39 .keep

lrwxrwxrwx   1 root root   21 14. Jun 22:16 linux -> linux-2.6.9-gentoo-r9

drwxr-xr-x  19 root root 1,3K 13. Jun 19:43 linux-2.6.11-gentoo-r6

drwxr-xr-x  19 root root 1,3K 13. Jun 11:36 linux-2.6.11-gentoo-r9

drwxr-xr-x  19 root root 1,3K 14. Jun 22:31 linux-2.6.9-gentoo-r9

drwxr-xr-x   2 root root  464 24. Jan 10:37 patches

root@gentoo: /usr/src #
```

Und, in http://www.gentoo.de/doc/de/handbook/handbook-x86.xml?part=1&chap=7 steht:

```
Befehlsauflistung 3: Anzeigen des Kernelquellen Symlinks

# ls -l /usr/src/linux

lrwxrwxrwx    1 root     root           12 Oct 13 11:04 /usr/src/linux->linux-2.6.11-gentoo-r3

Wenn das nicht der Fall ist (also der Symlink auf eine andere Kernelquelle verweist) ändern Sie den Symlink bevor sie weitermachen. Beachten Sie, dass linux-2.6.11-gentoo-r3 nur ein Beispiel ist! Befehlsauflistung 4: Ändern des Kernelquellen Symlinks

# rm /usr/src/linux

# cd /usr/src

# ln -s linux-2.6.11-gentoo-r3 linux

```

Bisher hatte ich damit auch noch keine Probleme. Oder warum sollte man das nicht machen?

Ciao,

aleX!

----------

## Yonathan

 *platinumviper wrote:*   

>  *Yonathan wrote:*   kann ich den alten kernel nach wie vor laden, auch wenn ich den link von /usr/src/linux schon auf die neue kernelversion geändert habe? 
> 
> Wo die Kernel-Sourcen liegen gehört in die Variable KERNEL_DIR, wo das Output-Verzeichnis liegt gehört in die Variable KBUILD_OUTPUT. Du kannst z.B. in /etc/profile die Zeilen
> 
> ```
> ...

 

soll ich die von dir dort oben genannten zeilen einfach in /etc/profile anhängen/einfügen???

yona

----------

## platinumviper

 *Yonathan wrote:*   

> soll ich die von dir dort oben genannten zeilen einfach in /etc/profile anhängen/einfügen???

 

Nur wenn Du den Kernel so kompiliert hast, wie ich es oben beschrieben habe, also mit dem Parameter O=. Wenn Du  die alte Methode (Kernel 2.4 und früher) benutzt, brauchst Du die Variablen nicht.

platinumviper

----------

## Ätherischer Wanderer

Ich kopiere erst die alte .config in den neuen Kernelordner, dann mache ich ein "genkernel --menuconfig". Zum Schluss passe ich meine grub.conf an die neue Kernelversion an.

Ist für mich der beste Kompromiss zwischen Bequemlichkeit und Konfigurierbarkeit.

edit:

Danach natürlich noch alsa-driver und nvidia-kernel neu emergen  :Cool: .

----------

