RK3568移植RM500U-PCIE模块

1、RK3568 pcie配置

RM500U连接在pcie 2.0上.

dts配置如下:

c 复制代码
&combphy2_psq {
 status = "okay";
};
&pcie2x1 {
        reset-gpios = <&gpio3 RK_PC1 GPIO_ACTIVE_HIGH>;
//      vpcie3v3-supply = <&vcc3v3_pcie>;
        status = "okay";
};

查看PCIE是否能识别到下挂的设备。

bash 复制代码
root@ubuntu:~# lspci
00:00.0 PCI bridge: Fuzhou Rockchip Electronics Co., Ltd Device 3566 (rev 01)
01:00.0 Wireless controller: Synopsys, Inc. DWC_usb3 / PCIe bridge (rev ff)

2、5G模块驱动移植。

解压驱动到内核driver目录下,并进行如下修改。

bash 复制代码
diff --git a/drivers/Kconfig b/drivers/Kconfig
index c83e640aa..81d0ae8c4 100644
--- a/drivers/Kconfig
+++ b/drivers/Kconfig
@@ -246,4 +246,6 @@ source "drivers/rknpu/Kconfig"

+source "drivers/Sprd_pcie_V1.1.8/Kconfig"
+
 endmenu
diff --git a/drivers/Makefile b/drivers/Makefile
index ed2c4de7e..846900a71 100644
--- a/drivers/Makefile
+++ b/drivers/Makefile
@@ -195,3 +195,4 @@ obj-$(CONFIG_RK_NAND)               += rk_nand/
 obj-$(CONFIG_ROCKCHIP_RKNPU)   += rknpu/

+obj-$(CONFIG_QUECTEL_SPRD_PCIE)      += Sprd_pcie_V1.1.8/

diff --git a/arch/arm64/configs/rk3568-rocktech-linux_defconfig b/arch/arm64/configs/rk3568-rocktech-linux_defconfig
index 8d3cfa6bc..fe2d67d9f 100644
--- a/arch/arm64/configs/rk3568-rocktech-linux_defconfig
+++ b/arch/arm64/configs/rk3568-rocktech-linux_defconfig
@@ -634,7 +634,8 @@ CONFIG_TEE=y
 CONFIG_OPTEE=y
 CONFIG_RK_HEADSET=y
 CONFIG_ROCKCHIP_RKNPU=y
+CONFIG_QUECTEL_SPRD_PCIE=y
 CONFIG_EXT4_FS=y
 CONFIG_EXT4_FS_POSIX_ACL=y
 CONFIG_EXT4_FS_SECURITY=y

注意这里添加CONFIG_QUECTEL_SPRD_PCIE宏而不是CONFIG_SPRD_PCIE,主要是因为RM500U的pcie驱动中对CONFIG_SPRD_PCIE做了判断,而实际编译时不需要定义这个宏,否则编译时就报错,所以这里没用CONFIG_SPRD_PCIE,而是定义了CONFIG_QUECTEL_SPRD_PCIE。同时对RM500U驱动做如下修改。

添加一个Kconfig文件,内容如下:

c 复制代码
config QUECTEL_SPRD_PCIE
        tristate "Quectel sprd pcie support"
        help
          Enable Sprd pcie driver for RM500U

如需要将驱动编译成KO,还需对驱动中Makefile做如下修改:

bash 复制代码
# 将
obj-y += sprd_pcie.o
# 改成
obj-$(CONFIG_QUECTEL_SPRD_PCIE) += sprd_pcie.o

其次如果是cpu是大端模式还需要取消驱动include\sipc_big_to_little.h中的CONFIG_SIPC_BIG_TO_LITTLE的注释。

3、切换PCIe模式

RM500U支持RC和EP两种PCIe模式,默认情况下是RC模式。因为CPU端是RC模式所以需要通过AT命令调整模块为EP模式才能实现PCIE正常通信。可通过执行AT+QCFG="pcie/mode"查询模块当前模式, 0 表示 PCIe EP 模式; 1 表示 PCIe RC 模式。若模块处于RC 模式,执行 AT+QCFG="pcie/mode",0 并重启模块将 PCIe 模式切换至 EP 模式。注意:PCIE驱动枚举出来的串口只有在EP模式下才有。

驱动正常加载后/dev下会存在多个stty_nr,stty_nr31为AT命令串口。并且ifconfig会查询到pcie网卡。

4、拨号上网

更改拨号方式:

执行AT+QCFG="nat",0配置拨号模式为网卡模式。

执行AT+QCFG="nat",1配置拨号模式为路由模式。

执行AT+QCFG="nat",2配置拨号模式为网桥模式。

设置上网:

这里移远关于PCIE的文档中已经提供了单路拨号和多路拨号的说明,下面是搬抄的内容;

上面的命令中主要关注AT+QNETDEVCTL=,,命令,它直接决定这利用pcie枚举出来的那个网口来进行通信,比如我需要用pcie0进行通信,保存配置,并开启自动连接,配置AT命令就是"AT+QNETDEVCTL=1,3,1"。

相关推荐
程序员老舅27 分钟前
C++高并发精髓:无锁队列深度解析
linux·c++·内存管理·c/c++·原子操作·无锁队列
雨中风华39 分钟前
Linux, macOS系统实现远程目录访问(等同于windows平台xFsRedir软件的目录重定向)
linux·windows·macos
爱吃生蚝的于勒1 小时前
【Linux】进程信号之捕捉(三)
linux·运维·服务器·c语言·数据结构·c++·学习
The森1 小时前
Linux IO 模型纵深解析 01:从 Unix 传统到 Linux 内核的 IO 第一性原理
linux·服务器·c语言·经验分享·笔记·unix
翼龙云_cloud2 小时前
腾讯云代理商: Linux 云服务器搭建 FTP 服务指南
linux·服务器·腾讯云
纤纡.2 小时前
Linux中SQL 从基础到进阶:五大分类详解与表结构操作(ALTER/DROP)全攻略
linux·数据库·sql
好好学习天天向上~~2 小时前
6_Linux学习总结_自动化构建
linux·学习·自动化
冉佳驹2 小时前
Linux ——— 静态库和动态库的设计与使用
linux·动态库·静态库·fpic
陌上花开缓缓归以2 小时前
linux mtd-utils使用源码分析(ubuntu测试版)
linux·arm开发·ubuntu
wangjialelele3 小时前
Linux下的IO操作以及ext系列文件系统
linux·运维·服务器·c语言·c++·个人开发