You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何更新基于devm_ioremap_nocache的内核模块?编译报错求助

内核6.1.55-lts中devm_ioremap_nocache替代方案指引

我正在研究一款Linux DMA驱动,为socfpga-6.1.55-lts内核版本编译时出现如下错误:

drivers/dma/msgdma/msgdma.c:342:25: error: implicit declaration of function ‘devm_ioremap_nocache’; did you mean ‘devm_ioremap_release’? [-Werror=implicit-function-declaration]
342 | data->msgdma0_reg = devm_ioremap_nocache(dev, region->start+MSGDMA0_OFFSET, MSGDMA_MAP_SIZE);
| ^~~~~~~~~~~~~~~~~~~~
| devm_ioremap_release

已知devm_ioremap_nocache已被弃用,找不到适配资料,想确认是否可以用devm_ioremap_wc替代?


替代方案说明

  • 直接替换可行性:在6.1系列内核中,devm_ioremap_nocache已被移除,devm_ioremap_wc是官方推荐的替代选项之一。它实现的写合并(Write-Combining)映射,既能满足非缓存访问的核心需求,又能保留写合并带来的性能优化,完全适配DMA设备寄存器访问的场景。
  • 特殊场景处理:如果原驱动的硬件严格要求禁止写合并(仅需纯非缓存映射),可以使用devm_ioremap配合非缓存属性的__ioremap,但这种方式需要手动管理映射生命周期,推荐优先使用devm_ioremap_wc。
  • 代码修改示例:将出错代码行替换为:
    data->msgdma0_reg = devm_ioremap_wc(dev, region->start+MSGDMA0_OFFSET, MSGDMA_MAP_SIZE);
    
  • 验证步骤:编译通过后,务必测试DMA传输功能,确认寄存器读写、数据传输的一致性,确保替换后的映射行为符合硬件预期。

内容的提问来源于stack exchange,提问作者K606

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.13 01:18:21