Sie sind nicht angemeldet.

excalibur1976

el grande cheffe

  • »excalibur1976« ist der Autor dieses Themas

Beiträge: 474

Wohnort: Kiel

Beruf: Softwareentwickler

Danksagungen: 44

  • Nachricht senden

1

12.07.2009, 12:49

Neuen Kernel kompilieren

Einleitung
Hier wird beschrieben, wie man einen neuen Kernel kompiliert. Getestet wurde dies unter Debian GNU/Linux 4.0 (2.6.20.4) und Debian 5.0 (2.6.28).

Für dieses HowTo übernimmt der Autor keine Haftung. Erstellen Sie vorher ein Backup Ihrer Konfiguration.

Feedback
Ein Feedback zu diesem HowTo ist wünschenswert, ebenso Verbesserungsvorschläge. Anregungen, Verbesserungsvorschläge oder Kritiken bitte an mich.

Neuen Kernel besorgen

Zunächst werden wir zum Systembenutzer "root".


Quellcode

1
"su - "

Nun wechseln wir in das Verzeichnis "/usr/src". Nun muss man sich von kernel.org den aktuellsten stabilen Kernel besorgen.
Zum Beispiel: "2.6.21".

Kernel entpacken
Jetzt entpacken wir den Kernel und setzen einen symbolischen Link /usr/src/linux, das auf das neue Verzeichnis des gerade entpackten Kernel zeigt.

Quellcode

1
2
tar xvjf linux-2.6.xx.yy.tar.bz2 
 ln -s /usr/src/linux-2.6.xx.yy /usr/src/linux


Kernel konfigurieren
Jetzt führen wir "make menuconfig" im Verzeichnis "/usr/src/linux" aus, und nehmen noch gewünschte Änderungen am Kernel vor.

Abschließend verlassen wir "menuconfig" und speichern dabei die neue Konfiguration.
V o r s i c h t
Änderungen sollten nur vorgenommen werden, wenn man weiss was man macht.
Start des Kompiliervorganges
Nun startet man den Kompiliervogang und wir erzeugen dabei ein *.deb Packet, welches wir abschließend installieren können.



Quellcode

1
make-kpkg --initrd kernel_image


H i n w e i s
Dieser Vorgang kann je nach System einige Zeit dauern.

Kernel .deb Paket installieren
Nachdem das Kompilieren erfolgreich beendet wurde, können wir den neuen Kernel aus dem "*.deb" Paket installieren.

Quellcode

1
dpkg -i linux-image-xx.yy_xyz.deb 

Fertig!

Nun sollte in der Bootloader Konfiguration (Grub, Lilo) neue Einträge stehen.
Software: Windows 7, Cubase 5, Cubasis AV ;), Renoise 2.6, Novation Bass Station VSTi, Sylenth1, several Samples-Libaries. Hardware: AMD Phenom II X4 955 Black Edition, 4 GB RAM, SB Audigy 2 ZS Platinum, m-audio axiom 25, Behringer MS20 (active nearfield monitor)

Beiträge: 63

  • Nachricht senden

2

12.07.2009, 15:01

ich hab da ne andere Frage zu:
wie erstellt man einen optimalen kernel?
wie wähle ich die richtigen module aus, oder die falschen ab?
Wie finde ich dir richtigen module raus?

turbo

Schüler

Beiträge: 142

  • Nachricht senden

3

12.07.2009, 15:53

am besten sollte man wissen, was für hardware im pc steckt und die jeweiligen treiber einbinden. im zweifelsfall lieber einen treiber zuviel einbinden. auch lohnt sich ein blick in die hilfe. i.d.r. findet man dort empfehlungen. ein guter startpunkt sind die configs der distris. die kann man dann nach und nach zusammenstreichen.

will man ohne initrd/initramfs auskommen, müssen alle zum booten nötigen treiber fest einkompiliert werden, also sata, dateisysteme der systempartitionen... .

Werbung

Matt

Fuck me, I'm famous

Beiträge: 214

Wohnort: Nähe Bodensee

Beruf: Informatikkaufmann

Danksagungen: 6

  • Nachricht senden

4

25.10.2009, 16:21

Quellcode

1
make-kpkg --initrd kernel_image

Ab hier funktioniert deine Anleitung nicht mehr:

Quellcode

1
2
debian:/usr/src/linux# make-kpkg --initrd kernel_image
-su: make-kpkg: Kommando nicht gefunden.

turbo

Schüler

Beiträge: 142

  • Nachricht senden

5

25.10.2009, 16:26

bei ubuntu gibt es das paket "kernel-package", in dem das fehlende programm drin steckt. ich vermute jetzt mal, dass es bei debian genauso heißt.

excalibur1976

el grande cheffe

  • »excalibur1976« ist der Autor dieses Themas

Beiträge: 474

Wohnort: Kiel

Beruf: Softwareentwickler

Danksagungen: 44

  • Nachricht senden

6

25.10.2009, 18:43

So sieht es aus - folgende Pakete sollten installiert sein:

binutils
libc6-dev
kernel-package
make
Software: Windows 7, Cubase 5, Cubasis AV ;), Renoise 2.6, Novation Bass Station VSTi, Sylenth1, several Samples-Libaries. Hardware: AMD Phenom II X4 955 Black Edition, 4 GB RAM, SB Audigy 2 ZS Platinum, m-audio axiom 25, Behringer MS20 (active nearfield monitor)

Werbung

Matt

Fuck me, I'm famous

Beiträge: 214

Wohnort: Nähe Bodensee

Beruf: Informatikkaufmann

Danksagungen: 6

  • Nachricht senden

7

25.10.2009, 20:59

Ja, hab vergessen zu schreiben, das hat gepasst. Sorry. Aber jetzt gings. Hab ihn nur noch nicht installiert. Soll ich da nen eigenen Thread aufmachen bei Problem oder können wir sie hier diskutieren?

gruß

excalibur1976

el grande cheffe

  • »excalibur1976« ist der Autor dieses Themas

Beiträge: 474

Wohnort: Kiel

Beruf: Softwareentwickler

Danksagungen: 44

  • Nachricht senden

8

25.10.2009, 22:02

Ganz wie Du möchtest :)
Software: Windows 7, Cubase 5, Cubasis AV ;), Renoise 2.6, Novation Bass Station VSTi, Sylenth1, several Samples-Libaries. Hardware: AMD Phenom II X4 955 Black Edition, 4 GB RAM, SB Audigy 2 ZS Platinum, m-audio axiom 25, Behringer MS20 (active nearfield monitor)

Matt

Fuck me, I'm famous

Beiträge: 214

Wohnort: Nähe Bodensee

Beruf: Informatikkaufmann

Danksagungen: 6

  • Nachricht senden

9

25.10.2009, 23:56

Nun,

Die installation klappt herrvorragend, neue Einträge werden in der grub.cfg vorgenommen, alles prima. Wenn ich aber vom neuen Kernel booten will, dann meldet er ne Kernel-Panic (Kernel panic - not syncing : VFS : Unable to mount root fs on unknown-block(0,0)). Meine grub.cfg liefere ich gleich. Ich habe festgestellt, das beim Eintrag des neuen Kernels eine Zeile fehlt. Und zwar die Zeile, wo er ein Image aus einem gewissen "initrd" läd. Es findet sich beim altern Kerneleintrag ein Pfad der zu der Datei initrd.img-2.6.30-2-686 führt. Jetzt habe ich gegoogelt und herausgefunden, wenn man einen neuen Kernel erstellt, dann muss man das (initrd) irgendwie in den Kernel einkompilieren, sonst startet der neue Kernel nicht. Muss ich den Kernel entfernen (wenn ja, wie geht das?) und neu kompilieren unter Beachtung dieses ominösen initrd Zeugs (wenn ja, wie geht das?) Wieso klappt es bei mir nicht so wie bei dir?


Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
#
# DO NOT EDIT THIS FILE
#
# It is automatically generated by /usr/sbin/grub-mkconfig using templates
# from /etc/grub.d and settings from /etc/default/grub
#

### BEGIN /etc/grub.d/00_header ###
set default=0
insmod ext2
set root=(hd1,1)
search --no-floppy --fs-uuid --set 8060a000-b7c4-45d7-a75e-b983690bd0ae
if loadfont /usr/share/grub/unicode.pf2 ; then
  set gfxmode=640x480
  insmod gfxterm
  insmod vbe
  if terminal_output gfxterm ; then true ; else
	# For backward compatibility with versions of terminal.mod that don't
	# understand terminal_output
	terminal gfxterm
  fi
fi
set timeout=5
### END /etc/grub.d/00_header ###

### BEGIN /etc/grub.d/05_debian_theme ###
insmod ext2
set root=(hd1,1)
search --no-floppy --fs-uuid --set 8060a000-b7c4-45d7-a75e-b983690bd0ae
insmod png
if background_image /boot/grub/moreblue-orbit-grub.png ; then
  set color_normal=black/black
  set color_highlight=magenta/black
else
  set menu_color_normal=cyan/blue
  set menu_color_highlight=white/blue
fi
### END /etc/grub.d/05_debian_theme ###

### BEGIN /etc/grub.d/10_linux ###
menuentry "Debian GNU/Linux, Linux 2.6.31.5" {
	insmod ext2
	set root=(hd1,1)
	search --no-floppy --fs-uuid --set 8060a000-b7c4-45d7-a75e-b983690bd0ae
	linux	/boot/vmlinuz-2.6.31.5 root=/dev/sdb1 ro  quiet
}
menuentry "Debian GNU/Linux, Linux 2.6.31.5 (recovery mode)" {
	insmod ext2
	set root=(hd1,1)
	search --no-floppy --fs-uuid --set 8060a000-b7c4-45d7-a75e-b983690bd0ae
	linux	/boot/vmlinuz-2.6.31.5 root=/dev/sdb1 ro single 
}
menuentry "Debian GNU/Linux, Linux 2.6.30-2-686" {
	insmod ext2
	set root=(hd1,1)
	search --no-floppy --fs-uuid --set 8060a000-b7c4-45d7-a75e-b983690bd0ae
	linux	/boot/vmlinuz-2.6.30-2-686 root=UUID=8060a000-b7c4-45d7-a75e-b983690bd0ae ro  quiet
	initrd	/boot/initrd.img-2.6.30-2-686
}
menuentry "Debian GNU/Linux, Linux 2.6.30-2-686 (recovery mode)" {
	insmod ext2
	set root=(hd1,1)
	search --no-floppy --fs-uuid --set 8060a000-b7c4-45d7-a75e-b983690bd0ae
	linux	/boot/vmlinuz-2.6.30-2-686 root=UUID=8060a000-b7c4-45d7-a75e-b983690bd0ae ro single 
	initrd	/boot/initrd.img-2.6.30-2-686
}
### END /etc/grub.d/10_linux ###

### BEGIN /etc/grub.d/30_os-prober ###
menuentry "Windows 7 (loader) (on /dev/sda1)" {
	insmod ntfs
	set root=(hd0,1)
	search --no-floppy --fs-uuid --set 6ed40f54d40f1dc9
	drivemap -s (hd0) ${root}
	chainloader +1
}
### END /etc/grub.d/30_os-prober ###

### BEGIN /etc/grub.d/40_custom ###
# This file provides an easy way to add custom menu entries.  Simply type the
# menu entries you want to add after this comment.  Be careful not to change
# the 'exec tail' line above.
### END /etc/grub.d/40_custom ###


Was muss ich tun?

Danke!

Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von »Matt« (26.10.2009, 00:06)


Werbung

turbo

Schüler

Beiträge: 142

  • Nachricht senden

10

26.10.2009, 04:10

in der initrd stecken die zum booten nötigen treiber und tools (lvm, cryptsetup, mdadm, falls erforderlich zum booten) drin ohne initrd findet der kernel mangels treiber deine festplatte nicht. schau mal in /boot nach, ob dort eine zum neuen kernel passende initrd liegt. wenn ja, trag sie einfach in die grub.cfg ein. die initrd muss nicht in den kernel einkompiliert werden. man kann aber z.b. beim konfigurieren des kernels die benötigten treiber fest einkompilieren lassen. somit liegen sie nicht mehr als modul vor und sind daher beim booten bereits vorhanden. setzt man aber z.b. verschlüsselung auf der root-partition ein, funktioniert das nicht mehr, da man dem kernel die benötigten tools nur per initrd zur verfügung stellen kann.

Matt

Fuck me, I'm famous

Beiträge: 214

Wohnort: Nähe Bodensee

Beruf: Informatikkaufmann

Danksagungen: 6

  • Nachricht senden

11

26.10.2009, 11:15

Hallo Turbo,

danke für deine Antwort. Leider liegt dort kein initrd File des aktuellen Kernels. Nur das vom alten. Wie erstelle ich ein solches File?

turbo

Schüler

Beiträge: 142

  • Nachricht senden

12

26.10.2009, 12:03

man kann die initrd durchaus manuell bzw mit skript erstellen, ist aber nicht sinn der sache und nicht ganz ohne, wenn man nicht weiß, was man da macht. bist du sicher, dass du den richtigen befehl ausgeführt hast? also exakt

Quellcode

1
make-kpkg --initrd kernel_image
? wenn ja, wird die initrd mit erstellt und ins .deb-paket gepackt zur installation. oder ist die initrd vielleicht direkt unter / gelandet? hab bei debian-basierten systemen schon mehrfach kernel und iirc auch initrd dort gefunden.

Werbung

Matt

Fuck me, I'm famous

Beiträge: 214

Wohnort: Nähe Bodensee

Beruf: Informatikkaufmann

Danksagungen: 6

  • Nachricht senden

13

26.10.2009, 13:06

ja du hast recht! Unter / liegen zwei Dateien die initrd.img und vmlinuz heißen. Aber die initdrd heißt nicht wie der Kernel sondern nur initrd.img. Soll ich mv /boot machen und sie dort umbenennen? Brauche ich diese vmlinuz auch? Dann müsste ich noch die grub.cfg anpassen und den Pfad der zum initrd.img führt angeben, sehe ich das richtig, oder sollte ich den kompletten Kernel entfernen und neu kompilieren? Aber das brauche ich eigentlich nicht zu tun, so wie ich das sehe.

Hab genau diesen Befehl ausgeführt, ja.

turbo

Schüler

Beiträge: 142

  • Nachricht senden

14

26.10.2009, 13:39

schau dir mal das datum der initrd an, wenn es inkl uhrzeit zum kompilierten kernel passt, kannst du die datei einfach nehmen. vmlinuz brauchst du nicht unbedingt, da das kernel-image ja vorhanden ist. es kann aber auch sein, dass /initrd.img ein link auf eine initrd in /boot ist. musst mal nachsehen.

edit:
sind die initramfs-tools installiert? ohne die klappt nämlich das erstellen der initrd nicht.

Matt

Fuck me, I'm famous

Beiträge: 214

Wohnort: Nähe Bodensee

Beruf: Informatikkaufmann

Danksagungen: 6

  • Nachricht senden

15

26.10.2009, 13:47

Hab grade nachgesehen. Ist eine Verknüpfung auf das alte image. Seltsamerweise ist das File gestern angelegt worden, als ich rumgebastelt habe. Kann aber leider nicht genau sagen, was ich um diese Uhrzeit gemacht habe. Aber den Kernel habe ich erst später angefangen zu erstellen.

/boot/initrd.img-2.6.30-2-686

Sollte aber eigentlich 2.6.31.5 heißen. Mein ".deb" Packet liegt unter /usr/src


Was soll ich jetzt machen?

EDIT:

Ja, das Päckchen initramfs-tools (0.93.4) ist installiert. Sollte ich live-initramfs auch installieren?

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »Matt« (26.10.2009, 13:52)


Werbung

turbo

Schüler

Beiträge: 142

  • Nachricht senden

16

26.10.2009, 14:19

nein live-initramfs ist nur für live-cds gedacht.

in synaptic (und mit sicherheit auch auf der kommandozeile oder in anderen paketmanagern) kann man sich anzeigen lassen, welche dateien ein paket installiert hat. wird dir bei deinem kernel ne initrd mit angezeigt?

wenn nicht, kann ich dir nur raten, das paket nochmal neu zu bauen und auf warnungen und fehlermeldungen zu achten. wenn auch da nichts auffälliges bei ist, könnte ich dir höchstens helfen einen kernel zu konfigurieren, der ohne initrd auskommt.

oder du installierst dir nen kernel aus sid.

Matt

Fuck me, I'm famous

Beiträge: 214

Wohnort: Nähe Bodensee

Beruf: Informatikkaufmann

Danksagungen: 6

  • Nachricht senden

17

26.10.2009, 16:31

Also,

bei Synaptics wird "nur" der alte Kernel angezeigt und dort steht nix von initrd. Ich bin mir auch ziemlich sicher, dass keine Fehlermeldungen gekommen sind. Bei make menuconfig hab ich nichts verändert, ich habs gespeichert und garnichts daran rumbastelt.

Mich würde interessieren, was Excalibur sagt, wie es bei ihm funktioniert hat. Ob er noch irgendwo Skripte abgelegt hat oder so.

Ansonsten würde ich gerne den "neuen" Kernel entfernen um es dann einfach, wenn ich alles beisamen hab, neu zu starten. Wie kann ich den "neuen" Kernel entfernen?

Gibts eigentlich irgendwo Tipps oder ne Seite, die sich mit der Kernelkonfiguration beschäftigt?

Gruß, mätt

turbo

Schüler

Beiträge: 142

  • Nachricht senden

18

26.10.2009, 17:33

ich schätze, da ist was schief gegangen bei der installation. alle pakete, die ich von hand installiert hab, werden aufgelistet. von daher, weiß ich auch nicht, ob man die dateien vom paketmanager automatisch entfernen lassen kann. zur not muss man von hand machen. ist aber nicht aufwändig (alles löschen, was die versionsnummer des kernels trägt und in /boot und /lib/modules liegt + änderung der grub.cfg).

anleitungen zur konfiguration eines eigenen kernels kenne ich keine. habs mir "damals" selber beigebracht. für den anfang reicht es i.d.r. die treiber fest einzukompilieren, die zum booten nötig sind, also treiber für festplattencontroller und das dateisystem auf / . den rest kann man anpassen, nuss man aber i.d.r. nicht, verkürzt aber die kompilierzeit.

Werbung

Matt

Fuck me, I'm famous

Beiträge: 214

Wohnort: Nähe Bodensee

Beruf: Informatikkaufmann

Danksagungen: 6

  • Nachricht senden

19

26.10.2009, 18:29

Was soll ich jetzt tun? Neukompilieren?

turbo

Schüler

Beiträge: 142

  • Nachricht senden

20

26.10.2009, 18:38

am besten erst mal sehen, ob excalibur ne idee hat. der kennt sich mit den debian-feinheiten besser aus als ich.

Lesezeichen:

Forenuser - Die Foren
Findmaschine