raspbian-eigener-linux-kernel
no way to compare when less than two revisions
Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen angezeigt.
— | raspbian-eigener-linux-kernel [2016/05/30 13:26] (aktuell) – angelegt benny | ||
---|---|---|---|
Zeile 1: | Zeile 1: | ||
+ | ====== Eigenen Linux Kernel für Raspberry Pi in Ubuntu 16.06 x64 VM cross-compilen/ | ||
+ | Da der aktuelle VXLAN-Test, wie viele Ideen, auch dieses mal wieder ein paar Dinge voraussetzt die bisher wohl niemand gemacht hat, brauchen wir einen neuen Kernel für unseren Pi. :( | ||
+ | |||
+ | * VirtualBox mit < | ||
+ | * Da wir eigene Kernel kompilieren wollen, sollten sinnvollerweise mehr CPUs zugeordnet werden (z.B. 2 Stück) | ||
+ | * Es sollte " | ||
+ | * Ziel ist es eine CROSS-COMPILER Umgebung zu bauen | ||
+ | * Die meisten Anleitungen die ich gefunden habe sind bereits älter (2014) und für verschiedene Pi-Modelle nicht mehr aktuell! | ||
+ | * Erst einmal müssen wir folgende Pakete installieren: | ||
+ | < | ||
+ | sudo apt-get install git-core | ||
+ | sudo apt-get install gcc-4.7-arm-linux-gnueabi | ||
+ | sudo apt-get install build-essential | ||
+ | sudo apt-get install ncurses-dev | ||
+ | </ | ||
+ | * Damit wir die Kernel erfolgreich kompilieren können, brauchen wir die / | ||
+ | * Falls es diese Datei nicht gibt, was wahrscheinlich ist, folgendes eingeben: | ||
+ | < | ||
+ | sudo modprobe configs | ||
+ | </ | ||
+ | * Nun sollte die Datei / | ||
+ | * Wichtig ist dass man sich markiert welche config.gz (später dann " | ||
+ | * Nun legen wir uns in unserem HOME-Verzeichnis ein Arbeitsverzeichnis für die folgenden Aufgaben an, initialisieren es mit Git und laden die Tools von GitHub: | ||
+ | < | ||
+ | mkdir src | ||
+ | cd src/ | ||
+ | git init | ||
+ | git clone git:// | ||
+ | </ | ||
+ | * Dieser folgende Schritt erscheint mir überflüssig, | ||
+ | < | ||
+ | git clone --depth 1 git:// | ||
+ | </ | ||
+ | * Jetzt geben wir die Version noch einmal vor die wir haben wollen, dies habe ich aus anderen Anleitungen entsprechend dem aktuellen Kernel angepasst | ||
+ | < | ||
+ | mkdir linux-4.4.y | ||
+ | cd linux-4.4.y/ | ||
+ | git init | ||
+ | git fetch git:// | ||
+ | git checkout refs/ | ||
+ | </ | ||
+ | * Einmal aufräumen, nur zur Sicherheit (im linux-4.4.y Verzeichnis) | ||
+ | < | ||
+ | make mrproper | ||
+ | </ | ||
+ | * In dieses Verzeichnis ~/ | ||
+ | * "gzip -d config.gz", | ||
+ | * Wichtige Entscheidung: | ||
+ | * Für armv6l: | ||
+ | < | ||
+ | * Für armv7l: | ||
+ | < | ||
+ | * Ich habe erstmal mit dem Pi 3 losgelegt, also .. | ||
+ | < | ||
+ | export KERNEL=kernel7 | ||
+ | </ | ||
+ | * Unsere alte Konfiguration auf neuen Kernel anpassen lassen / übernehmen: | ||
+ | * Prüft dass ihr im ~/ | ||
+ | * Prüft dass die .config Datei in diesem Verzeichnis liegt die ihr übernehmen wollt | ||
+ | < | ||
+ | $ make ARCH=arm CROSS_COMPILE=~/ | ||
+ | </ | ||
+ | * In meinem Fall wollte ich nun das VXLAN-Modul bauen lassen, daher hab ich noch folgendes aufgerufen um das grafisch (ncurses, console) auszuwählen | ||
+ | < | ||
+ | make ARCH=arm CROSS_COMPILE=~/ | ||
+ | </ | ||
+ | * Navigiert durch **menuconfig**: | ||
+ | * Dem Hinweis dass ihr danach " | ||
+ | * Wir rufen " | ||
+ | * -j 2 nutzt die zwei Prozessoren die wir angegeben haben besser aus, ihr könnt hier selbst wählen was euer System verkraftet | ||
+ | * Der Vorgang dauert in etwa 15-20 Minuten, je nachdem was ihr für ein System einsetzt (Motto: Hubraum ist nur durch mehr Hubraum zu ersetzen!) | ||
+ | < | ||
+ | make -j 2 ARCH=arm CROSS_COMPILE=~/ | ||
+ | </ | ||
+ | * Nun legen wir ein Verzeichnis an, wo die " | ||
+ | < | ||
+ | mkdir / | ||
+ | </ | ||
+ | * Die " | ||
+ | < | ||
+ | make ARCH=arm CROSS_COMPILE=~/ | ||
+ | </ | ||
+ | * Neuen Kernel auf unseren Pi kopieren | ||
+ | * Der Kernel landet dann im Home-Verzeichnis des Benutzers " | ||
+ | < | ||
+ | scp arch/ | ||
+ | </ | ||
+ | * Zweites Terminal öffnen, die Module einsammeln und auf den Pi übertragen | ||
+ | < | ||
+ | cd /tmp | ||
+ | tar czf modules.tar.gz modules/ | ||
+ | scp modules.tar.gz pi@192.168.0.98: | ||
+ | </ | ||
+ | * SSH auf den Pi aufmachen, den Kernel irgendwie sinnvoll umbenennen und für den nächsten Boot hinterlegen | ||
+ | < | ||
+ | ssh pi@192.168.0.98 | ||
+ | pi@pi3:~ $ mv Image kernel_vxlan_4.4.11.y.img | ||
+ | pi@pi3:~ $ sudo cp kernel_vxlan_4.4.11.y.img /boot/ | ||
+ | pi@pi3:~ $ tar xvzf modules.tar.gz | ||
+ | ... wird entpackt nach modules/ ... | ||
+ | pi@pi3:~ $ sudo cp -r modules/ | ||
+ | pi@pi3:~ $ sudo vi / | ||
+ | # Am Ende der Datei einfügen oder den Eintrag ersetzen, vorher " | ||
+ | kernel=kernel_vxlan_4.4.11.y.img | ||
+ | # :wq zum Beenden | ||
+ | pi@pi3:~ $ sudo reboot | ||
+ | </ | ||
+ | * Nach dem Neustart des Pi werden wir von unserem neuen Kernel begrüsst und haben die Möglichkeit VXLAN als Modul zu laden | ||
+ | < | ||
+ | pi@pi3:~ $ uname -a | ||
+ | Linux pi3 4.4.11-v7+ #1 SMP Sat May 28 18:13:41 CEST 2016 armv7l GNU/Linux | ||
+ | pi@pi3:~ $ sudo modprobe vxlan | ||
+ | pi@pi3:~ $ sudo modprobe bridge | ||
+ | pi@pi3:~ $ lsmod | ||
+ | Module | ||
+ | joydev | ||
+ | evdev 11567 2 | ||
+ | openvswitch | ||
+ | nf_defrag_ipv6 | ||
+ | nf_conntrack | ||
+ | bnep | ||
+ | hci_uart | ||
+ | btbcm | ||
+ | bluetooth | ||
+ | brcmfmac | ||
+ | brcmutil | ||
+ | cfg80211 | ||
+ | cdc_ether | ||
+ | rfkill | ||
+ | r8152 34768 0 | ||
+ | snd_bcm2835 | ||
+ | snd_pcm | ||
+ | snd_timer | ||
+ | snd 53776 3 snd_bcm2835, | ||
+ | bcm2835_gpiomem | ||
+ | bcm2835_wdt | ||
+ | uio_pdrv_genirq | ||
+ | uio | ||
+ | vxlan 32491 0 | ||
+ | ip6_udp_tunnel | ||
+ | udp_tunnel | ||
+ | bridge | ||
+ | stp | ||
+ | llc | ||
+ | ipv6 352477 | ||
+ | </ | ||
+ | |||
+ | * Wer nun im Nachgang plant einen Kernel für seinen armv6l (Pi B v1/2) zu kompilieren, | ||
+ | * .config Datei wegsichern (beinhaltet ja nun die Modifikation mit VXLAN) | ||
+ | * make mrproper # räumt alles komplierte für armv7l weg | ||
+ | * export KERNEL=kernel # Um KERNEL=kernel7 zu ersetzen | ||
+ | * .config-Datei vom " | ||
+ | * rm -rf / | ||
+ | * Ansonsten einfach die Anleitung wieder befolgen |
raspbian-eigener-linux-kernel.txt · Zuletzt geändert: 2016/05/30 13:26 von benny