一、环境与材料
项目 | 内容 |
目标板 | IMX6ULL(Buildroot 文件系统, |
WiFi 模块 | MT7601U(USB 接口,1T1R,efuse 存储 NVM) |
驱动源码 |
|
内核源码 |
|
交叉工具链 | gcc-linaro-4.9.4 |
Makefile 配置 |
|
板上工具 |
|
目标热点 | SSID |
驱动源码
| 版本 | 仓库地址 |
|---|---|
| ① 厂商 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- endif2、加自己的模块 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=y4、内核需要打开的选项
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 help5、修改“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.ko2、配置文件
mkdir -p /etc/Wireless/RT2870STA/ cp RT2870STA.dat /etc/Wireless/RT2870STA/RT2870STA.dat3、联网
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=COMPLETED4、拿 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拷贝到开发板。
六、AR9271无线模块移植
0cf3:9271 = Atheros AR9271
内核配置:
insmod ath.ko insmod ath9k_hw.ko insmod ath9k_common.ko insmod ath9k_htc.ko内核也得重新更新一下!!!
# 1. 网卡接口应该已经出现 ifconfig -a | grep wlan # 2. 拉起接口 + 扫描确认能收到信号 ifconfig wlan0 up iwlist wlan0 scan | grep ESSID # 3. 联网 wpa_passphrase "你的SSID" "密码" > /etc/wpa.conf wpa_supplicant -B -iwlan0 -c/etc/wpa.conf udhcpc -i wlan0觉得有帮助的话,打赏一下呗。。