当前位置: 首页 > news >正文

O2072PM Wi-Fi7 移植 Linux5.4

O2072PM为高通最新的QCC2072芯片模组,支持Wi-Fi7和蓝牙6.0,部分客户产品因场景需求需要使低内核版本,本文将介绍在Xilinx Zynq UltraScale+MPSoC平台移植O2072PM至Linux5.4内核。

  • 平台信息

主芯片:Zynq UltraScale+MPSoC
Kernel: Linux5.4
系统:Linux

  • 硬件连接与识别

系统起来后执行 lspci 命令查看是否识别到模组

root@DTS_zynqMP:~# lspci 01:00.0 Network controller: Qualcomm Device 1112(rev 01)
  • 驱动编译及加载

1、编译驱动
解压驱动后 cd 到 qcc2072-r00042.1-linux5.4/chss_proc/host/AIO/build目录下
设置交叉编译环境

vi scripts/cgn-f10/config.cgn-f10 export KERNELPATH=/mnt/d/test/kernel5.4 export TOOLCHAIN=/mnt/d/test/aarch64/gcc-linaro-6.3.1-2017.05-x86_64_aarch64-linux-gnu/bin/ export KERNELARCH=arm64 export CROSS_COMPILE=${TOOLCHAIN}/aarch64-linux-gnu- export TOOLPREFIX=${CROSS_COMPILE}

设置完之后在当前build目录下执行make CONFIG_PERF_BUILD=y drivers 进行编译
编译完之后ko文件在AIO/rootfs-cgn-f10.build/lib/modules目录下
2、加载驱动及常见错误处理
空指针错误
加载wlan_cnss_core_pcie.ko时出现内核空指针解引用错误关键报错信息如下:

[ 52.313257] Modules linked in: wlan_cnss_core_pcie(O+) [ 52.313722] CPU: 3 PID: 2204 Comm: insmod Tainted: G O 6.1.99 #57 [ 52.314380] Hardware name: Rockchip RK3588 EVB7 V11 Board (DT) [ 52.314894] pstate: 60400009 (nZCv daif +PAN -UAO -TCO -DIT -SSBS BTYPE=--) [ 52.315508] pc : cnss_initialize+0x2fc/0xa2c [wlan_cnss_core_pcie] [ 52.316176] lr : cnss_initialize+0x2fc/0xa2c [wlan_cnss_core_pcie] [ 52.316826] sp : ffffffc00d163ad0

根据反汇编结果进行溯源最终调用点为cnss_init_sol_gpio函数
解决方式是将这两处注释处理

/drivers/core_tech_modules/cnss2/main.c b/drivers/core_tech_modules/cnss2/main.c static int cnss_misc_init(struct cnss_plat_data *plat_priv) { int ret; - ret = cnss_init_sol_gpio(plat_priv); - if (ret) - return ret; static int cnss_misc_init(struct cnss_plat_data *plat_priv) cnss_sram_dump_init(plat_priv); - if (of_property_read_bool(plat_priv->plat_dev->dev.of_node, - "qcom,rc-ep-short-channel")) - cnss_set_feature_list(plat_priv, CNSS_RC_EP_ULTRASHORT_CHANNEL_V01);

初始化错误
重新编译驱动再次加载,cnss初始化成功,但是wlan初始化失败,报错如下:

pc : mhi_driver_unregister+0x64/0x230 [wlan_cnss_core_pcie] lr : mhi_driver_unregister+0x74/0x230 [wlan_cnss_core_pcie] 有时报错又如下: pc : mhi_match+0x24/0x5c [wlan_cnss_core_pcie] lr : mhi_match+0x34/0x5c [wlan_cnss_core_pcie]

根据反汇编结果进行溯源最终调用点为mhi_match函数
解决方式是将代码此处注释即可

drivers/core_tech_modules/mhi/core/init.c static int mhi_match(struct device *dev, struct device_driver *drv) { struct mhi_device *mhi_dev = to_mhi_device(dev); struct mhi_driver *mhi_drv = to_mhi_driver(drv); struct mhi_device_id *id; /* * If the device is a controller type then there is no client driver * associated with it */ if (mhi_dev->dev_type == MHI_DEVICE_CONTROLLER) return 0; /* for (id = mhi_drv->id_table; id->chan[0]; id++) if (!strcmp(mhi_dev->name, id->chan)) { mhi_dev->id = id; return 1; } */ return 1; }

DMA内存分配错误
然后重新编译驱动不会报上面这错误了,但是又报了分配内存失败如下

wlan: [444:W:QDF] qdf_aligned_mem_alloc_consistent_fl: Failed to alloc 196608B @ dp_prealloc_init:1150 wlan: [444:W:DP] dp_prealloc_init: i 1: unable to preallocate 196608 bytes memory! wlan: [444:E:DP] dp_prealloc_init: unable to allocate consistent memory! wlan: [444:F:OBJMGR] wlan_objmgr_print_ref_all_objects_per_psoc: Ref counts of PEER wlan: [444:F:OBJMGR] wlan_objmgr_print_ref_all_objects_per_psoc: Ref counts of VDEV wlan: [444:F:OBJMGR] wlan_objmgr_print_ref_all_objects_per_psoc: Ref counts of PDEV wlan: [444:F:OBJMGR] wlan_objmgr_print_ref_all_objects_per_psoc: Ref counts of PSOC wlan: [444:F:OBJMGR] wlan_objmgr_print_ref_ids: Pending references of object wlan: [444:F:OBJMGR] wlan_objmgr_print_ref_ids: WLAN_OBJMGR_ID(0) -- 1 wlan: [444:F:OBJMGR] wlan_objmgr_print_ref_ids: WLAN_HDD_ID_OBJ_MGR(5) -- 1 wlan: [444:I:OBJMGR] wlan_objmgr_psoc_obj_delete: Logically deleting psoc 0 wlan: [444:I:OBJMGR] wlan_objmgr_psoc_obj_destroy: Physically deleting psoc 0 wlan: [444:I:QDF] wlan_cp_stats_cstats_deinit: Chipset Stats feature is disabled wlan: [444:E:HDD] __hdd_soc_probe: consecutive probe failures:1 [ 322.332221] cnss: Failed to probe host driver, err = -1

这主要是跟内核DMA机制有关,解决方式是注释内核这段代码

/kernel/dma/remap.c void *arch_dma_alloc(struct device *dev, size_t size, dma_addr_t *dma_handle, gfp_t flags, unsigned long attrs) { struct page *page = NULL; void *ret; size = PAGE_ALIGN(size); /* if (!gfpflags_allow_blocking(flags)) { ret = dma_alloc_from_pool(size, &page, flags); if (!ret) return NULL; goto done; } */ page = __dma_direct_alloc_pages(dev, size, dma_handle, flags, attrs);

修改内核后重新编译内核并烧录到板子上
再次加载驱动成功,有wlan节点加载成功

root@DTS_zynqMP:~# ifconfig -a eth0 Link encap:Ethernet HWaddr 00:0A:35:00:22:01 UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:3 errors:0 dropped:0 overruns:0 frame:0 TX packets:9 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:138 (138.0 B) TX bytes:2358 (2.3 KiB) Interrupt:28 lo Link encap:Local Loopback inet addr:127.0.0.1 Mask:255.0.0.0 inet6 addr: ::1/128 Scope:Host UP LOOPBACK RUNNING MTU:65536 Metric:1 RX packets:0 errors:0 dropped:0 overruns:0 frame:0 TX packets:0 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:0 (0.0 B) TX bytes:0 (0.0 B) p2p0 Link encap:Ethernet HWaddr 02:03:7F:93:63:15 BROADCAST MULTICAST MTU:1500 Metric:1 RX packets:0 errors:0 dropped:0 overruns:0 frame:0 TX packets:0 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:3000 RX bytes:0 (0.0 B) TX bytes:0 (0.0 B) sit0 Link encap:IPv6-in-IPv4 NOARP MTU:1480 Metric:1 RX packets:0 errors:0 dropped:0 overruns:0 frame:0 TX packets:0 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:0 (0.0 B) TX bytes:0 (0.0 B) wifi-aware0 Link encap:Ethernet HWaddr 02:03:7F:94:63:15 BROADCAST MULTICAST MTU:1500 Metric:1 RX packets:0 errors:0 dropped:0 overruns:0 frame:0 TX packets:0 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:3000 RX bytes:0 (0.0 B) TX bytes:0 (0.0 B) wlan0 Link encap:Ethernet HWaddr 00:03:7F:12:63:15 BROADCAST MULTICAST MTU:1500 Metric:1 RX packets:0 errors:0 dropped:0 overruns:0 frame:0 TX packets:0 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:3000 RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)

Qogrisys专业致力于为客户提供完善的物联网连接解决方案,对于要求高品质高稳定性的客户,高通WIFI6E/WIFI7系列模组供客户选型,我们有经验丰富的软件支持工程师,能为客户在移植、适配中提供全面的技术支持。

http://www.gsyq.cn/news/146422.html

相关文章:

  • 北京小程序定制开发公司怎么选,北京本地定制服务商筛选4大指标微信小程序/寺庙小程序/活动小程序/电商小程序开发公司推荐 - 品牌2026
  • AudioShare终极指南:5步实现Windows音频无线传输到安卓设备
  • 3步解锁TikTok流量分析:终极SSL验证绕过指南
  • 南方网通渠道服务公司的实力怎样?行业口碑好不好? - 工业品牌热点
  • 基于stm32的香薰灯(有完整资料)
  • 2025年辨证准确智慧中医院管理系统推荐:专业的智慧中医院权威平台有哪些? - 工业推荐榜
  • 2025水性聚氨酯地坪源头工厂:优质水性聚氨酯地坪厂家清单 - 栗子测评
  • 深入剖析大数据领域Hadoop的故障排除方法
  • GPT-SoVITS训练资源估算工具开发:精准预估GPU需求
  • 金仓数据库发布能源行业Oracle迁移新方案,传输加密技术达国际安全标准
  • 国产数据库领航者:金仓数据库重塑企业数据根基,定义行业新标准
  • 如何用BiliRaffle一键搞定B站动态抽奖?2025最新免费神器全攻略
  • YACReader快速入门指南:跨平台漫画阅读器的完整使用教程
  • CTF选手必藏的50个实战解题思路,从零基础入门到精通,收藏这一篇就够了!
  • 企业全流程管理的变革:ERP系统革新
  • 【AI开发环境搭建必备】:Open-AutoGLM一键安装方案曝光
  • 7-Zip ZS:多算法压缩工具的终极解决方案
  • Android Root权限获取全攻略:APatch快速配置指南
  • 3大核心功能解析:为什么这款Mac美剧播放器能彻底改变你的观影体验?
  • YOLOv8 ROS如何解决机器人视觉感知的三大核心难题
  • 快速上手AITrack:头部追踪系统完整配置手册
  • 基于LM317的多串LED驱动电路设计方案
  • 专业电路设计工具DIY Layout Creator完整使用手册
  • YOLOv8 ROS 2 工程化部署与性能优化指南
  • 2025空间辐射整改技术哪家好?EMC整改电感工厂实力榜单 - 栗子测评
  • 支持UEFI的网络克隆工具——局域网批量装系统利器,替代Ghost的高效PXE网刻软件
  • Windows优化终极指南:一键加速系统的完整解决方案
  • XPath Helper Plus:网页元素定位的实战利器
  • 2025中山10大口碑留学咨询中介机构名单发布 - 栗子测评
  • GPT-SoVITS模型加密保护方案:防止未经授权使用