您的位置:首页 > 其它

编译内核,让开发板支持自动获取IP地址(使用DHCP)

2013-01-06 14:03 417 查看
由于要使用网络通讯,所以不可避免的要用到dhcp。理想的网络通讯方式是下面3种都要支持:
1,接入已有网络。这便要求可以作为dhcp客户端,自动获取Ip。
2,作为DHCP服务器,动态分配IP。
3,指定固定IP
第3种情况没有什么好说的,简单说下前2种情况。
使用步骤:
(1)在内核的网络项里面把DHCP配置上,
Networking --->

[*] Networking support --->

Networking options --->

<*> Packet socket //添加.配置CONFIG_PACKET
[ * ] IP: DHCP support //添加

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

<*> Unix domain sockets

[*] TCP/IP networking

[*] IP: kernel level autoconfiguration

[*] IP: DHCP support

[*] Network packet filtering framework (Netfilter) --->

说明:若没选 Packet socket, [ * ] Network packet filtering (replaces ipchains) --->选项,在执行udhcpc命令时出现如下错误:

[root@(none) /]# udhcpc -f

udhcpc (v1.13.2) started

eth0: link up, 100Mbps, full-duplex, lpa 0x41E1

udhcpc: socket: Address family not supported by protocol

(2)在busybox里面添加以下选项:
[*]udhcp server(udhcpd)
[*]udhcp client(udhcpc)都选上。
udhcpd就是终端设备作为DHCP服务器
;udhcpc就是终端设备作为DHCP客户端
若busybox没编译相应选项,也可从网上下载相应文件,用arm-linux交叉编译得到udhcpd,udhcpc命令copy到usr/sbin下就可以了。

1>编译Busybox,使make menuconfig,添加以下选项:

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命令。

注:使用0.9.8版本的udhcp貌似也不行,重新编译Busybox1.9.2版本。

2>从Busybox的examples/udhcp/下copy simple.script文件到开发板/usr/share/udhcpc/下,并重命名为default.script(udhcp_0.9.8cvs20050303.orig.tar.gz中也有这样的文件),然后更改文件default.script的权限,chmod u+x default.script。

修改default.script中RESOLV_CONF="/etc/resolv.conf"为RESOLV_CONF="/tmp/resolv.conf"

3>将生成的udhcpc复制到开发板/sbin下,重启开发板,执行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
但是有个问题,开发板可以获得IP地址,在路由器里也可以看到分配地址了,问题是一使用PING命令,不管是PC 机PING 开发板,还是开发板PING PC 机,就会造成开发板死机。试了好多方法,检查ROUTE,检查ARP,修改Default.script ,始终无法解决。

如果是双网卡必须用参数指明

例:udhcpc -i eth1

(3)测试:

在命令行执行udhcpc命令,注意:必须确保局域网内存在DHCP服务器,否则udhcp执行失败。

执行结果如下:

udhcpc (v1.15.2) started

Setting IP address 0.0.0.0 on eth0

Sending discover...

Sending select for 192.168.1.101...

Lease of 192.168.1.101 obtained, lease time 7200

Setting IP address 192.168.1.101 on eth0

Deleting routers

route: SIOCDELRT: No such process

Adding router 192.168.1.1

Recreating /etc/resolv.conf

Adding DNS server 211.148.192.141

Adding DNS server 210.21.196.6

(4)修改系统初始化配置文件,让开发板开机后自动获取IP地址:

修改/etc/init.d/rcS文件在适当位置添加命令: /sbin/udhcpc &
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: