道阻且长,行则将至。埋头苦干,不鸣则已,一鸣惊人!加油,骚年!

Hello 大家好,我是小二,久违了!(PS:其实是最近加班太多了…)

上篇文章,我总结了 WiFi 连接路由的过程

本篇文章想分享一下 WiFi 开启热点的过程,也就是常说的 AP 模式。

1 参考资料

按照惯例,先呈上参考资料,这样可以先打开,再结合文章一块食用,体验更佳!

首先强烈推荐 周立功 网站提供的两个参考教程,详细介绍了 WiFi 模组使用方法。

其他地方也很难找到这么详细的教程

然后是我自己在网上找到的参考资料

最后,还有一些其他前辈的教程,十分感谢!

为了方便,本文代码采用两种方式展示,一种图片格式,方便阅读;一种源码格式,方便复制;请君按需取用~

2 环境介绍

1、Ubuntu18.04 ,不加密环境,版本信息如下:

详细记录丨Realtek RTL8188FU WiFi 开启热点_kernel

zhaoc@Ubuntu1804:~$ lsb_release -a
No LSB modules are available.
Distributor ID:	Ubuntu
Description:	Ubuntu 18.04.5 LTS
Release:	18.04
Codename:	bionic


zhaoc@Ubuntu1804:~$ uname -a
Linux Ubuntu1804 5.4.0-54-generic #60~18.04.1-Ubuntu SMP Fri Nov 6 17:25:16 UTC 2020 x86_64 x86_64 x86_64 GNU/Linux

2、Linux 内核版本:4.4.179 ;

3、交叉编译链版本

详细记录丨Realtek RTL8188FU WiFi 开启热点_内核_02

arm-none-linux-gnueabi-gcc

gcc version 4.8.3 20140320 (prerelease) (Sourcery CodeBench Lite 2014.05-29)
3 配置过程

参考周立功的资料,记录开启 AP 的脚本文件,内容如下

详细记录丨Realtek RTL8188FU WiFi 开启热点_内核_03

#!/bin/sh
killall hostapd udhcpd wpa_supplicant udhcpc 2> /dev/null
#insmod /opt/bcmdhd.ko                    # bcmdhd.ko驱动模块放在其它目录,则需要对应修改
rmmod 8188fu
insmod ./8188fu.ko
ifconfig wlan0 down
#echo /lib/firmware/bcm/SN8000_BCM43362/fw_bcmdhd_apsta.bin > /sys/module/bcmdhd/parameters/firmware_path
#echo /lib/firmware/bcm/SN8000_BCM43362/bcmdhd.SN8000.SDIO.cal > /sys/module/bcmdhd/parameters/nvram_path
ifconfig wlan0 up
sleep 1
#echo "1" > /proc/sys/net/ipv4/ip_forward
#iptables -t nat -I POSTROUTING -o eth0 -j MASQUERADE        #eth0是联网网卡名
#iptables -A FORWARD -s 192.168.5.0/24 -j ACCEPT            #wlan0的ip
#iptables -A FORWARD -d 192.168.151.0/24 -j ACCEPT            #联网网卡的ip
ifconfig wlan0 192.168.5.1
udhcpd ./udhcpd.conf                    # udhcpd.conf放在其它目录,则需要对应修改
echo "hostapd -B ./hostapd.conf"
hostapd -B ./hostapd.conf                 # hostapd.conf放在其它目录,则需要对应修改

参考上述脚本示例,就能有一个大概的思路。

结合自身需求,整理命令如下:

详细记录丨Realtek RTL8188FU WiFi 开启热点_# WiFi_04

# 查看wlan0网卡是否存在
ifconfig -a

# 重启无线网卡
ifconfig wlan0 down
ifconfig wlan0 up

# 配置wlan0网卡IP
ifconfig wlan0 192.168.5.1

# 使能DHCP,自动分配IP服务
udhcpd /etc/udhcpd.conf

# 开启WiFi
hostapd -B /etc/hostapd.conf 

udhcpd 命令、hostapd 命令,需要使用对应配置文件启动,整理文件内容如下:

/etc/udhcpd.conf 文件内容如下:

详细记录丨Realtek RTL8188FU WiFi 开启热点_内核_05

[root]#cat /etc/udhcpd.conf
# the start and end of the IP lease block
start           192.168.5.10
end             192.168.5.254

# the interface that udhcpd will use
interface       wlan0

opt     dns     114.114.114.114
option  subnet  255.255.255.0
opt     router  192.168.5.1
option  domain  local
option  lease   864000            # 10days of seconds

/etc/hostapd.conf 文件内容如下:

详细记录丨Realtek RTL8188FU WiFi 开启热点_Linux_06

[root]#cat /etc/hostapd.conf 
# WPA2-PSK authentication with AES encryption
interface=wlan0
driver=nl80211
ctrl_interface=/var/run/hostapd
ssid=ZHAOC
channel=6
ieee80211n=1
hw_mode=g
ignore_broadcast_ssid=0
wpa=2
wpa_passphrase=12345678
wpa_key_mgmt=WPA-PSK
rsn_pairwise=CCMP

其中包含 WiFi 名称、密码等信息

  • WiFi 名称( ssid ):ZHAOC
  • WiFi 密码( wpa_passphrase ):12345678



在熟悉了基本的命令、配置文件后,就可以编写脚本,自动化执行了,这样可以大大节省调试时间。

开启 WiFi AP 模式,脚本文件如下,并附有详细注释

详细记录丨Realtek RTL8188FU WiFi 开启热点_# WiFi_07

#/bin/sh
# 先杀死所有相关进程
killall hostapd udhcpd wpa_supplicant udhcpc

# 重启无线网卡
ifconfig wlan0 down
ifconfig wlan0 up

# 延时1秒
sleep 1

# 配置无线网卡固定IP
ifconfig wlan0 192.168.43.1

# 启动服务端,DHCP自动分配IP地址
udhcpd /App/udhcpd.conf

# 开启设备热点
echo "hostapd -B /App/hostapd.conf"
hostapd -B /App/hostapd.conf

基本与单纯的命令行操作差不太多。主要是集合到脚本文件当中,要求格式统一等。

下面看看停止 WiFi AP 模式脚本,其实就是 killall 命令

详细记录丨Realtek RTL8188FU WiFi 开启热点_kernel_08

#/bin/sh
echo "[root] killall hostapd udhcpd"
killall hostapd udhcpd

下面就是自己配置的 App/hostapd.conf ,附有详细注释

详细记录丨Realtek RTL8188FU WiFi 开启热点_kernel_09

# WPA2-PSK authentication with AES encryption
# 使用网卡
interface=wlan0

# 网卡驱动
driver=nl80211

# 未知
ctrl_interface=/var/run/hostapd

# 热点名称
ssid=ZHAOC

# 热点使用信道,频段
channel=11

# 未知
ieee80211n=1
hw_mode=g
ignore_broadcast_ssid=0

# 下面四项,当配置为加密模式时,需开启;
# 即连接 WiFi 热点时,需要输入密码;
#wpa=2
#wpa_passphrase=12345678
#wpa_key_mgmt=WPA-PSK
#rsn_pairwise=CCMP

最后则是更新后的, DHCP 自动分配 IP 配置文件,App/udhcpd.conf

详细记录丨Realtek RTL8188FU WiFi 开启热点_Linux_10

# the start and end of the IP lease block
start           192.168.43.10
end             192.168.43.254

# the interface that udhcpd will use
interface       wlan0
opt     dns     114.114.114.114
option  subnet  255.255.255.0
opt     router  192.168.43.1
option  domain  local
option  lease   864000            # 10days of seconds
4 注意事项

1、hostapd 需要使用新版本的,目前用的 2.9 版本的;

2、driver 最好使用 nl80211 ,即如下内容

driver=nl80211

原因:目前看到的所有成功的教程,都是使用 nl80211 ,最好保持一致。

3、为什么原来用 nl80211 不可以?

回答:

  原来将 driver 配置为 nl80211 ,运行命令报错,是因为使用的工具版本不支持导致的,后来换了 2.9 版本的 hostapd 后,就正常了。

4、目前 WiFi 开启热点后,使用的信道 11 ,经过自测,此信道在当前环境下,相对比较稳定;

channel=11



好了,本期内容就是这样,下篇文章将总结一下整个移植过程,以及自己的思考。

感谢您的阅读,我是小二,我们下期再见!

如果文章内容有误,麻烦评论/私信多多指教!如果觉得文章内容还不错,记得一键四连哦(点赞、收藏、留言、关注),如果您能点个关注,那就是对我最大的鼓励,也将是我创作的动力,谢谢您嘞!