platform_get_resource(pdev, IORESOURCE_MEM, 0); 即可得到一个IO内存资源节点指针, 包括了地址的开始,结束地址等, 该IO内存的长度可用 resource_size() 来获取, 但这段资源只是一个描述, 想真正使用这段IO内存, 还要经过先申请, 再映射的过程。例如可使用devm_request_mem_region()申请出使用这段IO内存, ...
devm_ioremap_nocache 函数用于将物理地址映射到内核的虚拟地址空间,同时确保映射的内存区域不会被 CPU 缓存。这对于访问硬件设备的内存映射寄存器非常有用,因为缓存可能会导致数据不一致或不可预测的行为。 应用场景: 在内核驱动开发中,当需要直接访问硬件设备的寄存器时,通常会使用 devm_ioremap_nocache 函数来映射...
_gdir = devm_ioremap(&pdev->dev..., mem_gdir->start, resource_size(mem_gdir)); cur_led->va_iomuxc_mux = devm_ioremap(&pdev->dev...void __iomem *devm_ioremap(struct device *dev, resource_size_t offset, resource_size_t size)...devm_ioremap将获取到的寄存器地址转化为虚拟地址。
res = platform_get_resource(pdev, IORESOURCE_MEM, 0); ---分配memory资源 drvdata->virt_base = devm_ioremap_resource(&pdev->dev, res); if (IS_ERR(drvdata->virt_base)) return PTR_ERR(drvdata->virt_base); res = platform_get_resource(pdev, IORESOURCE_IRQ, 0); ---分配IRQ资源 if ...
void __iomem *virt_base;---访问硬件寄存器的基地址 struct device *dev;---和platform device建立联系 int irq; ---irq number,对于2416 pin control硬件而言,不需要irq资源 struct samsung_pin_ctrl *ctrl;---samsung pin controller描述符 struct pinctrl_desc pctl; ---...