【发布时间】:2016-03-27 06:37:20
【问题描述】:
我已经浏览了以下主题,但仍有一些问题。
ioread32 followed by iowrite32 not giving same value
- 在链接中,我在哪里可以得到我的
base,它被定义为0xfed00000在帖子中? -
第二个参数应该放什么
void request_mem_region(unsigned long start, unsigned long len,char *name); -
第二个参数应该放什么
void *ioremap_nocache(unsigned long phys_addr, unsigned long size); 通过生成 Makefile 并生成内核模块,我应该使用
insmod然后dmesg来检查代码是否按预期工作,这样是否正确?在这种情况下,我应该在源代码中的
return 0;之前添加iounmap(virtual_base);吗?
谢谢
【问题讨论】:
-
(1) 它是外设的基(物理)地址。如果它是板上的分立芯片,请查阅电路板文档。如果它是 SoC 中的嵌入式外设,请查阅 SoC 数据表中的内存映射。 (2) & (3) 长度/大小是外设的寄存器集占用的字节数。有时会指定下一个外围设备的整个内存区域。 (5) 哪个返回语句?如果 ioremap() 在驱动程序的探测例程中执行,则 iounmap() 应该在探测器的错误出口 和 在驱动程序的删除例行公事。
-
@sawdust 谢谢,你能把它作为答案发给我吗?
-
@第(4)项,我认为唯一的方法是通过dmesg,还有其他更简单的方法来检查结果吗?
标签: linux memory io linux-device-driver