![как включить сеть во время загрузки в Linux](https://rvso.com/image/1337826/%D0%BA%D0%B0%D0%BA%20%D0%B2%D0%BA%D0%BB%D1%8E%D1%87%D0%B8%D1%82%D1%8C%20%D1%81%D0%B5%D1%82%D1%8C%20%D0%B2%D0%BE%20%D0%B2%D1%80%D0%B5%D0%BC%D1%8F%20%D0%B7%D0%B0%D0%B3%D1%80%D1%83%D0%B7%D0%BA%D0%B8%20%D0%B2%20Linux.png)
Я работаю над встроенной системой Linux, моя цель — активировать интерфейс Ethernet во время загрузки. Я использую u-boot в качестве загрузчика. Я передал переменные окружения ip= и eth= u-boot ядру Linux в качестве загрузочных аргументов и настроил ядро Linux как IP:kernel level autoconfiguration, включено. Однако это не подняло сетевой интерфейс, как это делает "ifconfig eth0 up".
Итак, мне интересно, возможно ли дать команду ядру Linux активировать интерфейс eth0, не прибегая к скриптам пользовательского пространства (ifup и ifconfig)?
решение1
Да, ядро Linux может активировать интерфейс eth0, не прибегая к скриптам пользовательского пространства.
Вы можете использовать ip=
параметр загрузки ядра для инициализации сетевого интерфейса со статическим IP-адресом, например:
ip=192.168.1.100:::255.255.255.0:myboard:eth0:on
Конечно,eth0Интерфейс не может быть включен, пока драйверы не будут инициализированы/установлены (на что указывает освобождение __init
раздела памяти).
Вот системный журнал, показывающий, когда сетевой интерфейс становится активным:
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"
Полная информация о синтаксисе ip=
параметра загрузки приведена вДокументация/файловые системы/nfs/nfsroot.txt. Игнорируйте тот факт, что изначальной целью этой возможности было создание сетевой корневой файловой системы.
Я передал переменные среды u-boot ip= и eth= ядру Linux в качестве аргументов загрузки
eth=
не является допустимым параметром загрузки и, вероятно, игнорируется ядром.
Кстати, если вы используете драйвер Atmel macb.c
, то убедитесь, что U-Boot устанавливает MAC-адрес для PHY, чтобы это работало.