1、首先確認Linux核心編譯產生時選擇了DHCP Networking ---> Networking support Networking options ---> Packet socket //添加.配置CONFIG_PACKET [ * ] IP: DHCP support //添加 [ * ] Network packet filtering (replaces ipchains) ---> //添加,後面子選項可不選,配置CONFIG_NETFILTER 說明:若沒選 Packet socket, [ * ] Network packet filtering (replaces ipchains) --->選項,在執行udhcpc命令時出現如下錯誤: ~ # udhcpc udhcpc (v0.9.9-pre) started udhcpc[208]: udhcpc (v0.9.9-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,使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版本。 3、使用Busybox下的simple.script,/usr/share/udhcpc/下,並重新命名為default.script,修改default.script中RESOLV_CONF="/etc/resolv.conf"為RESOLV_CONF="/tmp/resolv.conf" 說明:從網上下了幾個default.script貌似無法使用,提示無法找到default.script檔案,使用上面的方法較好。由於使用Cramfs檔案系統,etc目錄不可寫,運行udhcp.c時會提示無法建立resolv.conf 4、將產生的udhcpc複製到開發板/sbin下,在控制台下運行udhcpc即可,很快就可以從DHCP SERVER獲得IP地址。但是有個問題,開發板可以獲得IP地址,在路由器裡也可以看到分配地址了,問題是一使用PING命令,不管是PC 機PING 開發板,還是開發板PING PC 機,就會造成開發板死機。試了好多方法,檢查ROUTE,檢查ARP,修改Default.script ,始終無法解決。 花了一整天時間,總算完全解決了。 1、先是懷疑busybox的問題,OK,開發板上原來移植的是1.9.2 版本,上網找找了發現最新有1.14.0 版本的,詳細移植見另一篇文章 2、Busybox1.9.2 版本貌似是有問題,udhcpc 之後,通過ifconfig 查看IP 資訊可以看到廣播位址Bcast有問題,始終是255.255.255.255,正確應該是192.168.1.255(網段為192.168.1),使用Busybox1.14.0就沒有這個問題了,但問題是PING 仍然無法使用。 3、偶然情況下發現udhcpc 之後需要關閉網卡,之後再重開網卡使用命令 ifconfig eth0 down ifconfig eht0 up 之後就能正常工作了,還有問題是無法PING本機,設定迴環地址就可以了 ifconfig lo 127.0.0.1 |