- 实现DHCP自动获取IP地址
- 1. 在内核中添加以下选项:
- Device Drivers --->
- Networking support --->
- <*>Networking support
- Networking options --->
- <*>Packet socket //添加.配置CONFIG_PACKET
- [*] IP: DHCP support //添加
- [*] Network packet filtering (replaces ipchains) --->
- //添加,后面子选项可不选,配置CONFIG_NETFILTER
- 说明:若没选 Packet socket,在执行udhcpc命令时出现如下错误:
- ~ # udhcpc
- udhcpc (v0.9.9-pre) started
- udhcpc[208]: udhcpc (v0.9.9-pre) started
- FATAL: couldn't listen on socket, Address family not supported by protocol
- udhcpc[208]: FATAL: couldn't listen on socket, Address family not supported by protocol
- [*] Network packet filtering (replaces ipchains) --->本人选项已测试可以不选
- 2. Busybox中添加以下选项:
- Networking Utilities --->
- udhcp Server/Client --->
- [ ] udhcp Server (udhcpd) //生成服务端命令udhcpd,在此不作服务端,故不选。
- udhcp Client (udhcpc) //生成udhcpc命令
- [ ] Lease display utility (dumpleases)
- [ ] Log udhcp messages to syslog (instead of stdout)
- [ ] Compile udhcp with noisy debugging messages
- 若busybox没编译相应选项,也可从网上下载相应文件,用arm-linux交叉编译得到udhcpd,udhcpc命令copy到usr/sbin下就可以了。
- 从网上下的udhcp_0.9.8cvs20050303.orig.tar.gz文件,解压后修改Makefile文件
- 在19行添加CROSS_COMPILE=arm-linux- (生成ARM版)
- 注释12行的COMBINED_BINARY=1 (否则不生成udhcpc命令)
- 3. 建相关配置文件
- 从busybox的examples/udhcp/下copy simple.script文件到开发板/usr/share/udhcpc/下,并重命名为default.script,udhcp_0.9.8cvs20050303.orig.tar.gz中也有这样的文件。
- [root@localhost root]# vi usr/share/udhcpc/default.script
- 说明:此步不需要,防止examples/udhcp/simple.script出错
- #!/bin/sh
- # udhcpc script edited by Tim Riker
- [ -z "$1" ] && echo "Error: should be called from udhcpc" && exit 1
- RESOLV_CONF="/etc/resolv.conf"
- [ -n "$broadcast" ] && BROADCAST="broadcast $broadcast"
- [ -n "$subnet" ] && NETMASK="netmask $subnet"
- case "$1" in
- deconfig)
- /sbin/ifconfig $interface 0.0.0.0
- ;;
- renew|bound)
- /sbin/ifconfig $interface $ip $BROADCAST $NETMASK
- if [ -n "$router" ] ; then
- echo "deleting routers"
- while route del default gw 0.0.0.0 dev $interface ; do
- :
- done
- for i in $router ; do
- route add default gw $i dev $interface
- done
- fi
- echo -n > $RESOLV_CONF
- [ -n "$domain" ] && echo search $domain >> $RESOLV_CONF
- for i in $dns ; do
- echo adding dns $i
- echo nameserver $i >> $RESOLV_CONF
- done
- ;;
- esac
- exit 0
- 4. 重启开发板,执行udhcpc就可自动获取IP地址了,以下是执行udhcpc的输出信息:
- ~ # udhcpc
- udhcpc (v0.9.9-pre) started
- udhcpc[228]: udhcpc (v0.9.9-pre) started
- Sending discover...
- udhcpc[228]: Sending discover...
- Sending select for 192.168.1.109...
- udhcpc[228]: Sending select for 192.168.1.109...
- Lease of 192.168.1.109 obtained, lease time 86400
- udhcpc[228]: Lease of 192.168.1.109 obtained, lease time 86400
- deleting routers
- route: SIOC[ADD|DEL]RT: No such process
- adding dns 192.168.0.1
- ~ # ping www.baidu.com
- PING www.a.shifen.com (220.181.38.4): 56 data bytes
- 64 bytes from 220.181.38.4: icmp_seq=0 ttl=52 time=1219.0 ms
- [1] + Stopped ping www.baidu.com
- 5. 如果是双网卡必须用参数指明
- 例:udhcpc -i eth1
- 6. 运行时的一些注意事项
- busybox中要使用DNS时,要保证/etc/nsswitch.conf[/etc/resolv.conf,/etc/hosts, /etc/host.conf,/etc/hostname]文件存在(其中[]内的内容是否需要没有经过验证,反正有了肯定不会错,呵呵);同时要求 libnss_dns,libnss_files,libresolv库存在。
- busybox中使用udhcpc时,要设置配置文件/usr/share/udhcpc/default.script;把examples/udhcp/simple.script文件copy到目的文件就可以了。
阅读(769) | 评论(0) | 转发(0) |