资料下载
coding无法使用浏览器打开,必须用git工具下载:
代码语言:javascript复制git clone https://e.coding.net/weidongshan/linux/doc_and_source_for_drivers.git
视频观看
百问网驱动大全
分析内核自带的LCD驱动程序_基于IMX6ULL
参考资料,GIT仓库里:
-
IMX6ULL开发板配套资料datasheetCore_boardCPUIMX6ULLRM.pdf
《Chapter 34 Enhanced LCD Interface (eLCDIF)》
- IMX6ULL的LCD裸机程序
IMX6ULLsource 3_LCD 5_参考的裸机源码 3_font_test
- 内核自带的IMX6ULL LCD驱动程序
- 驱动源码:
Linux-4.9.88driversvideofbdevmxsfb.c
- 设备树:
arch/arm/boot/dts/imx6ull.dtsi
arch/arm/boot/dts/100ask_imx6ull-14x14.dts
- 驱动源码:
1. 驱动程序框架
Linux驱动程序 = 驱动程序框架 硬件编程。 在前面已经基于QEMU编写了LCD驱动程序,对LCD驱动程序的框架已经分析清楚。 核心就是:
- 分配fb_info
- 设置fb_info
- 注册fb_info
- 硬件相关的设置
1.1 入口函数注册platform_driver
1.2 设备树有对应节点
1.3 probe函数分析
2. 编写硬件相关的代码
我们只需要针对IMX6ULL的编写硬件相关的代码,涉及3部分:
- GPIO设置
- LCD引脚
- 背光引脚
- 时钟设置
- 确定LCD控制器的时钟
- 根据LCD的DCLK计算相关时钟
- LCD控制器本身的设置
- 比如设置Framebuffer的地址
- 设置Framebuffer中数据格式、LCD数据格式
- 设置时序
2.1 GPIO设置
有两种方法:
- 直接读写相关寄存器
- 使用设备树,在设备树中设置pinctrl
- 本课程专注于LCD,所以使用pinctrl简化程序
设备树arch/arm/boot/dts/100ask_imx6ull-14x14.dts
中:
2.2 时钟设置
IMX6ULL的LCD控制器涉及2个时钟:
代码里直接使用时钟子系统的代码。
2.3 LCD控制器的配置
以设置分辨率为例。