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

更新时间:2023-05-22 21:52:01 阅读量: 实用文档 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

DHCP程序运行与调试

实现的目标:

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

地址。

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

Networking --->

[*] Networking support

Networking options--->

<* > 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

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_cvs20050303.orig.tar.gz文件

解压后修改Makefile文件

在19行添加CROSS_COMPILE=arm-linux-

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

up-tech:/sbin #./udhcpc

udhcpc (v1.15.3) started

Sending discover...

Sending select for 192.168.1.102...

Sending discover...

Sending select for 192.168.1.101...

Lease of 192.168.1.101 obtained, lease time 7200

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

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

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

并重命名为default.script,udhcp_cvs20050303.orig.tar.gz中也有这样的文件。 修改ip没有成功!

up-tech:/sbin #./udhcpc

udhcpc (v1.15.3) started

Setting IP address 0.0.0.0 on eth0

<1>/usr/share/udhcpc/default.script: line 45: ifconfig: not found

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

<2>/usr/share/udhcpc/default.script: line 45: ifconfig: not found

Deleting routers

<3>/usr/share/udhcpc/default.script: line 45: route: not found

Adding router 192.168.1.1

<4>/usr/share/udhcpc/default.script: line 45: route: not found

Recreating /etc/resolv.conf

<5>/usr/share/udhcpc/default.script: line 45: can't create /etc/resolv.conf-872: Rm

<6>/usr/share/udhcpc/default.script: line 45: can't create /etc/resolv.conf-872: Rm

Adding DNS server 192.168.1.1

<7>/usr/share/udhcpc/default.script: line 45: can't create /etc/resolv.conf-872: Rm

<8>mv: cannot rename '/etc/resolv.conf-872': No such file or directory

env查看环境变量PATH="/bin:/usr/bin:/opt/bluez/bin:/opt/bluez/sbin"

也可以通过echo $PATH 查看。

busybox生成的在/bin:/sbin:/usr/bin:/usr/sbin。在sbin下的命令都得不到执行。

修改:/etc/profile

将line4:

export PATH=/bin:/usr/bin: 改成

export PATH=/bin:/sbin:/usr/bin:usr/sbin

line29,line30

# Bluez bin/lib

export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/opt/bluez/lib

export PATH=$PATH:/opt/bluez/bin:/opt/bluez/sbin

改成

# Bluez bin/lib

export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/lib

export PATH=$PATH:/usr/bin:/usr/sbin

错误<5><6><7><8>:

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

可以找到resolv.conf文件。 错误原因在于CromFS是只读文件系统,不能创建和修改文

件。

修改方法:加载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 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

/usr/share/udhcpc/default.script: line 45: can't create /etc/resolv.conf-871: Rm

/usr/share/udhcpc/default.script: line 45: can't create /etc/resolv.conf-871: Rm

Adding DNS server 192.168.1.1

/usr/share/udhcpc/default.script: line 45: can't create /etc/resolv.conf-871: Rm

mv: cannot rename '/etc/resolv.conf-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

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

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

collisions:0 txqueuelen:1000

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

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

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

Sending discover...

Sending discover...

Sending discover...

Sending discover...

Sending discover...

Sending discover...

Sending discover...

Sending discover...

Sending discover...

若使用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)

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)

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

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

up-tech:~ #udhcpc

udhcpc (v1.15.3) 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 192.168.1.1

up-tech:~ #cat /etc/resolv.conf

-n

search domain

nameserver 192.168.1.1

第二种方式,开发板已经把mtbblock3挂载到来root目录下来,修改运行文件的目标文件的位置。

#(1)修改resolv.conf文件的路径"/root/yaffs/resolv.conf"

#RESOLV_CONF="/etc/resolv.conf"

RESOLV_CONF="/root/yaffs/resolv.conf"

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

up-tech:/ #udhcpc

udhcpc (v1.15.3) 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 /root/yaffs/resolv.conf

Adding DNS server 192.168.1.1

本文来源:https://www.bwwdw.com/article/cnh4.html

Top