Wie man das Netzwerk beim Booten unter Linux hochfährt

5

Ich arbeite an einem eingebetteten Linux-System. Mein Ziel ist es, die Ethernet-Schnittstelle beim Booten zu aktivieren. Ich benutze U-Boot als Bootloader. Ich habe die Umgebungsvariablen ip = und eth = u-boot als Bootargs an den Linux-Kernel übergeben und den Linux-Kernel als IP konfiguriert: Autokonfiguration auf Kernel-Ebene, aktiviert. Dadurch wurde die Netzwerkschnittstelle jedoch nicht gestartet, wie dies bei "ifconfig eth0 up" der Fall ist.

Ich frage mich also, ob es möglich ist, den Linux-Kernel anzuweisen, die eth0-Schnittstelle zu aktivieren, ohne auf User-Space-Skripte (ifup und ifconfig) zurückzugreifen.

Aymen Abdelhakim
quelle
Ich denke , machen ONBOOT=yesin dieser Datei wird Ihr Problem lösen, Dateipfad/etc/sysconfig/network-scripts/ifcfg-eth0
max

Antworten:

7

Ja, der Linux-Kernel kann die eth0-Schnittstelle aktivieren, ohne auf User-Space-Skripte zurückzugreifen.
Sie können den ip=Kernel-Boot-Parameter verwenden, um die Netzwerkschnittstelle mit einer statischen IP-Adresse zu initialisieren. Beispiel:

    ip=192.168.1.100:::255.255.255.0:myboard:eth0:on

Natürlich kann die eth0- Schnittstelle erst aktiviert werden, wenn Treiber geladen wurden (wie durch die Freigabe __initdes Speicherbereichs angezeigt ).
Im folgenden Systemprotokoll wird angezeigt, wann die Netzwerkschnittstelle aktiv wird:

eth0: link down
IP-Config: Complete:
      device=eth0, addr=192.168.1.100, mask=255.255.255.0, gw=255.255.255.255,
    host=myboard, domain=, nis-domain=(none),
    bootserver=255.255.255.255, rootserver=255.255.255.255, rootpath=
Freeing init memory: 564K
remounting / read-write... done.
mounting /proc... done.
mounting /sys... done.
Creating device nodes manually, running /sbin/makenodes-2.6
eth0: link up, 100Mbps, full-duplex, lpa 0xCDE1
Done.
mounting /home... MTDSB: dev_name "/dev/mtdblock3"

Ausführliche Informationen zur Syntax des ip=Boot-Parameters finden Sie in Documentation / filesystems / nfs / nfsroot.txt . Ignorieren Sie die Tatsache, dass der ursprüngliche Zweck dieser Funktion darin bestand, ein vernetztes Root-Dateisystem zu ermöglichen.

Ich habe die Umgebungsvariablen ip = und eth = u-boot als Bootargs an den Linux-Kernel übergeben

eth=ist kein gültiger Boot-Parameter und wird vom Kernel wahrscheinlich ignoriert.
BTW Wenn Sie den Atmel- macb.cTreiber verwenden, stellen Sie sicher, dass U-Boot die MAC-Adresse für den PHY installiert, damit dies funktioniert.

Sägespäne
quelle
Vielen Dank für Ihre Antwort und wertvolle Informationen. Ich verwende keines der Autokonfigurationsprotokolle: bootp, dhcp oder rarp. Der letzte Parameter wäre also "off". Außerdem verwende ich Ramdisk (nicht NFS) und macb.c Treiber. Ich habe eine U-Boot-Variable namens ethaddr, die diesen Wert hat: 00: 05: F4: 11: 22: 33. Ist es das, was Sie in Bezug auf U-Boot zum Laden der MAC-Adresse für den PHY gemeint haben? Wie stellen Sie sicher, dass u-boot den MAC installiert hat?
Aymen Abdelhakim
Ich habe die Einstellung "autoconf" auf "on" gesetzt, um das Netzwerk zu aktivieren, hauptsächlich UDP-Verkehr für die eingebettete App und nicht NFS usw. Wie Sie wollte ich kein Init- Skript verwenden. Ja, der ethaddr muss in den PHY geschrieben werden, und U-Boot muss den PHY ordnungsgemäß initialisieren, wenn Sie eine Netzwerknutzung erwarten macb. Lesen Sie bitte Atmels Nicolas Ferre, der meine Bemerkungen in at91.com/forum/viewtopic.php/f,12/t,21030 bestätigt. Wenn Ethernet in U-Boot funktioniert, kann Linux dies auch.
Sägemehl