字符驱动程序-LCD驱动开发

一、驱动程序的框架

总共分为五步:

1、自己设定或者系统分配一个主设备号

2、创建一个file_operations结构体

这个结构体中有操作硬件的函数,比如drv_open、drv_read

3、写一个注册设备驱动函数

需要register_chrdev(major,name,结构体),这一步是构造函数,注册驱动的函数参数有三个很重要:分别是主设备号、驱动名字、驱动结构体

注:为了辅助的创建设备节点,还要写上两个函数

class_create、device_create

4、驱动入口,加载驱动

开始使用register_chrdev函数

5、出口,卸载驱动

使用unregister_chrdev函数

二、如何传输数据

1、从应用层到驱动层

使用

copy_to_user函数,驱动数据传输到应用层面

copy_from_user函数,应用层数据传输到驱动

2、从驱动层到硬件层

使用ioremap

使用内存映射的方法,进行寄存器操作

三、LCD驱动的开发

在这个驱动开发的时候,内核中已经有个fbmem.c文件函数把上面的框架弄好了,只需要我们做修改就OK了,fbmem.c这个文件不通用,不能用到所有的MPU和LCD上,所以需要我们修修改改。

fbmem.c只是一个框架,应用到不同的MPU上。起到一个框架中转的作用。

如何使用到不同的LCD上呢?

不同的硬件会在驱动程序中加入不同的fb_info结构体,通过这个fb_info去操作硬件

开发操作步骤:

用fbmem.c框架,然后编写具体的硬件相关驱动程序抽象的fb_info结构体。

1、抓住核心结构体fb_info

2、分配fb_info

使用framebuffer_alloc (为啥使用它分配)

3、设置fb_info

需要设置var、fbops、硬件相关内容,如上电啥的

4、注册fb_info \ 注销 fb_info

使用register_framebuffer(struct fb_info *fb_info)函数 (还没清除为啥是这个函数)

相关推荐
ShawnLiaoking11 小时前
华硕ROG LoadLibrary failed 126
驱动开发·显示器
charlie11451419115 小时前
2026年正点原子开发板移植方案——从0开始的Rootfs之路(5)WSL + NFS 网络启动踩坑记:从挂载失败到成功启动的完整历程
linux·网络·驱动开发·学习·嵌入式·嵌入式linux
爱写代码的汤二狗1 天前
第4章 载体选择:网站、小程序还是App?
人工智能·驱动开发·创业创新
charlie1145141912 天前
2026年正点原子开发板移植方案——从0开始的Rootfs之路(4)Rootfs 目录结构创建:Linux 文件系统的“骨架“
linux·驱动开发·学习·嵌入式开发·嵌入式linux
篮子里的玫瑰2 天前
智能天气时钟项目(一):ESP32 AT指令集详解与STM32驱动开发
驱动开发·stm32·嵌入式硬件
俊俊谢2 天前
LabVIEW如何排查和修复dll缺失问题
驱动开发·.net·labview·dll
musicml2 天前
从 Vibe Coding 到 SDD(规范驱动开发):AI 原生时代的软件工程化实践
人工智能·驱动开发·软件工程
不怕犯错,就怕不做2 天前
Linux中的IS_ENABLED 函数实战使用demo
linux·驱动开发·嵌入式硬件
the sun343 天前
我的第一个字符驱动:基于Linux2.4之前版本的古法编程
linux·驱动开发
charlie1145141913 天前
2026年正点原子开发板移植方案——从0开始的Rootfs之路(3)inittab 与 init 系统:Linux 启动的“第一号进程“全解析
linux·驱动开发·学习·嵌入式开发·嵌入式linux