dhcp链接wifi

1.先安装好wpa_supplicant安装包
1.1 先编译它的依赖libopenssl
tar xzf openssl-1.0.1d.tar.gz
cd openssl-1.0.1d/
./config shared no-asm –prefix= P W D / t m p M a k e f i l e : C C = a r m l i n u x g c c A R = a r m l i n u x a r (ARFLAGS) r
RANLIB= arm-linux-ranlib
NM= arm-linux-nm
MAKEDEPPROG= arm-linux-gcc

make
make install
安装:
把编译出来的头文件应该放入:
/usr/local/arm/4.3.2/arm-none-linux-gnueabi/libc/usr/include

把编译出来的库文件应该放入:
/usr/local/arm/4.3.2/arm-none-linux-gnueabi/libc/armv4t/lib

把编译出来的库文件应该放入NFS文件系统的lib目录:
/work/nfs_root/fs_mini_mdev_new/lib

1.2 要有一个配置文件.config
tar xzf wpa_supplicant-2.0.tar.gz
cd wpa_supplicant-2.0/wpa_supplicant/
cp defconfig .config
修改.config加上一行: CONFIG_LIBNL32=y
修改Makefile:
CC=arm-linux-gcc

make
make DESTDIR=$PWD/tmp install
//将应用程序复制到根文件系统里面去
cp wpa_supplicant/tmp/usr/local/sbin/* /work/nfs_root/fs_mini_mdev_new/bin

2.安装dhcp
2.1 编译、安装
tar xzf dhcp-4.2.5-P1.tar.gz
cd dhcp-4.2.5-P1
./configure –host=arm-linux ac_cv_file__dev_random=yes

cd bind
修改Makefile:
./configure BUILD_CC=gcc ac_cv_file__dev_random=yes –host=arm-linux –disable-kqueue

tar xzf bind.tar.gz
cd bind-9.8.4-P2
修改 lib/export/dns/Makefile.in
gen: s r c d i r / g e n . c {CC} A L L C F L A G S {LDFLAGS} -o @ {srcdir}/gen.c L I B S g e n : {srcdir}/gen.c
B U I L D C C {ALL_CFLAGS} L D F L A G S o @ s r c d i r / g e n . c {LIBS}
cd ../..
make DESTDIR=$PWD/tmp install
把文件复制到NFS
sudo cp bin/* /work/nfs_root/fs_mini_mdev_new/bin/
sudo cp sbin/* /work/nfs_root/fs_mini_mdev_new/sbin/
sudo cp etc/dhclient.conf.example //work/nfs_root/fs_mini_mdev_new/etc/dhclient.conf
sudo cp etc/dhcpd.conf.example //work/nfs_root/fs_mini_mdev_new/etc/dhcpd.conf

sudo cp client/scripts/linux /work/nfs_root/fs_mini_mdev_new/etc/dhclient-script
chmod +x /work/nfs_root/fs_mini_mdev_new/etc/dhclient-script

使用
wpa_supplicant -B -c/etc/wpa_wpa2.conf -iwlan0
dhclient wlan0
即可手动连上wifi,而且ip和dns都会自动分配好。

下面我们想要它自动连上wifi。
一连接上WIFI AP, 就自动执行dhclient
创建一脚本: /sbin/wpa_action.sh

!/bin/sh

IFNAME= 1 C M D = 2
if [ “ C M D = C O N N E C T E D ] ; t h e n e c h o c o n n e c t IFNAME, dhclient for it > /dev/console
dhclient I F N A M E / / a p d h c l i e n t f i i f [ CMD” = “DISCONNECTED” ]; then
echo disconnect $IFNAME, kill dhclient for it > /dev/console
killall dhclient
fi
修改脚本权限:chmod +x /sbin/wpa_action.sh
注意:当我们仅执行wpa_supplicant -B -c/etc/wpa_wpa2.conf -iwlan0 ;wpa_cli -a/sbin/wpa_action.sh –B,那么一连接上WIFI AP, 就自动执行dhclient

我们创建一个脚本,使其支持热拔插。
脚本:/etc/mdev.conf
内容如下:
wlan0 0:0 777 * /sbin/auto_wifi.sh
注意:
mdev.conf的格式:(见第二期热拔插)
: [<@|$|*> ]
*: 创建设备节点之后 和 删除设备节点之前 执行命令,即执行uto_wifi.sh这个脚本。
我们现在创建这个脚本:/sbin/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 (注意:这里是wpa_cli的另一种用法)
else
killall wpa_supplicant
killall wpa_cli
killall dhclient
fi
并修改其权限:chmod +x /sbin/auto_wifi.sh
注意:wpa_cli -a/sbin/wpa_action.sh –B表示在后台执行wpa_action.sh脚本,-B表示后台执行。
总结:当我们插上我们的WiFi模块后,会触发mdev执行mdev.conf,当它发现你是添加网卡的时候就会执行wpa_supplicant -B -c/etc/wpa_wpa2.conf -iwlan0
wpa_cli -a/sbin/wpa_action.sh –B(表示wifi网卡连接上ap就会执行wpa_action.sh脚本)
当断开这个ap的连接信号,就会给应用程序wpa_cli发一个事件,应用程序就会去执行脚本wpa_action.sh,从而killall dhclient。
如果我们直接拔掉wifi模块,就会执行auto_wifi.sh,直接
killall wpa_supplicant
killall wpa_cli
killall dhclient
他是不会触发wpa_cli程序的。
效果如下:
这里写图片描述
dns:
这里写图片描述

猜你喜欢

转载自blog.csdn.net/qq_34888036/article/details/80880590