前几篇博客中,wifi无线网卡都工作于STA模式,那么它能否工作于AP模式。本篇博客就研究使wifi 无线网卡工作于AP模式。
使用一个应用程序hostapd,关于它的介绍可以去此网站https://wireless.wiki.kernel.org/en/users/documentation/hostapd了解一下。
1.1 下载源码  :http://w1.fi/hostapd/

1.2 编译、安装

tar xzf hostapd-2.0.tar.gz
cd hostapd-2.0/
cd hostapd/
cp defconfig .config
修改.config, 加一行: CONFIG_LIBNL32=y
修改Makefile:
CC=arm-linux-gcc
make
make DESTDIR=$PWD/tmp install

把生成的hostapd hostapd_cli复制到NFS的bin目录

1.3 使用hostapd的配置文件以支持 :WPA/WPA2

1.3.1 使用hostapd的配置文件
#change wlan0 to your wireless device
interface=wlan0 //指定使用哪一个网卡
driver=nl80211 //指定使用哪一个驱动
ssid=s3c2440 //AP的名字是什么
channel=1

# 认证/加密方式
macaddr_acl=0 //用来控制mac地址的过滤。
auth_algs=1
ignore_broadcast_ssid=0
wpa=3
wpa_passphrase=baiwenwang
wpa_key_mgmt=WPA-PSK
wpa_pairwise=TKIP
rsn_pairwise=CCMP

把配置文件存为/etc/myhostapd.conf
启动 hostapd: hostapd -B /etc/myhostapd.conf

ps 可以查看一下,将会看到下面的这个进程在运行了。
hostapd -B /etc/myhostapd.conf
用手机看一下,能否使用wifi 网卡这个AP。即手机处于STA模式,wifi 网卡处于AP模式。

打开手机,将会观察到s3c244o这个AP已经存在了,但是连接后,会出现一种现象:

正在获取ip地址(一直这样),这个ip是从AP上获取,即从s3c2440上面去获取。一直获取不到的原因是什么呢?

需要我们在开发板上开启一个dhcpd的服务,让它给STA设备(在这里就指手机)分配ip。

1.3.2  启动dhcpd服务

修改配置文件/etc/dhcpd.conf,添加:
subnet 192.168.1.0 netmask 255.255.255.0 {
  range 192.168.1.10 192.168.1.100;
  option domain-name-servers 192.168.1.1;
  option routers 192.168.1.1;
}

此时如果直接运行dhcpd -cf /etc/dhcpd.conf wlan0,会出现下面的问题:
can't open lease database /var/db/dhcpd.lease: No such file or directory

创建空文件/var/db/dhcpd.leases:
> /var/db/dhcpd.leases  //命令 >就表示生成一个文件,里面的内容是空的。

再次运行dhcpd -cf /etc/dhcpd.conf wlan0,会出现下面的问题:
No subnet declaration for wlan0(no IPv4 address),没有给wifi网卡配置IP地址。

ifconfig wlan0 192.168.1.1
dhcpd -cf /etc/dhcpd.conf wlan0

此时再来实验一下,利用手机能否连接上wifi 网卡这个AP。

正在从s3c244o获取IP地址---->已连接到s3c2440

ping 192.168.1.10(利用wifi 网卡去ping 手机),是可以ping的通的。

问题:怎么确定处于STA模式的设备(在此处指的是手机)ip地址是192.168.1.10呢?

在/etc/dhcpd.conf文件中已经指定了,处于STA模式的设备的ip地址范围:range 192.168.1.10 192.168.1.100;

这和常识正好对应起来,一个AP可以被很多处于STA模式的设备所连接。

1.3.3 能否用命令来查看有多少个客户端连接到wifi 网卡这个AP呢?

执行:hostapd_cli
could not connect to hostapd -re-trying
配置文件中还缺少这些一些内容。什么内容呢?
在利用wpa_supplicant这个工具时,wpa_supplicant与wpa_cli进行通信需要指定一个socket文件。
同样在这个地方也需要指定。hostapd与hostapd_cli是通过socket文件进行通信的。如果不指定的话,hostapd_cli无法连接hostapd

修改 hostapd的配置文件

ctrl_interface=/var/run/hostapd
#change wlan0 to your wireless device
interface=wlan0
driver=nl80211
ssid=S3C2440
channel=1

# 认证/加密方式
macaddr_acl=0
auth_algs=1
ignore_broadcast_ssid=0
wpa=3
wpa_passphrase=baiwenwang
wpa_key_mgmt=WPA-PSK
wpa_pairwise=TKIP
rsn_pairwise=CCMP

hostapd_cli 进入交互模式:

all_sta  看一下有多少个STA连接到了AP。

会显示MAC地址等信息,但是在这个地方是看不到ip的。ip在哪看呢?

在 var/db/dhcpd.leases中会看到它的ip。
在这个文件中,可以通过它的mac地址,去查找它的ip地址。

1.4 OPEN方式的配置文件
ctrl_interface=/var/run/hostapd
#change wlan0 to your wireless device
interface=wlan0
driver=nl80211
ssid=S3C2440
channel=1

# 认证/加密方式
macaddr_acl=0
auth_algs=1
ignore_broadcast_ssid=0

1.5 WEP方式的配置文件
ctrl_interface=/var/run/hostapd
#change wlan0 to your wireless device
interface=wlan0
driver=nl80211
ssid=S3C2440
channel=1

# 认证/加密方式
macaddr_acl=0
auth_algs=2
ignore_broadcast_ssid=0
wep_key0="baiwenwang123"
wep_default_key=0

1.6 修改/etc/mdev.conf自动启动AP模式
cat /etc/mdev.conf
wlan0 0:0 777 * /sbin/auto_wifi_ap.sh

cat /sbin/auto_wifi_ap.sh
#!/bin/sh
if [ $ACTION = "add" ];
then
  hostapd -B /etc/myhostapd.conf
  ifconfig wlan0 192.168.1.1
  dhcpd -cf /etc/dhcpd.conf wlan0
else
  killall hostapd
  killall dhcpd
fi

注意事项:
对于包含了AR9271网卡驱动的内核,有一个问题:
在上电之前就接上了网卡,那么系统启动后无法识别出这个网卡。
解决方法:
1.上电后再接网卡
2.把驱动编译为模块,当系统启动后再insmod: 可以在上电之前就接网卡

可能原因:ath9k_htc.ko要用到固件, 但是固件要到根文件系统被挂载后才能访问

使用WIFI网卡的AP功能的更多相关文章

  1. 使用wifi网卡笔记5---AP模式

    使用WIFI网卡的AP功能 1.下载源码 hostapd: http://w1.fi/hostapd/ 2.编译.安装(hostapd依赖于libnl库,需要编译.安装此库) tar xzf host ...

  2. 3.1 wifi网卡RT3070在S3C2440的移植和使用

    学习目标:熟悉RT3070在S3C2440的移植和使用,以及其中的相关工具的安装和使用: 一.配置内核选择WIFI驱动 1. 将usb wifi插到电脑,在ubuntu使用命令:# lsusb 查看w ...

  3. 34、JZ2440上WIFI网卡使用

    :http://wireless.kernel.org在这个网站上的document中有下面说有内容的介绍 1. 准备工作(虚拟机,开发板)及配置内核选择WIFI驱动1.1 选型:确定网卡的VID,P ...

  4. 使用wifi网卡笔记4---工具dhcp及全自动使用wifi

    dhcp : 使得WIFI网卡动态获取IP ·1.源码获取 输入dh看有哪些应用程序,输入dhclient -v查看一下相关信息,源码获取的网址 2.开发环境配置 解压 tar xzf dhcp-4. ...

  5. 使用WIFI网卡 wpa_supplicant

    在上篇文章中,编译了应用程序iw,它使得我们的开发板可以通过usb wifi网卡连接到无线热点,为了方便实验,我们采用了手机设置了无线热点.对手机的热点有4中安全方式:无WEPWPAWPA2使用iw工 ...

  6. 不止是联网!教你玩转PC自带Wi-Fi网卡

    前言:Wi-Fi对于现在的智能手机来说已经是再熟悉不过的配置了,而主板自带Wi-Fi网卡的设计也越来越普及,但有些玩家可能思维还停留在“Wi-Fi网卡 = 连无线网络用的网卡,我用有线就不需要”的层次 ...

  7. 使用wifi网卡笔记2----概念及工具iw(STA模式)

    1.认证和加密的概念 (1)概念 (2)阶段划分 初级版本:认证不需要密码, 传输不需要加密 认证不需要密码, 传输需要加密(用WEP算法) 认证需要密码(用WEP算法), 传输需要加密(用WEP算法 ...

  8. 使用wifi网卡笔记1----网卡选型、开发环境搭建、内核配置

    1.wifi的STA模式和AP模式 Ap(Access Point)模式指的是可以将网卡设置为路由器用来共享流量或有线网络给别人使用, sta模式指的是当做网卡连接路由器上网 (1):AP也就是无线接 ...

  9. 使用WIFI网卡 dhcp动态获取IP

    前面几篇博客中,wifi网卡的ip都是手工设置的,本篇博客将来移植dhcp,使得wifi网卡可以动态的获取ip.路由等信息. 那我们去哪里下载dhcp源码呢?在pc机上执行dh +tab键,看一下有哪 ...

随机推荐

  1. DVWA XSS (DOM) 通关教程

    DOM,全称Document Object Model,是一个平台和语言都中立的接口,可以使程序和脚本能够动态访问和更新文档的内容.结构以及样式. DOM型XSS其实是一种特殊类型的反射型XSS,它是 ...

  2. Codeforces 652F 解题报告

    题意 有n只蚂蚁在长度为m个格子的环上,环上的格子以逆时针编号,每只蚂蚁每秒往它面向的方向移动一格.如果有两只蚂蚁相撞则相互调换方向,问t秒后每只蚂蚁的位置. 题解 首先通过观察可以发现 蚂蚁相撞产生 ...

  3. java while 循环

    public class Sample { public static void main(String[] args) { ; ) { System.out.print(num + " & ...

  4. 【报名中】【5G探索】深度揭秘5G核心技术与挑战,云+社区开发者大会北京站等你来!

    报名渠道(扫描下方二维码) 开发者专属福利 限量手办 现场幸运签到开发者即可获得,早到获奖几率更大 幸运抽奖 一等奖:1名 JBL LIVE650 BTNC无线主动降噪智能耳机 二等奖:3名 JBL ...

  5. java OutOfMemorry

    首先需要明确OOM并不一定会导致程序挂掉,导致服务不可用的是堆内存被耗尽,从而使得主线程直接退出,或者所有工作线程频繁因为OOM异常终止,java分配数组会直接消耗内存,一个对象引用会占用四个字节. ...

  6. Windows10 64位部署odoo12开发环境

    预装Windows10 64位家庭版电脑一台 2019年7月 安装Python,这里的版本选择上有个坑,不要装最新的Python 3.7.x,原因是odoo12依赖pillow 4.0.0库,而这个4 ...

  7. JavaScript 内存回收机制

    引用 垃圾回收算法主要依赖引用的概念,例如一个对象如果有另外一个对象的访问权限,这里就叫做一个对象引用另外一个对象,不论这里是显式还是隐式 回收机制 Js具有自动垃圾回收机制.垃圾收集器会按照固定的时 ...

  8. update改数据详解

    update修改数据的要素  : 改哪张表? 改哪几列的值? 分别改成什么值? 在哪些行生效?(这个很重要,否则所有行都会受影响) mysql> update class ; where 表达式 ...

  9. github 白嫖记(一)

    位运算 按位操作符:0或者1之间的运算 a|b 或 任意一个为1结果为1 console.log(0 | 1) //1 console.log(1 | 0) //1 console.log(1 | 1 ...

  10. 微信小程序练习笔记(更新中。。。)

    微信小程序练习笔记 微信小程序的练习笔记,用来整理思路的,文档持续更新中... 案例一:实现行的删除和增加操作  test.js // 当我们在特定方法中创建对象或者定义变量给与初始值的时候,它是局部 ...