Kernel in Grubloader eintragen

Welches Modul/Treiber für welche Hardware, Kernel compilieren...
Antworten
Benutzeravatar
Kohtachan
Beiträge: 70
Registriert: 13.02.2011 04:55:59

Kernel in Grubloader eintragen

Beitrag von Kohtachan » 27.05.2011 16:29:57

Hallo zusammen.

Ich bin mal wieder ein wenig am Basteln und habe heute mal einen Kernel erstellt. Nun versuche ich den Kernel in den Grubloader einzutragen. Ich habe aber nicht die Datei /boot/grub/menu.lst woran kann es liegen? Habe versucht die Datei manuell zu erstellen und den Eintrag für den Kernel gemacht, aber leider wird er beim booten nicht angezeigt.

Vielleicht weis ja einer was Sache ist :)

Gruß Leo
Raspberry PI 2 Model B
OS: Raspbian Jessie Lite
CPU: ARM710 900 MHz
RAM Größe: 1 GB LPDDR2-SDRAM

Benutzeravatar
towo
Beiträge: 4546
Registriert: 27.02.2007 19:49:44
Lizenz eigener Beiträge: GNU Free Documentation License

Re: Kernel in Grubloader eintragen

Beitrag von towo » 27.05.2011 16:37:19

Debian 6 benutzt Grub2, deshalb gibts auch keine menu.lst.
Ein beherztes update-grub als root trägt den Kernel normalerweise automagisch ein.

rendegast
Beiträge: 15041
Registriert: 27.02.2006 16:50:33
Lizenz eigener Beiträge: MIT Lizenz

Re: Kernel in Grubloader eintragen

Beitrag von rendegast » 27.05.2011 19:12:15

Für Besonderheiten einen Eintrag in /boot/grub/custom.cfg.
Damit dieser Eintrag am Anfang der Liste auftaucht noch einen Link
/etc/grub.d/01_custom -> /etc/grub.d/41_custom
Danach 'update-grub'.
mfg rendegast
-----------------------
Viel Eifer, viel Irrtum; weniger Eifer, weniger Irrtum; kein Eifer, kein Irrtum.
(Lin Yutang "Moment in Peking")

Benutzeravatar
Kohtachan
Beiträge: 70
Registriert: 13.02.2011 04:55:59

Re: Kernel in Grubloader eintragen

Beitrag von Kohtachan » 28.05.2011 13:09:46

Hmm leider erscheint beim Start der Kernel nicht.

Hab ich vielleicht einen Fehler gemacht?
Ich hatte die Imagedatei mit dem Kernel sowie die System.map in den Ordner /boot kopiert. Das war doch richtig oder? Den Kernel habe ich vorher selbstverständlich konfiguriert und kompiliert. Auch die Module sind mit make modules und make modules_install installiert worden.

Gruß Leo
Raspberry PI 2 Model B
OS: Raspbian Jessie Lite
CPU: ARM710 900 MHz
RAM Größe: 1 GB LPDDR2-SDRAM

rendegast
Beiträge: 15041
Registriert: 27.02.2006 16:50:33
Lizenz eigener Beiträge: MIT Lizenz

Re: Kernel in Grubloader eintragen

Beitrag von rendegast » 28.05.2011 13:49:46

Auch die initrd für den Kernel erstellt?
Und wie sehen dieser Eintrag und Dein /boot/ und /boot/grub/ mittlerweile aus?

Und was für grub?

Code: Alles auswählen

dpkg -l | grep grub
mfg rendegast
-----------------------
Viel Eifer, viel Irrtum; weniger Eifer, weniger Irrtum; kein Eifer, kein Irrtum.
(Lin Yutang "Moment in Peking")

Benutzeravatar
Kohtachan
Beiträge: 70
Registriert: 13.02.2011 04:55:59

Re: Kernel in Grubloader eintragen

Beitrag von Kohtachan » 28.05.2011 18:10:18

Also grub liegt in der Version 1.98 vor. Habe gerade bemerkt das ich erst den Befehl. apt-get install grub ausführen musste und der ein Update machen wollte auf Grub 2. Danach wieder update-grub und neustart. Aber der Kernel erscheint noch immer nicht.

Was ist eine Intrid? Wenn das Image damit gemeint ist was ich mit "make bzImage" gemacht habe, dann ja. Dieses habe ich in den Ordner /boot kopiert. Genauso habe ich dort auch die mit erstellte System.map hin kopiert.
Und wie sehen dieser Eintrag und Dein /boot/ und /boot/grub/ mittlerweile aus?
Was meinst du damit genau?

Bild

Uploaded with ImageShack.us
Raspberry PI 2 Model B
OS: Raspbian Jessie Lite
CPU: ARM710 900 MHz
RAM Größe: 1 GB LPDDR2-SDRAM

rendegast
Beiträge: 15041
Registriert: 27.02.2006 16:50:33
Lizenz eigener Beiträge: MIT Lizenz

Re: Kernel in Grubloader eintragen

Beitrag von rendegast » 29.05.2011 06:48:43

Du bist momentan wohl in einem Zwischenzustand, denn
Grub1 grub 0.97 und
Grub2 grub-pc 1.98
sind beide vorhanden.

grub 0.97 hat ein update-grub, das /boot/grub/menu.lst erstellt,
grub-pc 1.98 hat ein updategrub[2], das aus den template-Skripten in /etc/grub.d/ die /boot/grub/grub.cfg erstellt.
(grub-pc 1.98 bringt immer noch das update-grub des grub1 mit,
als /usr/lib/grub-legacy/update-grub)

Im Zwischenzustand ("Testbetrieb") befindet sich noch grub1 im MBR der Platte,
dieser springt die Image-Datei eines Plattenstartbereichs mit grub2 in /boot/grub/ an,
worauf dann das Menü des grub2 angezeigt wird.

Welches Menu angezeigt wird, kannst Du aus der Titelleiste lesen,
oder Du machst dummy-Einträge,
Am Ende der /boot/grub/menu.lst:

Code: Alles auswählen

title debian grub 1 hd0
root
#root (hd0)
#chainloader +1
und in /boot/grub/custom.cfg

Code: Alles auswählen

menuentry 'grub2 CUSTOM BOOT 0' {
    #savedefault
        #insmod part_msdos
        #set root='(hd0)'
        #chainloader +1
}



Die initrd erstellst Du nötigenfalls mit

Code: Alles auswählen

mkinitramfs -c -k Kernelversion

Alle vorhandenen initrd können neu erstellt werden mit

Code: Alles auswählen

mkinitramfs -u -k all
mfg rendegast
-----------------------
Viel Eifer, viel Irrtum; weniger Eifer, weniger Irrtum; kein Eifer, kein Irrtum.
(Lin Yutang "Moment in Peking")

Benutzeravatar
Kohtachan
Beiträge: 70
Registriert: 13.02.2011 04:55:59

Re: Kernel in Grubloader eintragen

Beitrag von Kohtachan » 29.05.2011 10:17:08

Hm bei mir existiert aber keine menu.lst
Laut titelleiste nutze ich den zweier.

Kann ich den ersten nicht einfach deinstallieren?
Raspberry PI 2 Model B
OS: Raspbian Jessie Lite
CPU: ARM710 900 MHz
RAM Größe: 1 GB LPDDR2-SDRAM

rendegast
Beiträge: 15041
Registriert: 27.02.2006 16:50:33
Lizenz eigener Beiträge: MIT Lizenz

Re: Kernel in Grubloader eintragen

Beitrag von rendegast » 29.05.2011 11:47:31

Kann ich den ersten nicht einfach deinstallieren?
grub-legacy, ja,
und dessen eventuell in /boot/grub/ verbleibende Dateien können gelöscht werden:
grub-legacy_0.97-64_i386/usr/lib/grub/i386-pc/e2fs_stage1_5
grub-legacy_0.97-64_i386/usr/lib/grub/i386-pc/fat_stage1_5
grub-legacy_0.97-64_i386/usr/lib/grub/i386-pc/jfs_stage1_5
grub-legacy_0.97-64_i386/usr/lib/grub/i386-pc/minix_stage1_5
grub-legacy_0.97-64_i386/usr/lib/grub/i386-pc/reiserfs_stage1_5
grub-legacy_0.97-64_i386/usr/lib/grub/i386-pc/stage1
grub-legacy_0.97-64_i386/usr/lib/grub/i386-pc/stage2
grub-legacy_0.97-64_i386/usr/lib/grub/i386-pc/stage2_eltorito
grub-legacy_0.97-64_i386/usr/lib/grub/i386-pc/xfs_stage1_5
Dann sicherheitshalber nochmal
/usr/sbin/upgrade-from-grub-legacy (welches die obigen Dateien auch löscht.)
aufrufen und auf dessen Meldung achten.
Eventuell nochmal explizit für grub2 ausführen:

Code: Alles auswählen

/usr/sbin/grub-install --recheck --no-floppy /dev/sda
damit dort wirklich der Startcode von grub2 sitzt,
und nicht eventuell noch Startcode von grub1.
mfg rendegast
-----------------------
Viel Eifer, viel Irrtum; weniger Eifer, weniger Irrtum; kein Eifer, kein Irrtum.
(Lin Yutang "Moment in Peking")

Benutzeravatar
Kohtachan
Beiträge: 70
Registriert: 13.02.2011 04:55:59

Re: Kernel in Grubloader eintragen

Beitrag von Kohtachan » 29.05.2011 16:29:30

So habe es nun geschafft den alten runter zu bekommen. Dennoch sehe ich nichts. Vielleicht habe ich ja was falsch gemacht. Deswegen mal meine Vorgehensweise beim kompilieren. Ich mache es übrigens in einem Fernstudium und habe es so anhand meiner Lernunterlagen gemacht!

1

Code: Alles auswählen

apt-get install gcc libc6 binutils libncurses5-dev links2
2

Code: Alles auswählen

links 2
Anschließen mit links2 auf www.kernel.org die aktuellste Kernelversion geladen.

3

Code: Alles auswählen

mkdir /usr/src/linux 
cd /usr/src/
bunzip2 linux-2.6.39.tar.bz2
tar -xvf linux-2.6.39.tar
4

Code: Alles auswählen

cd linux-2.6.39
cp -r * /usr/src/linux
Alle Dateien und Verzeichnisse in /usr/src/linux kopiert

5

Code: Alles auswählen

cd /usr/src/linux
make menuconfig
Konfiguration durchführen

6

Code: Alles auswählen

make bzImage
Den Kernel komprimiert kompilieren

7

Code: Alles auswählen

make modules
module kompilieren

8

Code: Alles auswählen

make modules_install
die Module installieren

9

Code: Alles auswählen

cp System.map /boot
cp /usr/src/linux/arch/x86/boot/bzImage /boot
Komischerweise habe ich das Verzeichniss I386 nicht. Das File liegt nur dort drinnen.

10

Code: Alles auswählen

update-grub
So stehts in meinem Lehrheft.
Ist das denn soweit richtig?
Raspberry PI 2 Model B
OS: Raspbian Jessie Lite
CPU: ARM710 900 MHz
RAM Größe: 1 GB LPDDR2-SDRAM

rendegast
Beiträge: 15041
Registriert: 27.02.2006 16:50:33
Lizenz eigener Beiträge: MIT Lizenz

Re: Kernel in Grubloader eintragen

Beitrag von rendegast » 29.05.2011 19:01:04

boot/bzImage
Liegt daran, weil kein "vmlinuz-....".
Hättest Du als alter Kernelbauer auch selbst drauf kommen können.
ZBsp. indem Du Dir die erstellenden Skripte mal näher angeschaut hättest.
oder indem Dir bei der Ausgabe ein gewisses Muster auffällt:

Code: Alles auswählen

# update-grub
Generating grub.cfg ...
Found linux image: /boot/vmlinuz-2.6.39-1-686-pae
Found initrd image: /boot/initrd.img-2.6.39-1-686-pae
Found linux image: /boot/vmlinuz-2.6.39-1-amd64
Found initrd image: /boot/initrd.img-2.6.39-1-amd64
Found linux image: /boot/vmlinuz-2.6.32-5-xen-686
Found initrd image: /boot/initrd.img-2.6.32-5-xen-686
Found linux image: /boot/vmlinuz-2.6.32-5-686-bigmem
Found initrd image: /boot/initrd.img-2.6.32-5-686-bigmem
Found linux image: /boot/vmlinuz-2.6.32-5-amd64
Found initrd image: /boot/initrd.img-2.6.32-5-amd64
Found linux image: /boot/vmlinuz-2.6.26-2-686-bigmem
Found initrd image: /boot/initrd.img-2.6.26-2-686-bigmem
Found linux image: /boot/vmlinuz-2.6.39-1-686-pae
Found initrd image: /boot/initrd.img-2.6.39-1-686-pae
Found linux image: /boot/vmlinuz-2.6.39-1-amd64
Found initrd image: /boot/initrd.img-2.6.39-1-amd64
Found linux image: /boot/vmlinuz-2.6.32-5-xen-686
Found initrd image: /boot/initrd.img-2.6.32-5-xen-686
Found linux image: /boot/vmlinuz-2.6.39-1-686-pae
Found initrd image: /boot/initrd.img-2.6.39-1-686-pae
Found linux image: /boot/vmlinuz-2.6.39-1-amd64
Found initrd image: /boot/initrd.img-2.6.39-1-amd64
Found linux image: /boot/vmlinuz-2.6.32-5-xen-686
Found initrd image: /boot/initrd.img-2.6.32-5-xen-686
done
Press any key to continue...





Nach dem Abgrasen von /usr/sbin/update-grub und /usr/lib/grub/grub_mkconfig_lib
(mit einem Syntax-Highlight Editor ist das gar nicht so wild,
normale Dateinamen ohne she-bang bekommen einen Link mit Endung ".c" und ich habe C-Highlighting)
lande ich hier:

Code: Alles auswählen

# cat /etc/grub.d/*  |  grep -i found.*image -C1
        # Step #7: Everything went fine, print out a message to stderr ...
        echo "Found background image: ${1}" >&2

--

# If we haven't found a background image yet, use the default from desktop-base.
if set_background_image "/usr/share/images/desktop-base/desktop-grub.png"; then
--
  linux=`version_find_latest $list`
  echo "Found linux image: $linux" >&2
  basename=`basename $linux`
--
  if test -n "${initrd}" ; then
    echo "Found initrd image: ${dirname}/${initrd}" >&2
  elif test -z "${initramfs}" ; then
--
        linux=`version_find_latest $list`
        echo "Found linux image: $linux" >&2
        basename=`basename $linux`
--
        if test -n "${initrd}" ; then
            echo "Found initrd image: ${dirname}/${initrd}" >&2
        else
->

Code: Alles auswählen

# cat /etc/grub.d/* | grep -i list -C1
    xi?86 | xx86_64)
        list=`for i in /boot/vmlinuz-* /vmlinuz-* /boot/kernel-* ; do
                  if grub_file_is_not_garbage "$i" ; then echo -n "$i " ; fi
--
    *) 
        list=`for i in /boot/vmlinuz-* /boot/vmlinux-* /vmlinuz-* /vmlinux-* /boot/kernel-* ; do
                  if grub_file_is_not_garbage "$i" ; then echo -n "$i " ; fi
--

while [ "x$list" != "x" ] ; do
  linux=`version_find_latest $list`
  echo "Found linux image: $linux" >&2
--
...
Voila:
list=`for i in /boot/vmlinuz-* /vmlinuz-* /boot/kernel-* ; do
list=`for i in /boot/vmlinuz-* /boot/vmlinux-* /vmlinuz-* /vmlinux-* /boot/kernel-* ; do
Es wäre aber auch sowas denkbar:

Code: Alles auswählen

for i in $(file /boot/*  |  grep  Linux.*Image | ...); do
(Wobei die Linux-Module des alten xen-3 ELF-Dateien waren, aber das ist ja erstmal nur so eine Idee)
mfg rendegast
-----------------------
Viel Eifer, viel Irrtum; weniger Eifer, weniger Irrtum; kein Eifer, kein Irrtum.
(Lin Yutang "Moment in Peking")

Benutzeravatar
Kohtachan
Beiträge: 70
Registriert: 13.02.2011 04:55:59

Re: Kernel in Grubloader eintragen

Beitrag von Kohtachan » 29.05.2011 20:57:48

Ah super. Na die Studienmaterialien sind nicht die Besten das merke ich schon...
Wie erstelle ich das dann? Nur mit make? weil make vmlinuz klappt nicht.
Gewundert hatte ich mich schon. Aber naja dachte wenns in den Studienmaterialien so steht muss es bzImage sein.
Raspberry PI 2 Model B
OS: Raspbian Jessie Lite
CPU: ARM710 900 MHz
RAM Größe: 1 GB LPDDR2-SDRAM

rendegast
Beiträge: 15041
Registriert: 27.02.2006 16:50:33
Lizenz eigener Beiträge: MIT Lizenz

Re: Kernel in Grubloader eintragen

Beitrag von rendegast » 29.05.2011 22:18:24

'make bzImage' oder mittlerweile auch einfach 'make' ist eine Angabe für das Makefile,
siehe dieses und die Readme im Wurzelverzeichnis Deiner Kernelquellen.

Wie Du das Image in /boot/ benennst, ist dem daraus gestarteten Kernel letztlich egal,
also geht auch "bzImage" -> "vmlinuz-DeineVersion".
"DeineVersion" wäre gleich dem Verzeichnisnamen der Module unterhalb /lib/modules/.


Du könntest Dir nach dem Konfigurieren die Arbeit durch Debiankernel-package abnehmen lassen.
mfg rendegast
-----------------------
Viel Eifer, viel Irrtum; weniger Eifer, weniger Irrtum; kein Eifer, kein Irrtum.
(Lin Yutang "Moment in Peking")

Benutzeravatar
Kohtachan
Beiträge: 70
Registriert: 13.02.2011 04:55:59

Re: Kernel in Grubloader eintragen

Beitrag von Kohtachan » 06.06.2011 15:38:09

So da melde ich mich mal wieder.
Soweit hat jetzt alles wirklich gut geklappt. Einmal das kompilieren des Kernels als auch der Module und die Installation dieser. Das Image verschoben, umbenannt, grub update und siehe da es geht. Der Kernel erscheint nun in der Version 2.6.39

Nur habe ich beim starten des Kernels folgenden Fehler

(Zum Vergrößern anklicken)
Bild


Gruß Leo
Raspberry PI 2 Model B
OS: Raspbian Jessie Lite
CPU: ARM710 900 MHz
RAM Größe: 1 GB LPDDR2-SDRAM

rendegast
Beiträge: 15041
Registriert: 27.02.2006 16:50:33
Lizenz eigener Beiträge: MIT Lizenz

Re: Kernel in Grubloader eintragen

Beitrag von rendegast » 06.06.2011 15:46:04

Da wirst Du noch forschen müssen, kann alles Mögliche sein.

Verwende, wenn es unbedingt ein 2.6.39 sein muß,
(auch) den 2.6.39 aus sid, (+ initramfs-tools aus sid).
mfg rendegast
-----------------------
Viel Eifer, viel Irrtum; weniger Eifer, weniger Irrtum; kein Eifer, kein Irrtum.
(Lin Yutang "Moment in Peking")

Antworten