mt7601u移植

一、环境与材料

|-------------|-------------------------------------------------------------|
| 项目 | 内容 |
| 目标板 | 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拷贝到开发板。

觉得有帮助的话,打赏一下呗。。

相关推荐
2601_949847751 小时前
io-ts 跨端三方库仓颉适配全流程
linux·运维·ubuntu
a5986523 小时前
云手机怎么选?ARM服务器原生架构和X86模拟器差别很大
服务器·arm开发·智能手机
程序员清风11 小时前
数据处理脚本工程化:日志、配置、命令行与测试
服务器·开发语言·数据库
readhere12 小时前
从ZYNQ7000开发板,学会启动嵌入式Linux系统——入门学习:EBAZ4205篇目录
linux·启动·嵌入式linux·zynq7000·ebaz4205
打工仔折腾 AI13 小时前
在 Ubuntu ARM64 部署 Q1 V3.0 MuJoCo 模型:加载、单步推理与执行器响应解析
linux·运维·人工智能·python·深度学习·ubuntu·性能优化
yyuuuzz13 小时前
跨境站点日志时区混乱的排查记录
运维·服务器·网络·云计算·aws·1024程序员节
‎ദ്ദിᵔ.˛.ᵔ₎13 小时前
关于Linux 线程局部存储的认识
linux·运维
GlobalInfo13 小时前
全球及中国风电叶片检测机器人行业研究报告(2026版):市场现状、行业前景与占有率分析
运维·网络·人工智能·机器人
数字新视界15 小时前
一体化机柜在数据中心运维中的创新应用与优势分析
大数据·服务器·数据库·动环监控系统·动力与环境监控系统