折騰了2天LCD驅動程序才發現系統其實已經移植了LCD驅動。設備名爲/dev/fb0. 白折騰。 linux
不過也有好處,搞了一遍基本瞭解LCD驅動的實現方法。 spa
這裏涉及到一個問題是如何把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,
}
}; it
最後聲明瞭一個8K空間的LCD寄存器地址。 io
從新編譯內核之後,驅動程序就能夠經過LCD寄存器的內核虛擬起始地址經過虛擬地址來訪問LCD寄存器了。 編譯