字符驱动程序-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)函数 (还没清除为啥是这个函数)

相关推荐
阿拉斯攀登2 小时前
【RK3576 安卓 JNI/NDK 系列 09】RK3576 实战(三):JNI 调用 librga 实现 2D 硬件加速图像处理
android·驱动开发·rk3568·瑞芯微·rk安卓驱动·rk3576 rga加速
阿拉斯攀登15 小时前
第 19 篇 驱动性能优化与功耗优化实战
android·驱动开发·瑞芯微·嵌入式驱动·安卓驱动
道一云黑板报16 小时前
技术拆解:AI低代码架构设计与全链路落地实现
人工智能·驱动开发·低代码·ai·企业微信·ai编程·代码规范
LXY_BUAA17 小时前
《嵌入式操作系统》_高级字符设备驱动_20260316
linux·运维·服务器·驱动开发
春日见20 小时前
Matlab快速入门 基础语法教学
java·开发语言·驱动开发·matlab·docker·计算机外设
阿拉斯攀登20 小时前
第 20 篇 RK 平台 NPU / 硬件编解码驱动适配与安卓调用
android·驱动开发·瑞芯微·rk安卓驱动
路溪非溪1 天前
Linux下iw工具的使用总结
linux·网络·arm开发·驱动开发
17(无规则自律)1 天前
【Linux驱动实战】:最简单的内核模块
linux·c语言·驱动开发·嵌入式硬件
阿拉斯攀登1 天前
第 12 篇 RK 平台安卓驱动实战 5:SPI 设备驱动开发,以 SPI 屏 / Flash 为例
android·驱动开发·rk3568·瑞芯微·嵌入式驱动·安卓驱动·spi 设备驱动
路溪非溪1 天前
关于Linux中的日志问题
linux·arm开发·驱动开发