DHCP程序运行与调试实现的目标:开机时自动获取IP地址,若没有可用的IP地址,选用autoip;或者选用静态配置的ip 地址。
DHCP客户端程序有多种,本系统选用的busybox下的dhcpc。
[1]修改内核配置;在内核中添加以下选项:Networking --->[*] Networking supportNetworking 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命令时出现如下错误:~ # udhcpcudhcpc (v-pre) startedudhcpc[208]: udhcpc (v-pre) startedFATAL: couldn't listen on socket, Address family not supported by protocoludhcpc[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 #./udhcpcudhcpc (v1.15.3) startedSending 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 #./udhcpcudhcpc (v1.15.3) startedSetting IP address 0.0.0.0 on eth0<1>/usr/share/udhcpc/default.script: line 45: ifconfig: not foundSending discover...Sending select for 192.168.1.101...Lease of 192.168.1.101 obtained, lease time 7200Setting IP address 192.168.1.101 on eth0<2>/usr/share/udhcpc/default.script: line 45: ifconfig: not foundDeleting routers<3>/usr/share/udhcpc/default.script: line 45: route: not foundAdding router 192.168.1.1<4>/usr/share/udhcpc/default.script: line 45: route: not foundRecreating /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: RmAdding 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 directoryenv查看环境变量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/sbinline29,line30# Bluez bin/libexport LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/opt/bluez/libexport PATH=$PATH:/opt/bluez/bin:/opt/bluez/sbin改成# Bluez bin/libexport LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/libexport 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:~ #udhcpcudhcpc (v1.15.3) startedSetting IP address 0.0.0.0 on eth0Sending discover...Sending select for 192.168.1.101...Lease of 192.168.1.101 obtained, lease time 7200Setting IP address 192.168.1.101 on eth0Deleting routersroute: SIOCDELRT: No such processAdding router 192.168.1.1Recreating /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: Rmmv: cannot rename '/etc/resolv.conf-871': No such file or directory 查看ip地址是否修改成功;up-tech:~ #ifconfigeth0 Link encap:Ethernet HWaddr 08:00:3E:26:0A:5Binet addr:192.168.1.101 Bcast:192.168.1.255 Mask:255.255.255.0UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1RX packets:236 errors:0 dropped:0 overruns:0 frame:0TX packets:2 errors:0 dropped:0 overruns:0 carrier:0collisions:0 txqueuelen:1000RX bytes:19801 (19.3 KiB) TX bytes:1180 (1.1 KiB)Interrupt:18 Base address:0xe000 DMA chan:fflo Link encap:Local Loopbackinet addr:127.0.0.1 Mask:255.0.0.0UP LOOPBACK RUNNING MTU:16436 Metric:1RX packets:0 errors:0 dropped:0 overruns:0 frame:0TX packets:0 errors:0 dropped:0 overruns:0 carrier:0collisions:0 txqueuelen:0RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)[6]开发板直接与PC机连接up-tech login: rootid: applet not found-bash: [: -eq: unary operator expectedid: applet not foundup-tech:~ #ifconfigeth0 Link encap:Ethernet HWaddr 08:00:3E:26:0A:5Binet addr:192.168.0.195 Bcast:192.168.0.255UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1RX packets:34 errors:0 dropped:0 overruns:0 frame:0TX packets:0 errors:0 dropped:0 overruns:0 carrier:0collisions:0 txqueuelen:1000RX bytes:3581 (3.4 KiB) TX bytes:0 (0.0 B)Interrupt:18 Base address:0xe000 DMA chan:fflo Link encap:Local Loopbackinet addr:127.0.0.1 Mask:255.0.0.0UP LOOPBACK RUNNING MTU:16436 Metric:1RX packets:0 errors:0 dropped:0 overrunTX packets:0 errors:0 dropped:0 overruns:0 carrier:0collisions:0 txqueuelen:0RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)up-tech:~ #udhcpcudhcpc (v1.15.3) startedSetting IP address 0.0.0.0 on eth0Sending discover...Sending discover...Sending discover...Sending discover...Sending discover...Sending discover...Sending discover...Sending discover...Sending discover...若使用DHCP,会修改原始的IP地址;注意问题:DHCP获取不到的话,原始的IP 设置也会被修改。