dhcp : 使得WIFI网卡动态获取IP
·1、源码获取
输入dh看有哪些应用程序,输入dhclient -v查看一下相关信息,源码获取的网址
2、开发环境配置
解压tar xzf dhcp-4.2.5-P1.tar.gz
cd dhcp-4.2.5-P1
配置
./configure --host=arm-linux ac_cv_file__dev_random=yescd bind
修改Makefile:
//CC一般来说是gcc 或arm-linux-gcc,BUILD表示用此电脑(x86)编译,因而工具链是gcc
./configure BUILD_CC=gccac_cv_file__dev_random=yes --host=arm-linux --disable-kqueuetar xzf bind.tar.gz
cd bind-9.8.4-P2
file 命令是查看指定文件的信息,从上面可知gen文件是ARM 架构的,无法在PC上执行
修改 lib/export/dns/Makefile.in
因为Makefile来源于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}
编译
安装
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并修改
#!/bin/bash
改为
#!/bin/sh
在嵌入式里面,我们用的shell是bin/sh
3、使用
启动开发板,接上无线网卡
mkdir -p /var/db
//-B是指应用程序wpa_supplicant运行于后台,-c是指定配置文件, -i是指定网卡接口名
wpa_supplicant -B -c/etc/wpa_wpa2.conf -iwlan0
//让网卡eth0 自动获取ip地址和dns
dhclient wlan0
dhclient -h
显示帮助
man dhclient (搜索debug,查看debug信息)
显示帮助手册
dhclient 是自动配置网卡ip和dns使用的命令,
dhclient -d wlan0 -d用于显示一些信息 ifconfig -a 可以看到计算机上的网卡
route命令 本地 IP 路由表中显示和修改条目网络命令
cat etc/resolv.conf//里面存储的是域名服务器(可在ping的时候可根据ping的网址找到相应的IP地址)
(1)创建一脚本:
cat /sbin/wpa_action.sh
#!/bin/sh
IFNAME=$1 表示哪一个网卡
CMD=$2 CONNECTED或者DISCONNECTED,表示动作
if [ "$CMD" = "CONNECTED" ]; then
//把打印信息connect $IFNAME, dhclient for it显示到控制台
echo connect $IFNAME, dhclient for it > /dev/console
假若网卡是wlan0 ,执行dhclient wlan0
dhclient $IFNAMEfi
//脚本语言,对应if----fi,表示if 的结束语句
if [ "$CMD" = "DISCONNECTED" ]; then
echo disconnect $IFNAME, kill dhclient for it > /dev/console
杀掉名字为dhclient的进程
killall dhclientfi
例:
wpa_cli -iwlan0 disconnect表示断开链接
(2)修改脚本的可执行权限
chmod +x /sbin/wpa_action.sh
(3)执行以下命令
-a代表action,运行程序wpa_cli会一直运行于后台(-B是运行于后台的意思),当wpa_supplicant发现wifi网卡连接上AP后,就会给wpa_cli发一个事件(通过socket通信),wpa_cli就会执行脚本/sbin/wpa_action.sh
wpa_cli -a/sbin/wpa_action.sh -B
用PS命令查看进程
5、热拔插功能
一接入WIFI网卡,就自动执行wpa_supplicant等(查看wap_supplicant文件的ERADME文件了解使用功能)
参考第2期视频第28课热拔插(1)修改mdev.conf配置文件
cat /etc/mdev.conf
(2)编写脚本文件
cat /sbin/auto_wifi.sh (自动连接wifi的脚本文件)
#!/bin/sh
if [ $ACTION = "add" ]; 如果添加网卡的话
then
//-B是指应用程序wpa_supplicant运行于后台,-c是指定配置文件 -i是指定网卡接口名 wpa_supplicant -B -c/etc/wpa_wpa2.conf -iwlan0
-a代表action,运行程序wpa_cli会一直运行于后台(-B是运行于后台的意思),当wpa_supplicant发现wifi网卡连接上AP后,就会给wpa_cli发一个事件(通过socket通信),wpa_cli就会执行脚本/sbin/wpa_action.sh
else
killall wpa_supplicant
killall wpa_cli
killall dhclient
fi
(3)修改脚本属性
chmod +x /sbin/auto_wifi.sh