Wenn Sie wie in Anpassen der Linux-Bootparameter beschrieben den Bootparameter quiet hinzugefügt haben, werden Sie feststellen, dass Buildroot nun deutlich schneller startet. Und zwar so schnell, dass nun eine Race Condition zum Tragen kommt, durch die der Befehl ifup -a zum Aktivieren des Netzwerks schon ausgeführt wird, bevor der Kernel das Netzwerkinterface kennt. Die Behebung des Problems ist nicht sonderlich kompliziert, erfordert jedoch ein paar Handgriffe.

Wie immer denken Sie bitte daran, dass sämtliche Textdateien gemäß den UNIX-Konventionen gespeichert sein müssen. Entweder bearbeiten Sie die Dateien also direkt unter Linux oder verwenden einen guten Texteditor, der damit umgehen kann. Also so ziemlich alles außer Notepad. 😉

Zunächst bearbeiten Sie die Datei custom/board/rootfs_overlay_base/etc/inittab und entfernen darin folgende Zeile:

::sysinit:/sbin/ifup -a

Stattdessen nehmen Sie folgende neue Zeile hinzu (am Anfang des Blocks darüber):

::once:/sbin/udevd

Das Endergebnis sollte dann so aussehen:

::once:/sbin/udevd
::sysinit:/bin/hostname -F /etc/hostname
::sysinit:/sbin/syslogd
::sysinit:/sbin/klogd
::sysinit:/etc/init.d/S20urandom start
::sysinit:/usr/bin/loadkeys de-latin1

::shutdown:/sbin/ifdown -a

Anschließend legen Sie den neuen Ordner custom/board/rootfs_overlay_base/etc/udev/rules.d an. Darin erstellen Sie eine Textdatei mit dem Namen 10-local.rules und folgendem Inhalt:

# Siehe: http://www.reactivated.net/writing_udev_rules.html

# Die folgenden udev-Regeln stellen sicher, dass das Netzwerk konfiguriert wird,
# sobald das Netzwerk-Interface im Kernel verfügbar ist. Würden Sie stattdessen
# den Befehl "ifup -a" in der Datei /etc/inittab beim Systenstart ausführen,
# könnte es passieren, dass der Befehl zu früh ausgeführt wird und dann keine
# Wirkung hat.

KERNEL=="eth*", SUBSYSTEM=="net", RUN+="/sbin/ifup -a"
KERNEL=="wlan*", SUBSYSTEM=="net", RUN+="/sbin/ifup -a"

Jetzt haben Sie es fast geschafft. Sie müssen nur noch im Buildroot-Menü folgende Einstellung ändern und dann ein neues Firmware Image bauen:

System configuration –> /dev management = „Dynamic using devtempfs + eudev“

Nun sollte das Netzwerk wieder funktionieren. Zum Test führen Sie auf dem Raspberry Pi folgenden Befehl aus, um zu prüfen, ob das eth0-Interface eine IP-Adresse besitzt:

$ ip addr show

Wenn Sie wollen können Sie nun auch wie im neuen Kapitel 4.4 Datum und Uhrzeit aus dem Internet beziehen beschrieben vorgehen, um sicherzugehen, dass der Raspberry Pi beim Hochfahren nicht immer den 01.01.1970, 0:00 Uhr als Systemzeit verwendet. Allerdings erst, sobald ich das neue Skript auch hochgeladen habe. 😛

Hilfe mein Netzwerk funktioniert nicht mehr!?