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

由于要使用网络通讯,所以不可避免的要用到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 &

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值