![Linux で起動時にネットワークを起動する方法](https://rvso.com/image/1337826/Linux%20%E3%81%A7%E8%B5%B7%E5%8B%95%E6%99%82%E3%81%AB%E3%83%8D%E3%83%83%E3%83%88%E3%83%AF%E3%83%BC%E3%82%AF%E3%82%92%E8%B5%B7%E5%8B%95%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95.png)
私は組み込み Linux システムで作業しており、ブート時にイーサネット インターフェイスをアクティブ化することを目標としています。ブートローダーとして u-boot を使用しています。ip= および eth= u-boot 環境変数をブート引数として Linux カーネルに渡し、IP:カーネル レベルの自動構成を有効にして Linux カーネルを構成しました。ただし、"ifconfig eth0 up" のようにネットワーク インターフェイスが起動しませんでした。
そこで、ユーザー空間スクリプト (ifup および ifconfig) に頼らずに、Linux カーネルに eth0 インターフェイスをアクティブ化するように指示できるかどうか疑問に思っています。
答え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この機能の本来の目的は、ネットワーク化されたルート ファイルシステムを容易にすることであったという事実を無視してください。
ip=とeth=のu-boot環境変数をbootargsとしてLinuxカーネルに渡しました
eth=
有効なブートパラメータではないため、カーネルによって無視される可能性があります。
ちなみに、Atmel のmacb.c
ドライバを使用している場合は、これが機能するために、U-Boot が PHY の MAC アドレスをインストールすることを確認してください。