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] [


发布评论