嵌入式linux中的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 client(udhcpc)都選上。
udhcpd就是終端裝置作為DHCP伺服器
udhcpc就是終端裝置作為DHCP客戶端
busybox裡面對dhcp都已經給出例子了,
[
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。