Eigenen Kernel bauen und Installieren

Hinweis: In dem Thema Eigenen Kernel bauen und Installieren gibt es 16 Antworten auf 2 Seiten. Der letzte Beitrag () befindet sich auf der letzten Seite.
  • Hi,


    ich habe den gleichen Post auf forums.opensus.org aber noch keine Info, evtl ist hier die Resonanz größer


    Hallo,


    ich verzweifle beim Versuch einen selbstgebauten Kernel zu installieren.
    Nach einigen fehlgeschlagenen Versuchen mit neueren Kernel Sourcen dachte ich mir es sei evtl geschickter auf Basis des von Leap 42.3 verwendeten Kernels mit annähernd identischer Konfiguration zu starten.
    Verwendet wird auf meinem System der Kernel 4.4.76 und auch 4.4.92.
    also habe ich den letzten 4.4.x (x=103) Kernel heruntergeladen, die configuration /boot/config-4.4.92 als Basis genommen indem ich es in den build tree nach .config kopiert und make aufgerufen habe. Die neu hinzugekommenen Kernel-Konfigurationen habe ich dann mit ihren Standardwerten übernommen.


    Man müsste doch davon ausgehen, dass dadurch keine großen Unterschiede entstehen und dass das System zumindest mit dem gebauten Kernel in der Lage sein sollte zu starten.
    Nach einem 'make bzImage module modules_install install' hoffe ich sind alle images inkl. initrd und kernel module an den Orten an denen sie erwartet werden.
    Ich habe ein update-bootloader ausgeführt und beim nächsten start war der neu gebaute Kernel 4.4.103 auch der default Kernel.
    Leider bootet das System mit diesem Kernel nicht [Blockierte Grafik: https://forums.opensuse.org/images/smiliesnew/sad.png]
    Ich erhalte nocht die Meldung dass die Ramdisk initialisiert wird bevor es dauerhaft schwarz wird.


    Das letzte mal dass ich professionell mit dem Linux Kernel in Verbindung stand war um die Jahrtausendwende und seit dem hat sich zumindest eine Menge bzgl des Bootloaders getan. Die Grub2 KOnfiguration will ich eigentlich gar nicht im Detail verstehen und bin froh dass das SuSE Team den Bootloader offenbar automatisch mit den in /boot gefundenen Kernel updated.
    Ich habe auch mal mit der custom.cfg mein Glück versucht. Ein entsprechendes Menü wurde beim booten angezeigt, aber ... naja, ohne detailiertes Studium der man pages kommt man da wohl nicht weit [Blockierte Grafik: https://forums.opensuse.org/images/smiliesnew/wink.png]


    Die grundsätzlichen Fragen die sich mir stellen sind
    - Muss ich einen bestimmten Compiler verwenden, oder ist der gcc 4.8.5 nutzbar um den Kernel zu installieren?
    - Reicht ein make install ; update-bootloader um alle notwendigen Dateien zu installieren?
    - Gibt es noch irgendeine Tastenkombination mit der ich mir die Kernelmeldungen während des bootens anzeigen lassen kann? Ich bin der meinung das ging vor langer langer Zeit mal mit F12, aber wenn ich so an meiner Notebooktastatur rumdrücke passiert nichts.


    Das Ziel das ich verfolge ist lediglich einen Kernel bauen zu können, der für's profiling breit ist, also oprofiler, LTTng (mag evtl schon standardmässig laufen, ...)
    Ich könnte natürlich auch versuchen die SuSE Kernelsourcen zu beziehen aber ich schätze am Ende ist das Ergebnis des Bootvorganges das gleiche:/


    Hilfreiche Tips sind sehr willkommen [Blockierte Grafik: https://forums.opensuse.org/images/smiliesnew/smile.png]


    Gruß
    Wasili

    Für den Inhalt des Beitrages 115387 haftet ausdrücklich der jeweilige Autor: Laiki

  • Man müsste nicht nur nicht davon ausgehen, man darf davon nicht ausgehen.
    Wer sich einmal mit dem Kernel wirklich befasst hat, wird über so schlichte Herangehensweisen still lächeln.


    Dein Problem ist nicht der Bootloader.
    Obwohl du Grub2 auch vorher lernen solltest.


    Wenn du wirklich selbst Kernels basteln willst, solltest du zuerst mit Linux From Scratch befassen.


    Warum willst du das überhaupt?

  • Grundsätzlich muss es doch möglich sein die Konfiguration eines laufenden Kernels der gleichen Entwicklungslinie zu verwenden um einen Kernel zu bauen.
    Die eigentliche Frage ist, reicht ein make install um ein initrd Image und den Kernel selbst an die entsprechenden Positionen zu kopieren wo das Leap Tool update-bootloader sie erwartet.
    Da ich keine Fehlermeldung gesehen habe beim updaten des Bootloaders gehe ich mal davon aus.
    Ein initrd Image scheint ja auch gefunden worden zu sein, denn es wird ja gemeldet, dass da was geschieht, bevor es schwarz wird.
    Ich werde mal einen Versuch mit den SuSE Kernel Sourcen wagen

    Für den Inhalt des Beitrages 115390 haftet ausdrücklich der jeweilige Autor: Laiki

  • :)
    ich möchte oprofile testen

    Warum lädst du dann nicht einfach das Modul?
    Das findet sich, wie so ziemlich jedes Paket, das du wollen könntest, wie immer dort, wo man auch alle Pakete suchen kann.
    Nämlich auf der Website für die Paketsuche von openSUSE


    Grundsätzlich muss es doch möglich sein die Konfiguration eines laufenden Kernels der gleichen Entwicklungslinie zu verwenden um einen Kernel zu bauen.

    Das ist selbstverständlich möglich.
    Auf jeden Fall für Leute, die sich mindestens einmal durch die Doku, wie man einen Linuxkernel baut und zum Laufen kriegt, gekämpft haben.
    Bei den meisten anderen endet das schlicht mit einem schwarzen Bildschirm.


    Dafür muss dann aber alles passen, alles korrekt vorbereitet sein. Vor allem nach dem Kompilieren muss man dann alle nötigen Schritte korrekt erledigen, um das dann auch zu betreiben. Das sind noch einige. Kompilieren alleine ist nur das Rühren des Teiges. Bis du die Semmel lutschen kannst, sind noch so Kleinigkeiten, wie Backen, Semmel verkaufen, Heimbringen, Aufschneiden und Bestreichen/Belegen nötig.


    Die eigentliche Frage ist, reicht ein make install um ein initrd Image und den Kernel selbst an die entsprechenden Positionen zu kopieren wo das Leap Tool update-bootloader sie erwartet.

    Erst einmal erwartet update-bootloader lediglich, dass in /etc korrekte Shellscripte liegen. Wohin deine Kernelkompilierversuche ihre Resultate schreiben, ist ihm völlig egal. Umgekehrt auch.


    Ein make install tut, was install sagt: Es installiert ein frisch kompiliertes Paket. Dazu verwendet es ein sogenanntes Makefile. Und in dem wird festgelegt, was der Befehl make tun soll.


    Es liegt also an dir, dieses Makefile so zu trimmen, dass dein make install deine Kompilate nicht nur korrekt kopiert, sondern auch noch gleich die initrd bastelt. Wenn du das wirklich machen willst, solltest du auch mal gucken, welche Kernelmodule du brauchst, um das Ding überhaupt hochzukriegen. Auch die müssen verfügbar sein.


    Das Ganze ist ähnlich, wie mit einem Hammer einen Nagel einzuschlagen und gleichzeitig die Suppe damit auszulöffeln.
    Das Resultat ist nicht so wirklich sauber, vulgo: eine Bombensauerei auf dem Tisch. Und keine Suppe im Magen. Läuft das ganz schlecht, fällt sogar die Wand vom Nagel.


    Da ich keine Fehlermeldung gesehen habe beim updaten des Bootloaders gehe ich mal davon aus.

    Mit dieser These wärst du dann Gott und dir alles möglich.


    Was du nicht siehst, ist alles wohlgetan?
    Es irrt der Mensch solang er strebt.


    Das update-bootloader Script ist im wesentlichen nur ein Stub, der aus der Datei /etc/default/grub und allem, was in /etc/grub zu finden ist, eine Konfigdatei in /boot erzeugt. Im Wesentlichen ruft es dazu grub-mkconfig auf.
    Es mag ganz hilfreich sein in einer Konsole als root einmal grub-<tab><tab> einzugeben, um mit Hilfe der Completion eine Liste aller grub relevanten Programme wenigstens zu sehen.
    (Es gibt sehr viele update-bootloader Scripte; mag sein, dass du eines von meiner Schilderung etwas abweichendes betreibst.)


    Auch hier liegt es an dir, dass alles verfügbar und vorhanden ist.


    Ein initrd Image scheint ja auch gefunden worden zu sein, denn es wird ja gemeldet, dass da was geschieht, bevor es schwarz wird.
    Ich werde mal einen Versuch mit den SuSE Kernel Sourcen wagen

    Selbstverständlich findet er eine initrd Datei, die hoffentlich ein korrektes Image ist. Und die muss auch noch ganz genau zum dem gewünschten Kernel passen UND alle Kernel- Module müssen ebenso dazu passen. Etwas mehr als nur ein schlichtes make install.


    Bei den Kernel-Sourcen von openSUSE selbst wirst du es einfacher haben.
    Da wird dir das ganze Zeuchs korrekt draufgebastelt.


    Ohne Grub nachzulernen und alles Nachzuholen, was sich seit deinen ersten Schritten in Sachen Kernel getan hat, wird das nix.

  • Danke Dir für die Zeit die Du dir genommen hast auf meine Fragen zu antworten.


    Ich weiß was Makefiles sind, und was SW Entwicklung ( sogar im Kernel, auch wenn's schon ein paar Tage her ist : )
    Ich hatte die Hoffnung von jemanden hilfreiche Informationen zu erhalten, der evtl schon einmal durch die gleichen Probleme gegangen ist.

    Für den Inhalt des Beitrages 115394 haftet ausdrücklich der jeweilige Autor: Laiki

  • Willst du immer noch alles selbst pfriemeln?
    Dann wirst du dir das alles reinziehen müssen.


    Oder du nimmst einfach das fertige Paket, und gut is.


    Diejenigen, die sowas machen wollen, sind so dünn gesät, dass du hier kaum auf sie stoßen wirst.
    Die sind i.d.R. auch eher nicht in Supportforen zu finden.
    Da wärst du dann eher auf einer Kernelliste richtig.


    Aber nochmal: Mit dem Kernel- Repos ist das keine Hexerei.
    Und am einfachsten schlicht das fertige Paket.


    Und die wesentlichen Punkte, die bei dir vermutlich schiefgegangen sind, habe ich angesprochen.
    Mit deinem Wissen solltest du das jetzt gebacken kriegen.
    Wenn nicht, stelle bitte konkrete Fragen mit konkreten Informationen.


    Ein "geht nicht", hilft nicht.
    Und "bis zum schwarzen Schirm", ist nur ein "geht nicht".


    Du hast ja sicher schon die Logfiles und das Systemjournal durchkämmt nach Hinweisen....

  • Ich habe den SuSE Kernel (4.4.92) bezogen und mit der gleichen Konfiguration wie dem laufenden gebaut. Einzige Ausnahme ist die Bezeichnung des Kernels (die man konfigurieren kann) um ihn vom original zu unterscheiden.
    Nach dem bauen und der Installation der Kernelmodule 'make modules_install' und der Installation des Kernel 'make install' (dieser Schritt erzeugt auch eine initrd image) und dem 'update-bootloader' bootete das System und zeigt am Ende einen schwarzen Bildschirm :(
    Allerdings muss ich gestehen, dass man relativ lange bei Systemstart die HDD LED blinken sieht und der Bildschirm irgendwie nicht ganz schwarz zu sein scheint, sondern nur der X Server nicht sichtbar ist.
    Eine IP Adresse bezieht das System auch und auf ping reagiert es.
    Leider bekomme ich keinen Zugriff über rlogin, ssh, telnet oder VNC. Muss an der Firewall meines Windows Rechners liegen.
    Glücklicherweise ist ja der alte Kernel noch vorhanden und man bekommt ihn auch gebootet.
    Ich habe versucht herauszufinden, was beim fehlgeschlagenen Bootvorgang vor sich gegangen ist, und 'journalctl -b1' scheint das auszugeben.
    -b1 liefert Ausgaben des vorletzten und -b0 des letzten Startvorgangs.
    Leider sind die Ausgaben zu unterschiedlich um daraus schlau zu werden.
    Werde sie gleich mal veruchen diesem Thread die Infos daraus anzuhängen

    Für den Inhalt des Beitrages 115416 haftet ausdrücklich der jeweilige Autor: Laiki

  • Hier ein diff der zeigt, dass die Unterschiede der Kernelkonfigurationen marginal sind


    wgo@linux-4hsn:~> diff /boot/config-4.4.92-31-default /boot/config-4.4.92-31-wgo-
    3c3
    < # Linux/x86_64 4.4.85 Kernel Configuration
    ---
    > # Linux/x86 4.4.92 Kernel Configuration
    57c57
    < CONFIG_LOCALVERSION="-31-default"
    ---
    > CONFIG_LOCALVERSION="-31-wgo-"
    wgo@linux-4hsn:~> #


    anbei die journalctl Meldungen
    boot.4.4.91-31-default.txtboot.4.4.91-wgo-.txt


    Ich bezweifle, dass daraus jemand schlau wird, wollte euch nur auf dem laufenden halten

    Für den Inhalt des Beitrages 115417 haftet ausdrücklich der jeweilige Autor: Laiki