当前位置:首页 > 嵌入式 > 嵌入式教程
[导读]嵌入式Linux下的LCD驱动程序设计与实现

随着嵌入式Linux的迅速发展,由于其没有昂贵的版权费,完全开放源代码,可裁减性与可移植性,因此是开发嵌入式产品的优秀操作系统平台。设备驱动程序是Linux内核的重要组成部分,运行在Linux内核底层,在内核源代码中占较大比例,驱动程序开发逐渐成为嵌入式软件开发中一项重要工作。应项目设计的需要完成了嵌入式Linux下的LCD驱动程序设计。

1 Linux下设备驱动程序
   
驱动程序从字面上可以理解为一类程序,这类程序的目的一般是驱动硬件正常工作,所以通常所说的驱动程序都是针对特定的硬件来编写的。Linux设备驱动程序是为特定的硬件提供给用户程序的一组标准化接口,它隐藏了设备工作的细节。Linux系统下驱动程序是运行在内核态的,是和内核连接在一起的程序。如果运行在用户态的应用程序想控制硬件设备,必须通过驱动程序来控制。
    Linux系统的设备分为3种类型,分别是字符设备、块设备和网络设备。文中所涉及的LCD驱动属于字符型设备驱动程序。在对字符设备发出读、写请求时,实际的硬件I/O一般就紧接着发生了。Linux系统访问设备就像访问文件一样,例如打开关闭设备系统调用open()和close()函数。在Linux内核中,字符设备使用struct file_operations结构来定义设备的各种操作集合。编写字符设备驱动程序,主要是实现str-uct file_operations结构中的各个函数。

2 基于FFamebuffer的LCD驱动程序设计
2.1 LCD简介

    设计中采用的嵌入式微处理器是Samsung公司的S3C2410,LCD控制器主要用于传输显示数据和产生控制信号,用户只需通过读写一系列寄存器即可完成配置和显示控制,图1是S3C2410平台LCD控制器的结构图。


    其各个信号描述及功能如表1所示。


2.2 Framebutfvr概述
    Framebuffer即帧缓冲,是图形设备的一个提取或抽象,他把一些视频设备描绘成一个缓冲区,允许应用程序通过Framebuffer所定义的良好接口访问图形设备。Framebuffer是出现在Linux2.2.xx内核当中的一种驱动程序接口。Linux工作在保护模式下,所以用户态进程无法像DOS那样使用显卡BIOS里提供的中断调用来实现直接写屏,Linux抽象出Framebuffer这个设备供用户态进程实现直接写屏。Framebuffer机制模仿显卡的功能,将显卡硬件结构抽象化,可以通过Framebuffer的读写直接对显存进行操作。用户可以将Framebuffer看成是显示内存的一个映像,将其映射到进程地址空间之后,就可以直接进行读写操作,而写操作可以立即反应在屏幕上。这种操作是抽象、统一的,用户不必关心物理显存的位置、换页机制等具体细节,这些由Framebuffer设备驱动完成。[!--empirenews.page--]
2.3 驱动程序设计与实现
2.3.1 LCD驱动的模块加载与卸载

    LCD作为一个相对独立的硬件单元,被认定为平台设备,在驱动模块加载和卸载函数中,就分别注册和注销对应的platform_driver。
2.3.2 LCD驱动的探测与移除函数
   
探测函数probe主要完成LCD控制器初始化的工作,包括对fb_info结构成员的初始化、内存分配、寄存器的配置、Framebuffer的注册等。模块卸载函数中对平台驱动的注销会导致其中移除函数的执行,这个函数释放显示缓冲区并注销帧缓冲设备。
2.3.3 LCD驱动的fb_ops成员函数
   
在程序设计里,定义LCD驱动的fb_ops结构体和相关函数功能如下所示

    可以看出,fb_ops()结构体类似于file_opera tions()结构体,提供了一个帧缓冲设备的统一接口。s3c2410_ops()函数给出了标准接口到针对具体硬件操作函数的跳转指针。
2.3.4 Framebuffer设备驱动程序的设计
   
驱动程序主要完成的工作有以下5部分:
    (1)编写初始化函数
    Framebuffer驱动首先要初始化LCD控制器,通过相关寄存器来设置LCD相对应的显示模式和颜色数,然后分配显示缓冲区。通常用vmall-oc()函数分配一段连续空间,缓冲区的大小可以用“点阵行数×点阵列数×一个像素的位数/8”计算得到。
    如果使用模块化加载方式,加载LCD驱动模块时,系统调用fb_init()函数。卸载LCD驱动模块时,系统首先调用unregister_framebuffer()取消注册,然后释放显示缓冲区的内存。
    (2)编写成员函数
    主要负责编写fb_ops()对应的底层操作函数。
    (3)读/写(read/write)
    完成对帧缓冲区的读写操作。
    (4)映射(map)
    Linux有内核空间和用户空间,平时工作在保护模式,每个应用程序进程都有自己的虚拟地址空间,应用程序不能直接访问物理缓冲地址。但是,Linux在文件操作接口(file_operations)中提供了地址映射(mmap)操作,它可以将文件的内容映射到用户空间,这样用户就可以通过读写这段地址来访问缓冲区,并在屏幕上绘图。
    (5)输入/输出控制
    设备文件的ioctl()调用可以读取和设置显示设备的参数,如分辨率、支持颜色数、屏幕大小等。

3 结束语
   
在编写完驱动程序后,将该驱动程序以加载模块的方式进行编译,并将编译好的LCD设备驱动下载到目标板上,通过编写一个简单的测试Framebuffer设备驱动的应用程序,实现了设备的打开、关闭、内存映射和iotcl等具体操作,完成了在LCD液晶屏不同行上绘制不同颜色,通过编译此程序,在目标板上运行,即可在LCD上显示彩色条纹,这就完成了驱动程序的设计要求。

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

全面的端到端产品让每位用户充分体验数字孪生技术的强大力量 上海2022年10月21日 /美通社/ -- 近日, Altair(纳斯达克股票代码:ALTR)宣布推出一款全面的数字孪生解决方案。此项解决方案具有强大的连接及...

关键字: AIR BSP 仿真 PC

立陶宛维尔纽斯2022年10月21日 /美通社/ -- IoT解决方案大赛年度IoT项目竞赛第三次举行,评出了过去12个月中的12个最佳项目。获胜公司成功创建了最实用的解决方案,采用远程信息处理和IoT技术在不同的行业实...

关键字: IoT TE 信息处理 BSP

北京2022年10月20日 /美通社/ -- 第三季度财报要点 集团有机销售额[1]同比增长3%,总销售额为680亿瑞典克朗(2021年同期为563亿瑞典克朗),其中Vonage自7月21日起贡献了29亿瑞典克朗...

关键字: 爱立信 BSP GE 移动网络

香港2022年10月20日 /美通社/ -- 华钦科技集团公司(纳斯达克代码:CLPS,以下简称"华钦科技"或"集团")于今日公布2022下半财年(2022年1月1日至2022年6...

关键字: BSP SHARE RS NET

成都2022年10月20日 /美通社/ -- 十年来,我国保险业实现了跨越式的发展,在服务国计民生、服务经济社会发展中发挥着越来越大的作用。 保险的本质是服务,积极呼应的是人民生老病死的现实利益问题,不断提升...

关键字: 温度 BSP 自动化 互联网+

美国纽约州阿蒙克2022年10月20日 /美通社/ -- IBM(NYSE: IBM)发布 2022 年第三季度业绩报告。 IBM 董事长兼首席执行官 Arvind Kri...

关键字: IBM 软件 BSP 云平台

成都2022年10月19日 /美通社/ -- 近期,平安养老险积极筹备个人养老金的产品设计和系统开发工作,发展多样化的养老金融产品,推动商业养老保险、个人养老金、专属商业养老保险等产品供给。 搭养老政策东风 ...

关键字: 温度 BSP 东风 大众

广东佛山2022年10月19日 /美通社/ -- 空间是人居生活的基础单元,承载着生存与活动的最基本功能。而对于理想空间的解构意义却在物理性容器之外,体现出人们对于空间和生活深层关系的思考,同时也塑造着人与空间的新型连接...

关键字: 温度 BSP 智能化 进程

上海2022年10月19日 /美通社/ -- 10月17日晚间,安集科技披露业绩预告。今年前三季度,公司预计实现营业收入7.54亿元至8.33亿元,同比增长60.24%至77.03%;归母净利润预计为1.73亿...

关键字: 电子 安集科技 BSP EPS

北京2022年10月19日 /美通社/ -- 10月18日,北京市经济和信息化局发布2022年度第一批北京市市级企业技术中心创建名单的通知,诺诚健华正式获得"北京市企业技术中心"认定。 北京市企业技...

关键字: BSP ARMA COM 代码

嵌入式教程

6897 篇文章

关注

发布文章

编辑精选

技术子站

关闭