Linux Kernel ============ Das Linux Project wurde 1991 vom Finnen Linus Torvalds ursprünglich für die x86-Architektur ins Leben gerufen. Mittlerweile ist der Linux Kernel mit über 16 Millionen Codezeilen und über 2000 Entwicklern das größte OpenSource Software Projekt weltweit. 80% der Personen die aktiv in den Kernel committen sind bei Firmen (Redhat, Google, ...) angestellt um am Kernel zu arbeiten, 20% sind Privatleute die in Ihrer Freizeit am Kernel mitentwickeln. Kernel herunterladen -------------------- Alle Kernel-Versionen (mainline, stable, longterm, next) können von kernel.org_ herunterladen werden. Der Quellcode kann wahlweise per http, git oder rsync gezogen werden, wobei ``git`` dabei die gebräuchlichste Variante sein dürfte. Auch sind alle ausgecheckten Tags als \*.tar.gz Tarball verfügbar. Stable Tree: .. code:: bash git clone git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git Latest RC-Tree .. code:: bash git clone git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git Wann sollte ich welche Version verwenden? _________________________________________ * Ich will sehen ob ein bestimmter Bug gefixt wurde stable. * Ich will einen relativ modernen Kernel, der zuverlässing läuft stable. * Ich will mir ein neues Feature genauer ansehen rc. * Ich möchte höchste stabilität und Sicherheit für einen möglichst langen Zeitraum longterm. * Ich möchte für meinen Raspberry Pi einen Kernel bauen der zuverlässig läuft, mir reicht eine bestimmte Version und ich will nicht lange warten. stable (4.1.2) .. code:: bash wget https://www.kernel.org/pub/linux/kernel/v4.x/linux-4.1.2.tar.xz Upstream Kernel für den Raspberry Pi ------------------------------------ Dieser Vorgang setzt eine funktionierende Croos-Toolchain für ARMv7l Architekturen voraus. Besorgen der aktuellen Kernel-Version 4.1.2: .. code:: bash $ wget https://www.kernel.org/pub/linux/kernel/v4.x/linux-4.1.2.tar.xz Danach entpacken wir die Quellen und wechseln ins Verzeichnis: .. code:: bash $ tar -xvf linux-4.1.2.tar.xz $ cd linux-4.1.2 Anschließend können wir den Kernel konfigurieren: .. code:: bash # RP1 / Compute Module $ cd linux $ KERNEL=kernel $ make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- bcmrpi_defconfig # RP2 $ cd linux $ KERNEL=kernel7 $ make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- bcm2709_defconfig Möchte man die Konfiguration noch weiter anpassen, kann man das mit menuconfig tun: .. code:: bash make menuconfig Nun kompilieren wir das Kernelimage, Module und den DeviceTree-Blob: .. code:: bash $ make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- zImage modules dtbs Das Kernelimage sowie der DeviceTree-Blob können nun auf die SD-Karte übertragen werden, die Kernel-Module werden später in das Rootfile-System im Verzeichnis /lib/modules installiert. Was ist der Unterschied zwischen einem Image, zImage, uImage? ------------------------------------------------------------- Kommt man zum ersten mal mit Kernelimages in Berührung ist es wichtig die einzelnen Imagetypen unterscheiden zu können. Wir haben im vorherigen Punkt ein zImage generiert, doch was bedeutet das genau? * Image Hierbei handelt es sich um eine "generic Linux Kernel Binary Image file". Dieser Imagetyp ist nicht komprimiert, was beim Startvorgang die Bootzeit reduziert. * zImage Das zImage ist eine komprimierte Version, in seinem Header ist ein Dekomprimierungstool eingebaut das der Prozessor liest und damit das Image entpacken kann. Reduzierte Dateigröße aber höhere Bootzeit * uImage Dieser Imagetyp hat einen integrierten U-Boot wrapper (hinzugefügt durch mkimage), dieser enthält den OS-typ und spezielle Informationen für den Bootloader. .. _kernel.org: https://www.kernel.org/