1. 平台
- 全志A63 Ubuntu
- 内核 linux 3.10
- wifi ap6212a1
( ap6212@a0 : 该版本是ap6212旧版本,第二行丝印是8位数 ;
ap6212@a1 : 该版本是ap6212新版本,第二行丝印是9位数,并且最后一位数字是1 ;
ap6212@43436B0 : 该版本是ap6212最新版本,第二行丝印是9位数,并且最后一位数字是2 )
2. 文件
bcm_btlpm.ko
bcm43438a1.hcd
bcmdhd.ko
config.txt
fw_bcm43438a1.bin
fw_bcm43438a1_apsta.bin
fw_bcm43438a1_p2p.bin
hostapd.conf
interfaces
nvram_ap6212.txt
udhcpd.conf
wifi_ap_ap6212.sh
wifi_sta_ap6212.sh
3. wifi 脚本
3.1 sta模式
#! /bin/bash
echo "start wifi"
IS_SETUP_SUCCESS=0
function SetupWifiStation(){
RESULT=`lsmod | grep bcmdhd`
if [ -z "$RESULT" ]
then
echo "no bcmdhd"
else
echo "need to rmmod bcmdhd"
rmmod bcmdhd
fi
insmod /etc/firmware/ap6212a/bcmdhd.ko
echo 1 > /sys/devices/soc/wlan/power_state
echo "/etc/firmware/ap6212a/fw_bcm43438a1.bin" > /sys/module/bcmdhd/parameters/firmware_path
echo "/etc/firmware/ap6212a/nvram_ap6212.txt" > /sys/module/bcmdhd/parameters/nvram_path
ifconfig wlan0 up
mkdir -p /tmp/run/wpa_supplicant/wpa_supplicant
echo 'ctrl_interface=/tmp/run/wpa_supplicant' > /tmp/run/wpa_supplicant/wpa.conf
wpa_passphrase "wifi_2.4G" "12345678" >> /tmp/run/wpa_supplicant/wpa.conf
#root@Ubuntu:/etc# cat /tmp/run/wpa_supplicant/wpa.conf
#ctrl_interface=/tmp/run/wpa_supplicant
#network={
# ssid="wifi_2.4G"
# #psk="12345678"
# psk=5be71dd0f3081300ec5866092073d81749e05dcd727d7ffc6c8d7aa01d80c17d
#}
killall wpa_supplicant
sleep 2
wpa_supplicant -d -Dnl80211 -c/tmp/run/wpa_supplicant/wpa.conf -iwlan0 -B
sleep 10
udhcpc -iwlan0 -A10 -n
RESULT=`curl www.baidu.com`
if [ -z "$RESULT" ]
then
echo "need to try again"
IS_SETUP_SUCCESS=0
else
echo "wifi set up station"
IS_SETUP_SUCCESS=1
fi
}
function Daemon(){
SetupWifiStation
while true
do
if [ ${IS_SETUP_SUCCESS} -ne 1 ]
then
echo "---------need to try again"
sleep 2
SetupWifiStation
else
echo "setup wifi successfully"
break
fi
done
}
##-------MAIN----------------
echo "start wifi"
Daemon
echo "exit setup"
3.2 ap模式
#! /bin/bash
IS_SETUP_SUCCESS=0
#开启eth0 获取数据
ifconfig eth0 down
ifconfig eth0 up
function SetupWifiHotSpot(){
#sudo apt-get install hostapd dnsmasq udhcpd
RESULT=`lsmod | grep bcmdhd`
if [ -z "$RESULT" ]
then
echo "no bcmdhd"
else
echo "need to rmmod bcmdhd"
rmmod bcmdhd
fi
insmod /etc/firmware/ap6212a/bcmdhd.ko
echo 1 > /sys/devices/soc/wlan/power_state
echo "/etc/firmware/ap6212a/fw_bcm43438a1_apsta.bin" > /sys/module/bcmdhd/parameters/firmware_path
#cat /sys/module/bcmdhd/parameters/firmware_path
echo "/etc/firmware/ap6212a/nvram_ap6212.txt" > /sys/module/bcmdhd/parameters/nvram_path
#cat /sys/module/bcmdhd/parameters/nvram_path
sleep 1
ifconfig wlan0 up
#AP 模式
#配置udhcpc
#2.4G模式 802.11g 协议
mkdir -p /var/run/hostapd/
echo "interface=wlan0" > /var/run/hostapd/hostapd.conf
echo "driver=nl80211" >> /var/run/hostapd/hostapd.conf
echo "ctrl_interface=/var/run/hostapd" >> /var/run/hostapd/hostapd.conf
echo "ssid=111_test" >> /var/run/hostapd/hostapd.conf
echo "channel=6" >> /var/run/hostapd/hostapd.conf
echo "hw_mode=g" >> /var/run/hostapd/hostapd.conf
echo "ieee80211n=1" >> /var/run/hostapd/hostapd.conf
echo "ignore_broadcast_ssid=0" >> /var/run/hostapd/hostapd.conf
echo "wpa=2" >> /var/run/hostapd/hostapd.conf
echo "rsn_pairwise=CCMP" >> /var/run/hostapd/hostapd.conf
echo "wpa_passphrase=12345678" >> /var/run/hostapd/hostapd.conf
#5G模式 802.11g 协议
#mkdir -p /var/run/hostapd/
#echo "interface=wlan0" > /var/run/hostapd/hostapd.conf
#echo "driver=nl80211" >> /var/run/hostapd/hostapd.conf
#echo "ctrl_interface=/var/run/hostapd" >> /var/run/hostapd/hostapd.conf
#echo "ssid=zwq_test" >> /var/run/hostapd/hostapd.conf
#echo "channel=149" >> /var/run/hostapd/hostapd.conf
#echo "hw_mode=a" >> /var/run/hostapd/hostapd.conf
#echo "ieee80211n=1" >> /var/run/hostapd/hostaapd.conf
#echo "ignore_broadcast_ssid=0" >> /var/run/hostapd/hostapd.conf
#echo "wpa=2" >> /var/run/hostapd/hostapd.conf
#echo "rsn_pairwise=CCMP" >> /var/run/hostapd/hostapd.conf
#echo "wpa_passphrase=12345678" >> /var/run/hostapd/hostapd.conf
killall wpa_supplicant
killall hostapd
sleep 2
#----------------
sudo sh -c "echo 1 > /proc/sys/net/ipv4/ip_forward"
#编辑/etc/sysctl.conf改动下面这行:
#net.ipv4.ip_forward=1
#4.8 配置iptables防火墙
#sudo iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
#sudo iptables -A FORWARD -i eth0 -o wlan0 -m state --state RELATED,ESTABLISHED -j ACCEPT
#sudo iptables -A FORWARD -i wlan0 -o eth0 -j ACCEPT
#到这里路由的NAT功能已经被启用,我们将刚才配置的iptables保存下来以便于下次使用:
#sudo sh -c "iptables-save > /etc/iptables.ipv4.nat"
iptables -P INPUT ACCEPT
iptables -P FORWARD ACCEPT
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE #共享eth0的外网
#iptables -t nat -A POSTROUTING -o wwan0 -j MASQUERADE #共享wwan0的外网
#-----------------
#后台执行 hostapd
RESULT=`hostapd -B /var/run/hostapd/hostapd.conf | grep AP-ENABLED`
if [ -z "$RESULT" ]
then
echo "need to try again"
IS_SETUP_SUCCESS=0
else
echo "wifi set up hotspot"
IS_SETUP_SUCCESS=1
fi
sleep 6
#杀掉udhcpc
killall udhcpc
#配置wlan0 ip
ifconfig wlan0 192.168.2.20
#开启动态分配ip(为连接改AP热点的设备分配IP)
udhcpd /etc/udhcpd.conf
}
function Daemon(){
SetupWifiHotSpot
while true
do
if [ ${IS_SETUP_SUCCESS} -ne 1 ]
then
echo "---------need to try again"
sleep 2
SetupWifiHotSpot
else
echo "setup wifi successfully"
break
fi
done
}
##-------MAIN----------------
echo "start wifi"
Daemon
echo "exit setup"
4. 使用
其中 wifi_sta_ap6212.sh 用于连接热点;wifi_ap_ap6212.sh 用于开启热点。
4.1 接入热点
如需接入一个新热点,修改脚本wifi_sta_ap6212.sh,找到wpa_passphrase “wifi_2.4G” “12345678” >> /tmp/run/wpa_supplicant/wpa.conf 部分,修改对应的名称和密码。
如名称为111 ,密码为12345678,则修改为
wpa_passphrase “111” “12345678” >> /tmp/run/wpa_supplicant/wpa.conf
4.2 开启热点
如需开启一个新热点,需要修改脚本wifi_ap_ap6212.sh,找到
echo “ssid=111_test” >> /var/run/hostapd/hostapd.conf
echo “wpa_passphrase=12345678” >> /var/run/hostapd/hostapd.conf
部分,修改对应的名称和密码。
如名称为111,密码为12345678,则修改为
echo "ssid=111 " >> /var/run/hostapd/hostapd.conf
echo “wpa_passphrase=12345678” >> /var/run/hostapd/hostapd.conf
4.3 开启热点命令
root@Ubuntu:/etc/firmware/ap6212a# ./wifi_ap_ap6212.sh
4.4 连接热点命令
root@Ubuntu:/etc/firmware/ap6212a# ./wifi_sta_ap6212.sh
如不能正常上网,请查看是否修改正确。