Kernel selbst bauen

  • Hallo,


    ich programmiere seit 16 Jahren embedded Systeme auf C und C++ und möchte jetzt in die embedded Linux Welt einsteigen. Dazu wollte ich mit dem Raspberry Pi einsteigen.


    Mich interessiert weniger die Anwendungsprogrammierung, sondern der Aufbau und die Treiber. Um die Zusammenhänge von Bootloader, Kernel, Device Tree und Rootfile system zu verstehen habe ich einerseits einiges gelesen und auch ein embedded Linux Seminar besucht.


    Jetzt ist es halt so eine Sache mit Theorie und Praxis. Theoretisch alles verstanden, aber praktisch ein riesen Fragezeichen.


    Ich habe das U-Boot (Denx) zum Laufen gebracht. Danach wollte ich den Linux-Kernel 4.4 bauen und starten, bis jetzt allerdings erfolglos.
    Dann habe ich die SD-Karte mit einem lauffähigen Image bespielt (startete auch) und anschließend die kernel7.img mit der erzeugten Image-Datei des Kernels ersetzt. Also umbenannt und auf der SD-Karte überschrieben.
    Leider startet der Raspi nicht. Es wird nur ein schöner bunter Bildschirm angezeigt. Die Profis unter Euch lachen sich bestimmt schon einen.


    Die Suche im Internet hat zwar etliche Anleitungen ausgespuckt, allerdings alle für den Kernel 3.x.




    Was hab ich:
    - Einen Raspberry Pi B+
    - Das Buch Embedded Linux von Jürgen Quade
    - Wenig bis gar keine praktische Erfahrung


    Was brauch ich:
    - Einen der mir mit simplen Worten mal erklärt wie das geht was ich vorhabe.



    Was ich gemacht habe:
    - Eine Virtuelle Maschine auf meinem PC installiert und xUbuntu installiert
    - Den Cross-Compiler von github.com/rasperrypi/tools installiert
    - Die Umgebungsvariablen ARCH und CROSS_COMPILE gesetzt und exportiert
    - Den aktuellen Kernel rpi-4.4.y von github.com/raspberrypi/linux.git geclont
    - Eine .config erstellt (make bcm2709_defconfig)
    - Den Kernel gebaut (make zImage)
    - Die erstellte Image-Datei aus arch/arm/boot in kernel7.img umbenannt und auf die Boot-Partition der SD-Karte kopiert

  • Ich bin da selber noch nicht besonders beleckt drin, aber eine Sache die fehlen könnte: mkknlimg. Dadurch wird der Kernel "markiert" als DT-befaehigt, und das erwartet der PI Bootloader. Ggf. kannst du einfach ein buildroot nehmen, und damit deinen Kernel das erste mal bauen. Wenn das als ganzes läuft (hat dann natürlich kein u-boot), dann hast du einen lauffaehigken kernel, und an dessen Konfiguration kannst du beliebig rumschrauben, neu bauen, und wieder auf's U-boot schieben.

  • Hallo Michael,


    ich hatte mal ein wenig mit dem Kernel herumgespielt, allerdings nativ auf dem Raspi compiliert. Vielleicht fängst Du mal da an und steigst später auf den Crosscompiler um, wenn Du sicher bist, daß der Kernel mal grundsätzlich funktioniert. Die Schritte hatte ich grob notiert und kippe sie mal hier ab:




    ds hatte auch mal eine Kernelbauanleitung hier im Forum gepostet.


    Schöne Grüße


    schnasseldag

  • Hallo Michael,


    das Buch von Jürgen Quade und ein paar andere von ihm habe ich auch.


    Eigentlich sind es doch Schritt-für-Schritt-Anleitungen in seinen Büchern, und geben Dir genau vor, was Du tun musst und was als Ergebnis kommt.


    Was funktioniert bei Dir denn nicht?


    Die meisten solcher Dinge mache ich aber mit einem selbstgeschriebenen Programm (Kernel-Compilator), dessen Ur-Version auch irgendwo hier im Forum vergraben ist.


    Beste Grüße


    Andreas

    Ich bin wirklich nicht darauf aus, Microsoft zu zerstören. Das wird nur ein völlig unbeabsichtigter Nebeneffekt sein.
    Linus Torvalds - "Vater" von Linux

    • Icon-Tutorials (IDE: Geany) - GPIO-Library - µController-Programmierung in Icon! - ser. Devices - kein Support per PM / Konversation

    Linux is like a wigwam, no windows, no gates, but with an apache inside dancing samba, very hungry eating a yacc, a gnu and a bison.

    Edited once, last by Andreas ().

  • Hallo Michael,
    Ich habe es mal nach dieser (offiziellen) Anleitung hinbekommen, du hast bei dir auf jeden Fall den DeviceTree vergessen, ohne wird das nichts. (Bei mir ging damals nur das WLAN nicht)
    https://www.raspberrypi.org/do…/linux/kernel/building.md


    schnasseldag
    bei 'make zImage modules dtbs' sollte noch ein -j4 dazu, das beschleunigt der Vorgang auf einem aktuellen Pi erheblich, da er alle Kerne nuzt. (Achtung, der Pi wird sehr warm!)


    Gruß
    Chris