coding无法使用浏览器打开,必须用git工具下载:
git clone https://e.coding.net/weidongshan/linux/doc_and_source_for_drivers.git
百问网技术交流群,百万嵌入式工程师聚集地: https://www.100ask.net/page/2248041
本节视频对应源码在GIT仓库中,位置如下(这2个文件是完全一样的):
doc_and_source_for_drivers\STM32MP157\source\A7\03_LCD\02_lcd_drv_qemu\lcd_drv.c
或:
doc_and_source_for_drivers\IMX6ULL\source\03_LCD\02_lcd_drv_qemu\lcd_drv.c
目前百问网主推的开发板是IMX6ULL、STM32MP157。 但是也推出了一块虚拟的开发板:IMX6ULL_QEMU,原因有2:
后面的视频里,会使用QEMU来讲解某些驱动程序。 注意:
Linux驱动 = 驱动框架 + 硬件操作。 如果硬件操作足够简单,我们就可以把精力放在驱动程序的框架上,这才是Linux的核心。 看看真实的LCD连线:
对于硬件操作,你至少要做这些事情:
总之,非常复杂。如果你换了芯片,这些工作又得重来一次。 如果你本身已经对阅读芯片手册很熟悉,对硬件操作很熟悉,那么学习时没必要把时间浪费在这方面。 使用QEMU,虚拟出一款简单的LCD控制器,可以简化硬件操作,让我们把精力放在驱动框架上。
百问网修改了QEMU的源码,实现了一个虚拟的LCD控制器,它的操作很简单。 只有4个寄存器,手册如下:
地址 | 寄存器 | 说明 |
---|---|---|
0x021C8000 | fb_base_phys | 用于设置Framebuffer的物理地址 |
0x021C8004 | fb_xres | 用于设置Framebuffer的X方向分辨率 |
0x021C8008 | fb_yres | 用于设置Framebuffer的Y方向分辨率 |
0x021C800C | fb_bpp | 用于设置Framebuffer中像素的位宽 |
目前这款虚拟的LCD分辨率为500x300,16bpp。暂时未支持其他参数。
参考:http://wiki.100ask.org/Qemu
参考:http://wiki.100ask.org/Qemu