您的位置:首页 > 其它

udhcpc

2015-12-09 09:42 169 查看
前提:系统已经实现DNS(即使用pingwww.baidu.com测试时能ping通)。

1.
在内核中添加以下选项:

Networking --->

[*] Networking support

Networking options --->

<* > Packet socket //添加.配置CONFIG_PACKET

[ * ] IP: DHCP support //添加

[ * ] Network packet filtering (replaces ipchains) ---> //添加,后面子选项可不选,配置CONFIG_NETFILTER

说明:若没选<* > Packet socket, [ * ] Network packet filtering (replaces ipchains) --->选项,在执行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

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-

注释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

#!/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

当没有网络的时候,板子一直发送dhcp请求,导致程序不往下执行,解决的办法是把它切换到后台运行,可是如何切换到后台呢,有办法,它自带参数可以实现该功能。如下:

udhcpc -b -i eth0 -p /var/run/udhcpc.pid -R

解释一下,-b就是切换到后台指令,-i是指定使用哪个网络接口,双网卡的时候一定要使用它来指定eth0 or eth1。

【最近新添加 -R】

对于 -R参数,其实也很重要,在关闭udhcpc时,可以向dhcpserver发送release取消租约。

#will dhcpc

while [ -z "$temp" ]

do

sleep 5

udhcpc -n>/app/var/dhcp.log

temp=`cat /app/var/dhcp.log | grep "obtained, lease time"`

done

udhcpc (v1.13.4) started

Sending discover...

Sending discover...

Sending discover...

No lease, failing

udhcpc (v1.13.4) started

Sending discover...

Sending discover...

Sending discover...

No lease, failing

udhcpc (v1.13.4) started

Sending discover...

Sending discover...

Sending discover...

No lease, failing

udhcpc (v1.13.4) started

Sending discover...

Sending discover...

Sending select for 1.1.1.100...

Lease of 1.1.1.100 obtained, lease time 86400

deleting routers
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: