交叉編譯DHCP4.2.5:使得WIFI網卡動態獲取IP


dhcp-4.2.5-P1.tar.gz 下載鏈接:https://www.isc.org/downloads/

編譯安裝DHCP

cd  /root/wifi
tar -xvf dhcp-4.2.5-P1.tar.gz
cd dhcp-4.2.5-P1
mkdir build

1)配置編譯選項

./configure --host=arm-linux ac_cv_file__dev_random=yes

2)修改bind目錄下Makefile

cd bind
vim Makefile

在configure后加上如下幾項:

BUILD_CC=gcc ac_cv_file__dev_random=yes --host=arm-linux

修改完成如下所示:

 3)解壓bind.tar.gz並修改相關文件

tar -xvf bind.tar.gz 
cd bind-9.8.4-P2/
vim lib/export/dns/Makefile.in
gen: ${srcdir}/gen.c
        ${CC} ${ALL_CFLAGS} ${LDFLAGS} -o $@ ${srcdir}/gen.c ${LIBS}

改為:

gen: ${srcdir}/gen.c
        ${BUILD_CC} ${ALL_CFLAGS} ${LDFLAGS} -o $@ ${srcdir}/gen.c ${LIBS}

BUILD_CC為編譯機器的平台使用的編譯器,之所以為gcc是因為在交叉編譯dhcp時會生成一些中間文件,需要在編譯機器上運行,編譯機器為x86_64平台,所以BUILD_CC=gcc。

4)編譯安裝

cd ../..
make
make DESTDIR=$PWD/build install

這時 ls build/usr/local/ 顯示如下:

bin  etc  include  lib  sbin  share

把build/usr/local/bin目錄下的所有內容拷貝到開發板的/bin目錄下;

把build/usr/local/sbin目錄下的所有內容拷貝到開發板的/sbin目錄下;

把build/usr/local/etc/dhclient.conf.example拷貝到開發板並重命名/etc/dhclient.conf;

把build/usr/local/etc/dhcpd.conf.example拷貝到開發板並重命名/etc/dhcpd.conf;

把client/scripts/linux拷貝到開發板並重命名為/etc/dhclient-script ,執行一下命令給dhclient-script加上可執行權限:chmod +x /etc/dhclient-script,並修改#!/bin/bash為#!/bin/sh。

DHCP使用

mkdir -p /var/db
wpa_supplicant -B -c/etc/wpa_wpa2.conf  -iwlan0

使用 wpa_cli -iwlan0 status查看wifi的連接狀態,wpa_state=COMPLETED表示連接完成。

使用以下命令:

dhclient wlan0

動態獲取wifi的IP地址。

一接入WIFI網卡,自動執行wpa_supplicant和獲取IP

1) 添加mdev規則文件

vi /etc/mdev.conf 

mdev.conf內容如下:

wlan0 0:0 777 * /sbin/auto_wifi.sh

auto_wifi.sh腳本的內容如下:

#!/bin/sh
if [ $ACTION = "add" ];
then                                              
   wpa_supplicant -B -c/etc/wpa_wpa2.conf  -iwlan0
   wpa_cli -a/sbin/wpa_action.sh -B
else                     
   killall wpa_supplicant
   killall wpa_cli 
   killall dhclient
fi

然后執行chmod +x /sbin/auto_wifi.sh給腳本加上可執行權限。

2)一連接上WIFI AP, 就自動執行dhclient

創建腳本/sbin/wpa_action.sh:

#!/bin/sh
IFNAME=$1
CMD=$2
if [ "$CMD" = "CONNECTED" ]; then
   echo connect $IFNAME, dhclient for it > /dev/console
   dhclient $IFNAME
fi
if [ "$CMD" = "DISCONNECTED" ]; then
   echo disconnect $IFNAME, kill dhclient for it > /dev/console
   killall dhclient
fi

執行chmod +x /sbin/wpa_action.sh給腳本加上可執行權限。

這樣的話,開發板一接入WIFI網卡,就會自動連接熱點,並給wlan0自動分配好IP地址。

3)網絡連通性測試

/ # cat /etc/resolv.conf
search fugue.com. home.vix.com.
nameserver 127.0.0.1
nameserver 192.168.1.1
nameserver 192.168.0.1

查看/etc/resolv.conf,發現DNS也自動配置好了。

ping外網測試:

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM