buildrootでのDHCP接続(Raspberry Pi)

自宅にはルータがあり、DHCPサーバとして使用しています。なので Raspberry Pi もstatic IPではなく、DHCPサーバからIPを取得してLANに接続するように設定します。簡単だと思っていたのですが、以外と手こずらせてくれました。

buildrootには DHCP client として dhcpcd が入っています。これを有効化してLANに接続します。有効化の方法は、buildrootのフォルダで make menuconfig を実行して Target packages → Networking applications → dhcpcd にチェックを入れて make します。これでできあがった rootfs.tar をSDカードに展開します。そして Raspberry Pi の電源ON。出てきたログが以下です。

途中から…
[    2.035092] usb 1-1: new high-speed USB device number 2 using dwc_otg
[ 2.041948] Indeed it is in host mode hprt0 = 00001101
[ 2.167710] EXT4-fs (mmcblk0p2): re-mounted. Opts: data=ordered
Starting logging: OK
[ 2.255358] usb 1-1: New USB device found, idVendor=0424, idProduct=9512
[ 2.262091] usb 1-1: New USB device strings: Mfr=0, Product=0, SerialNumber=0
Initializing random number generator... [ 2.297191] hub 1-1:1.0: USB hub found
[ 2.301094] hub 1-1:1.0: 3 ports detected
done.
Starting network...

Welcome to Buildroot
buildroot login: [ 2.614872] usb 1-1.1: new high-speed USB device number 3 using dwc_otg
[ 2.735124] usb 1-1.1: New USB device found, idVendor=0424, idProduct=ec00
[ 2.742011] usb 1-1.1: New USB device strings: Mfr=0, Product=0, SerialNumber=0
[ 2.752734] smsc95xx v1.0.4
[ 2.818653] smsc95xx 1-1.1:1.0 eth0: register 'smsc95xx' at usb-bcm2708_usb-1.1, smsc95xx USB 2.0 Ethernet, b8:27:eb:e9:48:7d

Welcome to Buildroot
buildroot login:


eth0の設定をしていないので、"Starting network..." の所では何もおきません。eth0はDHCPで繋ぐ事を設定します。

# vi /etc/network/interfaces
# cat /etc/network/interfaces
# Configure Loopback
auto lo
iface lo inet loopback
auto eth0
iface eth0 inet dhcp


これで再起動してみます。

途中から…。
[    1.970911] Freeing unused kernel memory: 124K (c0549000 - c0568000)
[ 2.035072] usb 1-1: new high-speed USB device number 2 using dwc_otg
[ 2.041963] Indeed it is in host mode hprt0 = 00001101
[ 2.148635] EXT4-fs (mmcblk0p2): re-mounted. Opts: data=ordered
Starting logging: OK
Initializing random number generator... [ 2.255437] usb 1-1: New USB device found, idVendor=0424, idProduct=9512
[ 2.262172] usb 1-1: New USB device strings: Mfr=0, Product=0, SerialNumber=0
done.
[ 2.318921] hub 1-1:1.0: USB hub found
[ 2.322871] hub 1-1:1.0: 3 ports detected
Starting network...
ip: SIOCGIFFLAGS: No such device

Welcome to Buildroot
buildroot login: [ 2.624862] usb 1-1.1: new high-speed USB device number 3 using dwc_otg
[ 2.745118] usb 1-1.1: New USB device found, idVendor=0424, idProduct=ec00
[ 2.752007] usb 1-1.1: New USB device strings: Mfr=0, Product=0, SerialNumber=0
[ 2.762730] smsc95xx v1.0.4
[ 2.828660] smsc95xx 1-1.1:1.0 eth0: register 'smsc95xx' at usb-bcm2708_usb-1.1, smsc95xx USB 2.0 Ethernet, b8:27:eb:e9:48:7d

Welcome to Buildroot
buildroot login:


何と、"Starting network..." の直後にeth0からDHCPサーバへ繋ごうとするのですが、"ip: SIOCGIFFLAGS: No such device" と言われてしまいます。ようはeth0が見つからないらしいのです。その証拠にもっと下の方でeth0を登録しています。どうやら Raspberry Pi は USB-Ethernet を使っているみたいなのですが、デバイスを認識するのに時間がかかっているんですね。なので、eth0を使おうとして ifup を実行してもデバイスが見つからないといった内容を吐き出してくれちゃってるのです。

これは…どうしてやろうかと思いましたよ。起動が速くなったので喜んでいたら、その弊害が出てしまったといったところでしょうか。といっても、ヘッドレス構成にするのでこの時点でLANに繋がっていないのは非常にマズイです。そこで、多少のロスは目をつむり、eth0が登録されるまで……正確には ifup が成功するまで繰り返すという方法をとることにしました。

修正方法は、初期化スクリプトを編集します。

# cat /etc/init.d/S40network
#!/bin/sh
#
# Start the network....
#

case "$1" in
start)
echo "Starting network..."
for x in $(seq 1 10)
do
if /sbin/ifup -a; then
break
else
echo "networek connect wait..."
sleep 1
fi
done
;;
stop)
echo -n "Stopping network..."
/sbin/ifdown -a
;;
restart|reload)
"$0" stop
"$0" start
;;
*)
echo "Usage: $0 {start|stop|restart}"
exit 1
esac

exit $?


S40network の start のケースで ifup を実行してエラーであれば1秒待ってから再度 ifup を行う。というのを 10回までチャレンジさせます。この様に修正して再起動した時のログが以下です。

[    2.255343] usb 1-1: New USB device found, idVendor=0424, idProduct=9512
[ 2.262076] usb 1-1: New USB device strings: Mfr=0, Product=0, SerialNumber=0
[ 2.309266] hub 1-1:1.0: USB hub found
[ 2.327877] hub 1-1:1.0: 3 ports detected
done.
Starting network...
ip: SIOCGIFFLAGS: No such device
networek connect wait...
[ 2.624835] usb 1-1.1: new high-speed USB device number 3 using dwc_otg
[ 2.745095] usb 1-1.1: New USB device found, idVendor=0424, idProduct=ec00
[ 2.751981] usb 1-1.1: New USB device strings: Mfr=0, Product=0, SerialNumber=0
[ 2.762705] smsc95xx v1.0.4
[ 2.828620] smsc95xx 1-1.1:1.0 eth0: register 'smsc95xx' at usb-bcm2708_usb-1.1, smsc95xx USB 2.0 Ethernet, b8:27:eb:e9:48:7d
ifup: interface lo already configured
[ 3.537596] smsc95xx 1-1.1:1.0 eth0: hardware isn't capable of remote wakeup
udhcpc (v1.22.1) started
Sending discover...
[ 5.029596] smsc95xx 1-1.1:1.0 eth0: link up, 100Mbps, full-duplex, lpa 0xCDE1
Sending discover...
Sending select for 192.168.11.12...
Lease of 192.168.11.12 obtained, lease time 172800
deleting routers
adding dns 192.168.11.1

Welcome to Buildroot
buildroot login:


一度失敗してますが、2回目に成功してIPを取得出来ています。念の為に確認してみると、ちゃんとIPが取得出来ています。

# ifconfig
eth0 Link encap:Ethernet HWaddr B8:27:EB:E9:48:7D
inet addr:192.168.11.12 Bcast:192.168.11.255 Mask:255.255.255.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:18 errors:0 dropped:0 overruns:0 frame:0
TX packets:2 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:2400 (2.3 KiB) TX bytes:700 (700.0 B)

lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
UP LOOPBACK RUNNING MTU:65536 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)


少々起動に時間がかかるようになってしまいましたが、許せる範囲なので無問題です。

MPDを稼働させるまでにもう1、2箇所くらい難所がありそうですが、頑張ってみます。
スポンサーサイト

tag : RaspberryPi

tag : buildroot

黒ねこ時計 くろック D02
プロフィール

jujurou

Author:jujurou
運営HP:チャコの部屋
Twitter:jujurou

カレンダー
11 | 2015/01 | 02
- - - - 1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
最新記事
最新コメント
カテゴリ
ユーザタグ

RaspberryPi ぺるけ Linux TRminiWatterPart4 トランジスタ式ミニワッター MPD イーサネットコンバータ OpenOCD DAC FON2405E buildroot FM3ペリフェラル BeagleBoneBlack library FM3評価ボード ODROID-U2 mingw OpenGL TL-WR700N Edison bitbake KiCad VMware シングル FM4 ミニワッター 6N6P 計測 

月別アーカイブ
ランキング

FC2 Blog Ranking

カウンター
検索フォーム
リンク
RSSリンクの表示
QRコード
QRコード
ライセンス
クリエイティブ・コモンズ・ライセンス
Twitter