1.配置过程
1.1、配置Linux内核使能DHCP相关选项:
[*]Networking support -->
Networking support
Networking options -->
[*]Packet socket
[*]IP:kernel level autoconfiguration
[*] IP:DHCP support
[*]Network packet filtering framework(Netfilter) --> //下层子选项可不作配置
如下图:
1.2、配置Busybox,使能以下选项:
Networking Utilities
[*]udhcp server (udhcpd)
[*] dhcprelay
[*] Lease display utility (dumpleases)
[*]udhcp client (udhcpc)
[*] Verify that the offered address is free,using ARP ping
如下图:
配置内核时Networking options选中Packet socket和IP:DHCP support,make之后,在根文件系统usr下面建立/share/udhcpc/目录,将busybox目录下面的 example/udcp/simple.script拷贝到刚建立的目录下,但是要改名default.script.这样在进入shell后输入udhcpc命令就应该能够获得ip
udhcpd -s /etc/udhcpd.cfg
嵌入式系统下,用开发板建立dhcp服务器
1.重新编译内核,添加对dhcp的支持
2.busybox是否带有dhcp的应用,如无,则需要重新编译busybox,或者直接下一个独立的也可。
3.dhcp服务器在etc目录下的配置文件,udhcpd.conf 需要配置这个文件,包括分配的ip,dns等。
我的文件系统中直接具有dhcp的软件,分别为udhcpd和udhcpc,前者是服务器端的,后者是用作客户端的,这样就可以直接配置udhcpd.conf了。参考busybox中的examples,配置好udhcpd.conf,然后执行
udhcpd -fS /etc/udhcpd.conf
就可以启动dhcp服务器了,当然,中间也碰到了一个小问题,这时udhcpd在执行的时候提示没有一个叫做udhcpd.leases的文件,这个只要在相应的文件夹下直接创建以下即可。
一切顺利的话,就可以看到开发板为pc分配ip,gw和dns了!
///
**************dhcp
开发板上使用的udhcpc udhcpd两个工具都可以从busybox里面直接编译得来
PC上使用的dhcp工具可以使用 sudo apt-get install udhcpc
sudo apt-get install udhcpd
用PC做udhcpd服务器,开发板从PC获取ip(反过来是一样的)
PC上: sudo vi /etc/udhcpd.conf
udhcpd.conf在busybox里面有一个原型: busybox-1.14.2/examples/udhcp/udhcpd.conf
修改三个地方:start/end/option dns
start 192.168.4.200 #default: 192.168.0.20
end 192.168.4.254 #default: 192.168.0.254
//分配ip的区间
#Examles
opt dns 192.168.1.2 192.168.1.10
option subnet 255.255.255.0
opt router 192.168.1.2
opt wins 192.168.1.10
option dns 192.168.4.127 # appened to above DNS servers for a total of 3
option domain local
option lease 864000
//option dns 192.168.4.127做服务器的机器的ip地址
用网线把PC和开发板连接起来。
好了之后 sudo udhcpd
开发板上运行 udhcpc 这样就可以从PC获取ip
/
由于要使用网络通讯,所以不可避免的要用到dhcp。理想的网络通讯方式是下面3种都要支持:
1,接入已有网络。这便要求可以作为dhcp客户端。
2,作为DHCP服务器,动态分配IP。
3,指定固定IP
第3种情况没有什么好说的,简单说下前2种情况。
使用步骤:
(1)在内核的网络项里面把DHCP配置上;
(2)在busybox里面把
- udhcp server(udhcpd)
- udhcp client(udhcpc)都选上。
udhcpd就是终端设备作为DHCP服务器
udhcpc就是终端设备作为DHCP客户端
busybox里面对dhcp都已经给出例子了,
[zhh@localhost busybox-1.14.1]$ ls ./examples/udhcp/
sample.bound sample.deconfig sample.nak sample.renew sample.script simple.script udhcpd.conf
比如使用udhcpc时
就可以直接把simple.script拿来使用,改不改名字都可以,busybox里面默认的目录文件是/usr/share/udhcpc/default.script
可以查看下帮助
# udhcpc --help
BusyBox v1.14.1 (2010-01-22 10:35:16 CST) multi-call binary
Usage: udhcpc [-Cfbnqtvo] [-c CID] [-V VCLS] [-H HOSTNAME] [-i INTERFACE]
[-p pidfile] [-r IP] [-s script] [-O dhcp-option]... [-P N]
-V CLASSID Vendor class identifier
-i INTERFACE Interface to use (default: eth0)
-H,-h HOSTNAME Client hostname
-c CLIENTID Client identifier
-C Suppress default client identifier
-p file Create pidfile
-r IP IP address to request
-s file Run file at DHCP events (default /usr/share/udhcpc/default.script)
-t N Send up to N request packets
-T N Try to get a lease for N seconds (default 3)
-A N Wait N seconds (default 20) after failure
-O OPT Request DHCP option OPT (cumulative)
-o Do not request any options (unless -O is also given)
-f Run in foreground
-b Background if lease is not immediately obtained
-S Log to syslog too
-n Exit with failure if lease is not immediately obtained
-q Quit after obtaining lease
-R Release IP on quit
-P N Use port N instead of default 68
-a Use arping to validate offered address
#
这样就很好理解了。
下面就说说使用udhcpd,同样可以直接把busybox自带的udhcpd.conf作为参考,怎么设置该文件就不详述了,去参考相关文档即可。看看udhcpd怎么使用
# udhcpd --help
BusyBox v1.14.1 (2010-01-22 10:35:16 CST) multi-call binary
Usage: udhcpd [-fS] [-P N] [configfile]
DHCP server
-f Run in foreground
-S Log to syslog too
-P N Use port N instead of default 67
帮助一目了然。
我使用的时候直接
#udhcpd /etc/udhcpd.conf
即可。
还有一个租约文件要简要说说,使用udhcpd时会要求建立一个租约文件,按照提示创建一个就行了,它起什么作用呢?就是为了记录客户端所获得的IP,如果没有租约文件,则会重新给客户端分配一个新IP,如果有,则使用原先分配的IP。//
嵌入式Linux系统下使用DHCP,为开发板自动分配IP地址