linux LCD驱动 及 ARM 寄存器映射

别说谁变了你拦得住时间么 提交于 2019-12-04 14:43:44

折腾了2天LCD驱动程序才发现系统其实已经移植了LCD驱动。设备名为/dev/fb0. 白折腾。

不过也有好处,搞了一遍基本了解LCD驱动的实现方法。

这里涉及到一个问题是如何把ARM寄存器地址空间映射到linux内核虚拟地址空间的问题。是通过更新map_desc对象来实现的:

static struct map_desc at91sam9g45_io_desc[] __initdata = {
{
.virtual = AT91_VA_BASE_SYS,
.pfn = __phys_to_pfn(AT91_BASE_SYS),
.length = SZ_16K,
.type = MT_DEVICE,
}, {
.virtual = AT91_IO_VIRT_BASE - AT91SAM9G45_SRAM_SIZE,
.pfn = __phys_to_pfn(AT91SAM9G45_SRAM_BASE),
.length = AT91SAM9G45_SRAM_SIZE,
.type = MT_DEVICE,
}, {
.virtual = AT91_IO_VIRT_BASE - AT91SAM9G45_SRAM_SIZE - SZ_8K,
.pfn = __phys_to_pfn(AT91SAM9G45_LCDC_BASE),
.length = SZ_8K,
.type = MT_DEVICE,
}
};

最后声明了一个8K空间的LCD寄存器地址。

重新编译内核以后,驱动程序就可以通过LCD寄存器的内核虚拟起始地址通过虚拟地址来访问LCD寄存器了。



易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!