Mango Pi 全志MQ-F133-A移植rtl8189ftv WIFI驱动

目录

概要

Mango Pi 

全志官方Tina系统

修改设备树

修改rtl8189驱动

Makefile

kernel_read

替换扫卡函数,上电函数

小结

概要

上一篇文章解决了根文件系统只读,但是最近在移植mqtt客户端的时候,突然发现板子还无法联网,移植了mqtt也没法用。于是打算用MQ-F133A自带的rtl8189wifi模块联网。对于MQ-f133-A有两种获取SDK的方式:

一:全志官网SDK,但是从官网下载太慢了,这里建议直接大家下载韦东山提供的SDK全志Tian 2.0

二:芒果派官网Mango Pi official website | Tiny and Elegant SBC | mangopi_mq

但是无论你获取哪种SDK,如果直接编译烧写的话,无法启动wifi模块,下面给出两种SDK移植WIFI驱动的方法

Mango Pi 

Mango Pi 官网的SDK有直接提供对应的开发板并且提供了移植好的wifi驱动,如图所示,选择5即可

如果不做任何配置,编译出来的根文件系统是只读的,无法将.ko文件发送到开发板,解决方法可参考笔者的上一篇文章。在设置根文件系统可读可写之后,编译wifi驱动,将.ko通过adb push到开发板。在加载wifi驱动之后,立刻连接网络,此时会产生如下报错:connect wpa_supplicant failed,please check wifi driver!

解决方法:手动打开wpa_supplicant,wpa_supplicant路径:/etc/init.d

连接wifi,wifi_connect_ap_test <wifi名> <密码>,连接成功

但如此便存在一个缺点,将.ko发送到开发板,然后加载模块,在打开wpa_supplicant,在连接wifi,这些操作是在烧写镜像之后完成的。这就意味着,如果每次更新镜像,那么这些操作需要再来一遍。这就非常麻烦了,为了省去这些不必要的麻烦,可以将wifi编译进内核,并且在编译阶段将.ko文件复制到开发板,加载模块,打开wpa_supplicant,连接wifi。因此可以将这些步骤放在rcS文件中,使以上配置操作开机自动完成。

全志官方Tina系统

修改设备树

	rfkill: rfkill@0 {
		compatible    = "allwinner,sunxi-rfkill";
		chip_en;
		power_en;
		pinctrl-0 = <&wlan_pins_a>;
		pinctrl-names = "default";
		status        = "okay";

		wlan: wlan@0 {
			compatible    = "allwinner,sunxi-wlan";
			clock-names = "32k-fanout1";
			clocks = <&ccu CLK_FANOUT1_OUT>;
			wlan_busnum    = <0x1>;
			wlan_regon    = <&pio PG 12 GPIO_ACTIVE_HIGH>;
			wlan_hostwake  = <&pio PG 10 GPIO_ACTIVE_HIGH>;
			/*wlan_power    = "VCC-3V3";*/
			/*wlan_power_vol = <3300000>;*/
			/*interrupt-parent = <&pio>;
			interrupts = < PG 10 IRQ_TYPE_LEVEL_HIGH>;*/
			wakeup-source;

		};
		
		bt: bt@0 {
			compatible    = "allwinner,sunxi-bt";
			clock-names = "32k-fanout1";
			clocks = <&ccu CLK_FANOUT1_OUT>;
			/*bt_power_num = <0x01>;*/
			/*bt_power      = "axp803-dldo1";*/
			/*bt_io_regulator = "axp803-dldo1";*/
			/*bt_io_vol = <3300000>;*/
			/*bt_power_vol = <330000>;*/
			bt_rst_n      = <&pio PG 15 GPIO_ACTIVE_LOW>;
			status        = "okay";
		};
	};

	btlpm: btlpm@0 {
		compatible  = "allwinner,sunxi-btlpm";
		uart_index  = <0x1>;
		bt_wake     = <&pio PG 13 GPIO_ACTIVE_HIGH>;
		bt_hostwake = <&pio PG 14 GPIO_ACTIVE_HIGH>;
		status      = "okay";
	};

	addr_mgt: addr_mgt@0 {
		compatible     = "allwinner,sunxi-addr_mgt";
		type_addr_wifi = <0x0>;
		type_addr_bt   = <0x0>;
		type_addr_eth  = <0x0>;
		status         = "okay";
	};
};

修改rtl8189驱动

全志官方的Tina 2.0 SDK中并没有提供rtl8189驱动,需要自己获取,wifi驱动参考Wifi - linux-sunxi.org

git clone https://github.com/jwrdegoede/rtl8189ES_linux.git
cd rtl8189ES_linux
git checkout -B rtl8189fs origin/rtl8189fs
make -j4 ARCH=arm CROSS_COMPILE=arm-linux-gnu- KSRC=../linux

这里记得修改cpu架构、交叉编译器、以及Linux内核路径。

make -j4 ARCH=riscv CROSS_COMPILE=/home/awei/liunx/risc-v/MQ-f133/Tina-Linux/prebuilt/gcc/linux-x86/riscv/toolchain-thead-glibc/riscv64-glibc-gcc-thead_20200702/bin/riscv64-unknown-linux-gnu- KSRC=/home/awei/liunx/risc-v/MQ-f133/Tina-Linux/lichee/linux-5.4

这里提一下,笔者一开始并没有获取最新的rtl8189驱动,而是使用比较老的版本,编译的时候会出现以下报错:

这是因为在linux5.1以上版本已经不在使用set_fs(get_ds())这种写法,改为set_fs(KERNEL_DS); 从最新的rtl8189驱动源码也可看出这一修改:

因此,这里建议大家下载最新版的rtl8189驱动。当然最新版也需要修改

Makefile

获取驱动后,修改Makefile

kernel_read

编译wifi驱动,将.ko文件发送到开发板,加载驱动报错(kernel_read)如下:

解决方法参考:Linux - Error when inserting kernel module: module * uses symbol * from namespace *, but does not import it - CodeBugFixer

在使用kernel_read()函数之前,需要加上MODULE_IMPORT_NS(VFS_internal_I_am_really_a_filesystem_and_am_NOT_a_driver);

替换扫卡函数,上电函数

在完成上述修改后,成功加载wifi驱动,本以为到这便移植成功了,但现实是残酷的,终端打印信息如下,加载驱动之后只有寥寥几行,根本看不出来wifi启动成功了。

这个问题卡了很久,最终在全志官方文档D1-H Tina Linux Wi-Fi 开发指南找到了解决方法,

需要使用Tina平台提供的上下电和扫卡函数,函数位于rtl8189ES_linux/platform/platform_ARM_SUNxI_sdio.c中,将里面的函数替换掉,进入

Tina-Linux/lichee/linux-5.4/drivers/net/wireless中找一个rtl系列的wifi驱动,例如rtl8723ds,将platform_ARM_SUNxI_sdio.c复制到rtl8189ES_linux/platform

cp platform_ARM_SUNxI_sdio.c /home/awei/liunx/wifi/rtl8189ES_linux/platform/

重新编译,发送.ko文件到开发板,加载模块,会打印一大堆信息,说明成功了,如果不想看这些信息,可以在Makefile把debug关了,扫面附近wifi:wifi_scan_results_test

OK,至此针对两种sdk,移植wifi驱动成功

小结

1.获取最新的rtl8189wifi驱动

2.在rtl8189ES_linux/os_dep/linux/os_intfs.c中增加声明

MODULE_IMPORT_NS(VFS_internal_I_am_really_a_filesystem_and_am_NOT_a_driver);

3.替换扫卡,上电函数

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值