RK3568镜像:内核Linux 6.1.118,根文件系统buildroot 2021
WIFI模块:WLE3000HX,其芯片为高通QCN9074,PCIe3.0接口
RK3568大多开发者是使用SDK中的Linux5.10进行开发,但是该内核的ath11k驱动版本较低,不适配WiFi模块,所以要么将高等级Linux中的驱动移植到5.10里,要么针对高等级Linux重新做BSP开发。笔者选了后者,遂下文所提及内核皆为Linux 6.1.118。
1. 设备树修改
-
PCIe供电节点:
基于自己板卡的控制IO修改。
vcc_eth_power:vcc-eth-power {
compatible = "regulator-fixed";
regulator-name = "vcc_eth_power";
enable-active-low; // 低电平有效(关键修正)
regulator-always-on; // 保持电源始终使能(根据需求可选)
pinctrl-names = "default";
pinctrl-0 = <&gpio_eth_power>; // 引用 pinctrl 配置
gpio = <&gpio0 RK_PC1 GPIO_ACTIVE_LOW>; // 低电平有效
status = "okay";
};
没有供电的话会报错phy init failed。下面这种报错,首先要排查供电情况,再看时钟
[ 4.706113] phy phy-fe8c0000.phy.9: rockchip_p3phy_rk3568_init: lock failed 0x6890000, check input refclk and power supply
[ 4.706144] phy phy-fe8c0000.phy.9: phy init failed --> -110
-
PCIe复位IO:
基于原理图配置复位IO,由于PCIe是专用IO,所以只需要复用复位IO一个即可,其他会自动复用。
!!!注意复位IO是高/低电平有效,瑞芯微evb提供的dtsi默认是高电平
&pcie3x2 {
reset-gpios = <&gpio2 RK_PD6 GPIO_ACTIVE_LOW>;
vpcie3v3-supply = <&vcc3v3_pcie>;
status = "okay";
};
至此,DTS已经全部修改完成,在内核config中使能PCI相关选项后,lspci就能识别出设备:
root@rk3566rk3568:/root# lspci
0002:20:00.0 PCI bridge: Fuzhou Rockchip Electronics Co., Ltd Device 3566 (rev 01)
0002:21:00.0 Network controller: Qualcomm Device 1104 (rev 01)
2. WIFI驱动
Linux6.1中make ARCH=arm64 menuconfig就能直接出现ath11k相关选项。

如果是Linux5.10,需要先开启下图框中的三个依赖才可以出现ath11k选项,但是Linux5.10的ath11k驱动版本较低,不适配该WiFi模块.......

至此,驱动和设备树的移植工作都完成了,驱动可以正常匹配上设备了,但是...还需要固件,否则报错如下:
root@rk3566rk3568:/lib/firmware/ath11k/QCN9074/hw1.0# dmesg | grep ath11k
[ 5.259550] ath11k_pci 0002:21:00.0: BAR 0: assigned [mem 0xf0200000-0xf03fffff 64bit]
[ 5.259680] ath11k_pci 0002:21:00.0: enabling device (0000 -> 0002)
[ 5.260625] ath11k_pci 0002:21:00.0: MSI vectors: 16
[ 5.260692] ath11k_pci 0002:21:00.0: qcn9074 hw1.0
[ 5.423325] mhi mhi0: Direct firmware load for ath11k/QCN9074/hw1.0/amss.bin failed with error -2
[ 5.423436] ath11k_pci 0002:21:00.0: failed to power up mhi: -110
[ 5.423459] ath11k_pci 0002:21:00.0: failed to start mhi: -110
[ 5.423473] ath11k_pci 0002:21:00.0: failed to power up :-110
[ 5.423642] ath11k_pci 0002:21:00.0: failed to create soc core: -110
[ 5.423662] ath11k_pci 0002:21:00.0: failed to init core: -110
[ 5.425807] ath11k_pci: probe of 0002:21:00.0 failed with error -110
3. WIFI模块固件
WIFI 固件:下载amss.bin,m3.bin,board-2.bin
但是直接copy进系统里或者编译进rootfs镜像都不行,因为先驱动被加载 寻找固件,再挂载根文件系统,所以,又有两个选择:1.驱动取消内联进镜像里,编译成ko模块,后续手动加载ath11k驱动;2.将固件编译进内核镜像。笔者选择了后者。
修改Linux的目录下.config,编译镜像时读取地址下的bin文件,将其编译进了boot.img里,且为驱动提供了一个虚拟逻辑地址
CONFIG_EXTRA_FIRMWARE="ath11k/QCN9074/hw1.0/amss.bin ath11k/QCN9074/hw1.0/m3.bin ath11k/QCN9074/hw1.0/board-2.bin"
CONFIG_EXTRA_FIRMWARE_DIR="/mnt/d"
内核编译log如下:

4. 效果

2775

被折叠的 条评论
为什么被折叠?



