2024年1月18日发(作者:)

DHCP客户端程序移植笔记(全)

DHCP程序运行与调试

实现的目标:

开机时自动获取IP地址,假设没有可用的IP地址,选用autoip;或者选用静态配置的ip

地址。

DHCP客户端程序有多种,本系统选用的busybox下的dhcpc。 [1]修改内核配置;在内核中添加以下选项:

Networking ---Packet socket //添加.配置CONFIG_PACKET

[ * ] IP: DHCP support //添加

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

置CONFIG_NETFILTER

?--- Network packet filtering framework (Netfilter)

说明:假设没选Packet socket, [ * ] Network packet filtering

(replaces ipchains)--;选项,在

执行udhcpc命令时出现如下错误:

~ # udhcpc

学海无涯,书山有路

1

udhcpc (v-pre) started

udhcpc[208]: udhcpc (v-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配置,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_文件

解压后修改Makefile文件

在19行添加CROSS_COMPILE=arm-linux-

注释12行的COMBINED_BINARY=1,否那么不生成udhcpc命令 [3]运行程序:

up-tech:/sbin #./udhcpc

udhcpc (v1.15.3) started

Sending select for 192.168.

Sending select for 192.168.

Lease of 192.168.1.101 obtained, lease time 7200

[4]将busybox目录下:examples/udhcp/拷贝到根目录文件夹

/usr/share/udhcpc/。覆盖掉原始文件。重新制作根目录。

从busybox的examples/udhcp/下copy 文件到开发板/usr/share/udhcpc/下,

并重命名为,udhcp_中也有这样的文件。 修改ip没有成功!

up-tech:/sbin #./udhcpc

学海无涯,书山有路

2

udhcpc (v1.15.3) started

Setting IP address 0.0.0.0 on eth0

1/usr/share/udhcpc/: line 45: ifconfig: not

found

Sending select for 192.168.

Lease of 192.168.1.101 obtained, lease time 7200

Setting IP address 192.168.1.101 on eth0

2/usr/share/udhcpc/: line 45: ifconfig: not

found

Deleting routers

3/usr/share/udhcpc/: line 45: route: not found

Adding router 192.168.1.1

create /etc/-872: 根文件系统不能创建 。在开法板的/etc目录下

可以找到文件。 错误原因在于CromFS是只读文件系 4/usr/share/udhcpc/: line 45: route: not found 统,不能创建和修改文

Recreating /etc/

5/usr/share/udhcpc/: line 45: can't create

/etc/-872: Rm

6/usr/share/udhcpc/: line 45: can't create

/etc/-872: Rm

Adding DNS server 192.168.1.1

7/usr/share/udhcpc/: line 45: can't create

/etc/-872: Rm

8mv: cannot rename '/etc/-872': No such file or

directory

env查看环境变量PATH=5678:

学海无涯,书山有路

3

件。

修改方法:加载yaffs文件系统,将需要读写的文件改成可读写方式。

先不修改。

[5]修改环境变量~

up-tech:~ #echo $PATH

/bin:/sbin:/usr/bin:usr/sbin:/usr/bin:/usr/sbin 运行DHCPC客户端程序;

up-tech:~ #udhcpc

udhcpc (v1.15.3) started

Setting IP address 0.0.0.0 on eth0

Sending select for 192.168.

Lease of 192.168.1.101 obtained, lease time 7200

/usr/share/udhcpc/: line 45: can't create

/etc/-871: Rm

Setting IP address 192.168.1.101 on eth0

Deleting routers

route: SIOCDELRT: No such process

Adding router 192.168.1.1

Recreating /etc/

/usr/share/udhcpc/: line 45:

/etc/-871: Rm

/usr/share/udhcpc/: line 45:

/etc/-871: Rm

Adding DNS server 192.168.1.1

学海无涯,书山有路

mv: cannot rename '/etc/-871': No such file or

directory 查看ip地址是否修改成功;

up-tech:~ #ifconfig

eth0 Link encap:Ethernet HWaddr 08:00:3E:26:0A:5B

inet addr:192.168.1.101 Bcast:192.168.1.255

Mask:255.255.255.0

UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1

can't create RX packets:236 errors:0 dropped:0 overruns:0 frame:0

TX packets:2 errors:0 dropped:0 overruns:0 carrier:0

can't create

collisions:0 txqueuelen:1000

RX bytes:19801 (19.3 KiB) TX bytes:1180 (1.1 KiB)

4

Interrupt:18 Base address:0xe000 DMA chan:ff

lo Link encap:Local Loopback

inet addr:127.0.0.1 Mask:255.0.0.0

UP LOOPBACK RUNNING MTU:16436 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)

[6]开发板直接与PC机连接

up-tech login: root

id: applet not found

-bash: [: -eq: unary operator expected

学海无涯,书山有路

id: applet not found

up-tech:~ #ifconfig

eth0 Link encap:Ethernet HWaddr 08:00:3E:26:0A:5B

inet addr:192.168.0.195 Bcast:192.168.0.255

UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1

RX packets:34 errors:0 dropped:0 overruns:0 frame:0

TX packets:0 errors:0 dropped:0 overruns:0 carrier:0

collisions:0 txqueuelen:1000

RX bytes:3581 (3.4 KiB) TX bytes:0 (0.0 B)

Interrupt:18 Base address:0xe000 DMA chan:ff

lo Link encap:Local Loopback

inet addr:127.0.0.1 Mask:255.0.0.0

UP LOOPBACK RUNNING MTU:16436 Metric:1

RX packets:0 errors:0 dropped:0 overrun

TX packets:0 errors:0 dropped:0 overruns:0 carrier:0

collisions:0 txqueuelen:0

5

RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)

up-tech:~ #udhcpc

udhcpc (v1.15.3) started

Setting IP address 0.0.0.0 on eth0

学海无涯,书山有路

假设使用DHCP,会修改原始的IP地址;注意问题:DHCP获取不到的话,原始的IP 设

置也会被修改。

up-tech:~ #ifconfig

eth0 Link encap:Ethernet HWaddr 08:00:3E:26:0A:5B

UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1

TX packets:9 errors:0 dropped:0 overruns:0 carrier:0

collisions:0 txqueuelen:1000

RX bytes:6307 (6.1 KiB) TX bytes:5310 (5.1 KiB)

6

Interrupt:18 Base address:0xe000 DMA chan:ff

lo Link encap:Local Loopback

udhcpc (v1.15.3) started

Setting IP address 0.0.0.0 on eth0

inet addr:127.0.0.1 Mask:255.0.0.0

UP LOOPBACK RUNNING MTU:16436 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)

[7]文件系统的只读性问题。有两种解决方式,一种,将mtbblock3挂载到/etc下,mtbblock3是yaffs文件系统。

up-tech:~ #mount -t yaffs /dev/mtdblock3 /etc/

up-tech:~ #udhcpc

学海无涯,书山有路

7

第二种方式,开发板已经把mtbblock3挂载到来root目录下来,修 Sending select for 192.168.

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/

Adding DNS server 192.168.1.1

up-tech:~ #cat /etc/

-n

search domain

nameserver 192.168.1.1

改运行文件的目标文件的位置。

#(1)修改文件的路径&/root/yaffs/&

#RESOLV_CONF=&/etc/&

RESOLV_CONF=&/root/yaffs/&

启动开发板,在/root/yaffs/新建文件;

up-tech:/ #udhcpc

udhcpc (v1.15.3) started

Setting IP address 0.0.0.0 on eth0

Sending select for 192.168.

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 /root/yaffs/

Adding DNS server 192.168.1.1

学海无涯,书山有路

DHCP程序运行与调试

实现的目标:

开机时自动获取IP地址,假设没有可用的IP地址,选用autoip;或者选用静态配置的ip

地址。

DHCP客户端程序有多种,本系统选用的busybox下的dhcpc。 [1]修改内核配置;在内核中添加以下选项:

Networking ---Packet socket //添加.配置CONFIG_PACKET

[ * ] IP: DHCP support //添加

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

置CONFIG_NETFILTER

?--- Network packet filtering framework (Netfilter)

说明:假设没选Packet socket, [ * ] Network packet filtering

(replaces ipchains)--;选项,在

执行udhcpc命令时出现如下错误:

~ # udhcpc

udhcpc (v-pre) started

8

udhcpc[208]: udhcpc (v-pre) started

FATAL: couldn't listen on socket, Address family not supported

假设busybox没编译相应选项,也可从网上下载相应文件,用by protocol arm-linux交叉编译得到

udhcpc[208]: FATAL: couldn't listen on socket, Address family udhcpd,udhcpc命令copy到usr/sbin下就可以了。

not supported by protocol [2]修改busybox配置,Busybox中添加 我从网上下的udhcp_文件

以下选项: 解压后修改Makefile文件

Networking Utilities --; 在19行添加CROSS_COMPILE=arm-linux-

udhcp Server/Client --; 注释12行的COMBINED_BINARY=1,否那么不生成udhcpc命令 [] udhcp Server (udhcpd) //在此不作服务端,故不选。生成运行程序:

udhcpd命令 up-tech:/sbin #./udhcpc

[*] udhcp Client (udhcpc)//生成udhcpc命令 udhcpc (v1.15.3) started

[ ] Lease display utility (dumpleases)

[ ] Log udhcp messages to syslog (instead of stdout) Sending select for 192.168.

[ ] Compile udhcp with noisy debugging messages

学海无涯,书山有路

9

3] [