一、环境与材料
|-------------|-------------------------------------------------------------|
| 项目 | 内容 |
| 目标板 | IMX6ULL(Buildroot 文件系统,root@buildroot_gui),内核 4.1.15 |
| WiFi 模块 | MT7601U(USB 接口,1T1R,efuse 存储 NVM) |
| 驱动源码 | 03_kernel313plus_fixed(Ralink DPO STA Driver 3.0.0.3) |
| 内核源码 | linux-imx-rel_imx_4.1.15_2.1.0_ga(需先用同一工具链编译过一次) |
| 交叉工具链 | gcc-linaro-4.9.4 arm-linux-gnueabihf- |
| Makefile 配置 | PLATFORM = SMDK,LINUX_SRC / CROSS_COMPILE 均已指向上述路径 |
| 板上工具 | iwpriv、iwconfig、wpa_supplicant、wpa_cli、udhcpc |
| 目标热点 | SSID gui,WPA2-PSK/AES,密码 ******** |
驱动源码
| 版本 | 仓库地址 |
|---|---|
| ① 厂商 DPO 3.0.0.4(20130913)+ kernel 4.x 适配,首选 | github.com/lzto/DPO_MT7601U_LinuxSTA |
② 同版本 + poma 的 Linux-3.17 补丁(源码在 src/ 子目录) |
github.com/liangent/mt7601 |
| ③ 社区版,修了 kernel 3.13+ 编译错误 | github.com/2421/mt7601u_driver_linux |
免 git 的直链 tarball(在 Ubuntu 上直接 wget 用这个更方便)
# 1. DPO_MT7601U_LinuxSTA
wget -O DPO_MT7601U_LinuxSTA.tar.gz "https://codeload.github.com/lzto/DPO_MT7601U_LinuxSTA/tar.gz/refs/heads/master"
# 2. liangent/mt7601
wget -O liangent_mt7601.tar.gz "https://codeload.github.com/liangent/mt7601/tar.gz/refs/heads/master"
# 3. 2421/mt7601u_driver_linux
wget -O mt7601u_driver_linux.tar.gz "https://codeload.github.com/2421/mt7601u_driver_linux/tar.gz/refs/heads/master"
任选一份源码下载即可!!!
二、编译源码
1、改 Makefile 平台段
根 `Makefile` 第 30 行附近,把 PC 换成 SMDK(ARM 通用段):
#PLATFORM = PC
PLATFORM = SMDK
再把 SMDK 段(约 283 行)改成自己的路径:
ifeq ($(PLATFORM),SMDK)
LINUX_SRC = /home/alientek/linux/linux-imx-rel_imx_4.1.15_2.1.0_ga
CROSS_COMPILE = /usr/local/arm/gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabihf/bin/arm-linux-gnueabihf-
endif
2、加自己的模块 VID/PID
`lsusb` 看模块实际 ID,然后改 `common/rtusb_dev_id.c`(第 37 行起):

USB_DEVICE_ID rtusb_dev_id[] = {
{USB_DEVICE(0x148f,0x7601)}, /* 通用 MT7601U,多数模块是这个 */
{USB_DEVICE(0x148f,0x760b)}, /* 360 WiFi 2代 */
{USB_DEVICE(0x2955,0x1001)}, /* 小度 WiFi */
{USB_DEVICE(0x2717,0x4106)}, /* 小米随身 WiFi ------ 自己的 ID 加这行 */
{ }/* END */
};
漏了模块插上完全没反应,`dmesg` 也不报错。
3、确认 config.mk
`os/linux/config.mk` 默认已经是:
HAS_WPA_SUPPLICANT=y
HAS_NATIVE_WPA_SUPPLICANT_SUPPORT=y
4、内核需要打开的选项
CONFIG_WIRELESS_EXT=y
CONFIG_WEXT_PRIV=y
CONFIG_CFG80211=y # HAS_NATIVE_WPA_SUPPLICANT_SUPPORT=y 时需要
CONFIG_CFG80211_WEXT=y
需要以下修改:
修改net/wireless/Kconfig
config WEXT_SPY
bool
select WIRELESS_EXT
config WEXT_PRIV
bool "Wireless Extensions priv API"
select WIRELESS_EXT
help

5、修改"coherent_pool"
方式一:
修改文件 arch\arm\mm\dma-mapping.c:
//#define DEFAULT_DMA_COHERENT_POOL_SIZE SZ_256K
#define DEFAULT_DMA_COHERENT_POOL_SIZE SZ_2M
方式二:
修改内核启动参数bootargs:在其中增加:
coherent_pool=2M
举例(仅为举例,勿照搬):
set bootargs console=ttymxc0,115200 cma=64M root=/dev/mtdblock5 coherent_pool=2M rootfstype=yaffs2,calibrate=y)
6、修改网口名称(可选)
include/rtmp_def.h 默认设备节点的定义,修改"ra" 为"wlan":
#define INF_MAIN_DEV_NAME "wlan"
#define INF_MBSSID_DEV_NAME "wlan"
三、板上部署
1、加载驱动
insmod mt7601Usta.ko
2、配置文件
mkdir -p /etc/Wireless/RT2870STA/
cp RT2870STA.dat /etc/Wireless/RT2870STA/RT2870STA.dat
3、联网
ifconfig ra0 up
//搜索热点
iwpriv ra0 set SiteSurvey=1
iwpriv ra0 get_site_survey
或
iwlist ra0 scan | grep ESSID
//wpa_supplicant 配置文件
cat > /etc/wpa.conf <<'EOF'
ctrl_interface=/var/run/wpa_supplicant
ap_scan=1
network={
ssid="gui"
psk="12345678"
key_mgmt=WPA-PSK
pairwise=CCMP
group=CCMP
}
EOF
iwpriv ra0 set WpaSupport=1 # 注意:WpaSupport,应打印 Set_Wpa_Support::(WpaSupplicantUP=1)
wpa_supplicant -B -Dwext -ira0 -c /etc/wpa.conf
wpa_cli -ira0 status # 期望 wpa_state=COMPLETED
4、拿 IP
udhcpc -i ra0
ifconfig ra0 # 应看到 inet addr:192.168.x.x
ping -c 3 223.5.5.5 # 通了就彻底收工
如果 udhcpc 卡住不动(热点端 DHCP 服务问题),先手动配置验证链路:
ifconfig ra0 192.168.43.100 netmask 255.255.255.0 up
ping -c 3 192.168.43.1 # 网关地址按实际改
四、开机自动联网(buildroot 标准做法)
在板上建 /etc/init.d/S40wireless(注意 chmod +x):
#!/bin/sh
case "$1" in
start)
insmod /root/mt7601Usta.ko
ifconfig ra0 up
iwpriv ra0 set WpaSupport=1
wpa_supplicant -B -Dwext -ira0 -c /etc/wpa.conf
udhcpc -i ra0 -b
;;
stop)
killall wpa_supplicant 2>/dev/null
ifconfig ra0 down
rmmod mt7601Usta
;;
esac
五、交叉编译openssl、wpa_supplicant、iwlist
资源下载:点击跳转
1、openssl
./Configure no-asm shared --prefix=path/openssl/build os/compiler:arm-linux-gnueabihf-gcc
make -j12
make install_sw
ls build/lib/
2、wpa_supplicant
cd wpa_supplicant/wpa_supplicant/
修改Makefile交叉编译工具链
CC= arm-linux-gnueabihf-gcc
同时删除#ifndef CC 和 #endif
添加openssl的库文件和头文件链接路径(根据自己路径):


cp defconfig .config
make -j12
将wpa_supplicant拷贝到开发板
3、iwlist
修改Makefile如下:

make clean
make -j12
将iwlist、iwconfig、iwspy、iwpriv、ifrename、libiw.so.29拷贝到开发板。
觉得有帮助的话,打赏一下呗。。
