轻量级嵌入式Linux图形驱动程序与图形用户接口
更新时间:2023-08-05 17:36:01 阅读量: 实用文档 文档下载
第28卷第3期
2008年3月
北京理工大学学报
Transactionsof
V01.Z8
NO.3
BeijingInstituteofTechnology
Mar.2008
轻量级嵌入式Linux图形驱动程序与图形用户接口
金锋,
武志辉
(北京理工大学信息科学技术学院自动控制系,北京100081)
摘
要:旨在研究轻量级嵌入式Linux图形驱动程序与图形用户接口的设计方法.在ARM9平台下,通过对显示
模块sedl335的Linux图形驱动程序及图形用户接口的描述,介绍了基于Linux图形驱动程序及轻量级图形用户接口的编写方法,实现了一套轻量级的图形用户接口.应用结果表明,该系统具有良好的扩展性、稳定性和较快的响应速度,能便捷地应用于类似的系统.
关键词:轻量级;嵌入式Linux;图形驱动程序;图形用户接口中图分类号:TN
79
文献标识码:A文章编号:1001-0645(2008)03-0233-04
LightweightGraphicsDeviceDriverandGraphicalUser
InterfaceBasedon
JINFeng.
Embedded
Zhi—hui
Linux
WU
(DepartmentofAutomaticContol,SchoolofInformationScienceandTechnology,
BeijingInstituteofTechnology,Beijing100081,China)
Abstract:A
newlightweight
on
graphics
user
interface(GUI)andsystem,sedl335
graphics
devicedriver
as
were
introducedbasedthe
platformbe
ofARM9
to
wasincludedthe
graphics
modular.Thesystem
can
applied
similarsystemswithmoreconvenienceandprovide
comprehensiveapplicationvalueforitsadvantagesinexcellentexpansibility,highstabilityand
fastresponsespeed.
Keywords:lightweightsystem;embeddedLinux;graphicsdevicedriver;graphical
user
interface
废气监测系统已逐渐向小型化、智能化、环保化靠拢,作者研究的某废气监测系统即是这一大趋势的产物.该系统采用ARM9为核心,操作系统采用Linux,系统主要包括数据采集、数据分析和显示3部分,作者研究主要显示部分的设计.传统单片机显示部分代码可重用度不高,而Linux自带的Framebuff在某些系统中显得过于臃肿,所以采用自行设计的图形用户接口.
驱动程序在Linux内核里扮演着特殊的角色,它们是截然不同的“黑盒子”,能使一部分硬件响应定义好的编程接口.驱动程序完全隐藏了设备工作的细节,用户的活动通过一套标准化的调用程序进行,这些调用与驱动是相互独立的.设备驱动的作
收稿日期:2007一07—26
用是将这些调用映射到和实际硬件设备相关的操作上[1].图形用户接口位于用户应用程序和图形驱动程序之间,是能快速部署的中间层软件.作者设计了基于sedl335的图形驱动程序和独立的图形用户接口,该驱动程序及图形用户接口已应用于某废气监测系统.1
图形驱动程序与图形用户接口
拥有图形用户界面的计算机通过窗口系统管理
应用程序在屏幕上的显示.图形用户界面系统的组成结构如图1所示[2].其中Application为用户应用程序,Toolkit和WindowingSystem可以理解为图形用户接口,OperatingSystem包含图形驱动.
作者简介:金锋(1970一),女,博士后,教授,E-mail:jinfen9226@163.com.
万方数据
234
北京理工大学学报
第28卷
作者进行了ToolKit,WindowingSystem以及操作系统中图形驱动部分的研究工作,并已经应用于某废气监测系统用户应用程序中.
[至Ap巫plica丑tion
[]画互]
匝垂亟至习
匝三亘困
图1
图形用户界面系统的组成
Fiu.1
ComDonentsof垡raDhics
user
interface
2图形驱动程序设计
2.1
Linux设备驱动程序的概念
系统调用是通过操作系统内核和应用程序之间
的接口,设备驱动程序是操作系统内核和机器硬件之间的接口.设备驱动程序为应用程序屏蔽了硬件的细节,这样对应用程序来说,硬件设备只是一个设备文件,应用程序可以像操作普通文件一样对硬件设备进行操作.设备驱动程序是内核的一部分,它完成以下工作:
①对设备初始化和释放;
②将数据从内核传送到硬件和从硬件读取数据;
③读取应用程序传送给设备文件的数据和回送应用程序请求的数据;
④检测和处理设备出现的错误.
在Linux操作系统下有两类主要的设备文件类型,一种是字符设备,另一种是块设备[3].
以下对本驱动程序中的重要部分予以说明.
2.2
i/o内存的二次映射及释放
使用I/o内存时最普遍的硬件和软件处理方
式如下:设备对应于某些约定的物理地址,但是CPU并没有预先定义访问它们的虚拟地址.这些约定的物理地址可以是硬件连接到设备上的,也可以是在启动时由系统固件(如BIoS)指定的.不管哪种方式,为了让软件可以访问I/0内存,必须有一种把虚拟地址赋予设备的方法.这个任务由iore—map函数完成Hj.
#include<asm/io.h>
void*ioremap(unsignedlongphys_addr.un—
signedlongsize);
万
方数据voidiounmap(void*addr)l
ioremap的作用是把一个物理内存地址点映射为一个内核指针,被映射数据的长度由size参数设定.本模块的功能是把一块SRAM区域二次映射到一个可以从驱动程序里访问的虚拟地址上去.
必须在卸载模块时解除映射关系和释放二次映射的区域.把ioremap函数返回的那个指针传递到iounmap函数可以解除映射关系,即
voidiounmap(void*address);
一旦有了ioremap和iounmap,设备驱动程序就能访问任何I/o内存地址,而不管它是否直接映射到虚拟地址空间.
本驱动中使用:
m—psedl335一(psedl335一dev)ioremap—no—
cache
(sedl335一sys—addr,ebi—sedl335一size);iounmap(m—psedl335);
其中ioremap—nocache将在一init方法中被调用,实现二次映射;iounmap将在模块卸载时调用,解除映射关系和释放二次映射的区域.
2.3
填充file_operations结构
由于用户进程是通过设备文件同硬件打交道
的,所以对设备文件的操作方式是一些系统调用,如open,read,write,close,……,而不是fopen,fread,……,但是要把系统调用和驱动程序关联起来,需要填充file_operations数据结构:
struct
file_operationssedl335—.fops=
{
owner:this—module,
open:
sedl335一open,release:sedl335一release,ioctl:sedl335一ioctl,write:
sedl335一write,
};
该结构的每一个成员名字都对应着一个系统调用.用户进程利用系统调用对设备文件进行诸如read/write操作时,系统调用通过设备文件的主设备号找到相应的设备驱动程序,然后读取这个数据结构相应的函数指针,然后把控制权交给该函数.
2.4
图形驱动程序中设备操作的重要函数sedl335将64kB显示RAM分成文本显示特
性区和图形显示特性区,在文本显示特性区RAM中每个字节的数据都认为是字符代码,在图形显示
第3期金锋等:轻量级嵌入式Linux图形驱动程序与图形用户接口
235
特性区RAM中每个字节的数据直接被送到液晶显示模块上,这为绘图和输出字符以及汉字提供了方便.sedl335提供了丰富的指令集,选择其中一部分即可满足系统的需要.此外,sedl335分为4个显示区,可满足单屏和双屏的需要,在驱动程序中采用了单屏显示,第一显示区用作文本显示,第三显示区用作图形显示.sedl335一ioctl函数是驱动程序中重要函数之一,完成开/背光、设置显示层以及坐标、画图等功能.sedl335一ioctl结构如图2所示,sedl335一ioctl函数定义如下:
staticintsedl335一ioctl(structinode*inode,
struct
file*file,unsignedintcmd,unsignedlong
arg){};
cage
LCD_CLEAR:清屏将设备从设备数
组中读取出来
Pa马e
BACKLIGHT_OFF:关背光
pflko,e,BACKLIGHT_ON:开背光
case
COL_j'ARA_GET:读当前显示层和坐标
判断ioctl命令
c∞eswitch(cmd)
COL_PARA_SET:设置显示层和坐标c∞e
CUESOR—DIR—SET:设置光标自动移动case
SET_LINE_DRAW:画直线case
INVERT.-DIS_ON:反显指定区域
case
INVERT_DIS_OFF:取消反显指定区域
图2
sedl335一ioctl方法
Fig.2
sedl335..ioctlmethod
3
图形用户接口
图形用户接口(graphical
user
intedace,GUI),
通常人机交互图形化用户界面设计经常读作“goo-ee”,准确来说GUI就是屏幕产品的视觉体验和互动操作部分.
现在面向嵌入式Linux系统的图形用户界面包括:MicoroWindows/NanoX,OpenGUI,MiniGUI,ucGUI,LGUI,swGUI等.嵌入式GUI具备以下特点:
①体积小;
②运行时耗用系统资源小;
③上层接口与硬件无关,高度可移植;④高可靠性;
⑤在某些应用场合应具备实时性.3.1嵌入式Linux的GUI系统底层实现基础
一个能够移植到多种硬件平台上的嵌入式GUI系统,应用方面至少抽象出两类设备:基于图
万
方数据形显示设备(如VGA卡)的图形抽象层GAL
(graphicabstract
layer)和基于输入设备(如键盘,
触摸层等)的输入抽象层IAL(input
abstractlay—
er).GAL层完成系统对具体的显示硬件设备的操作,尽量隐蔽各种不同硬件的技术实现细节,为程序开发人员提供统一的图形编程接口.IAL层则需要实现对于各类不同输入设备的控制操作,提供统一的调用接口.GAL层与IAL层的设计概念如图3所示.它们可以极大地提高嵌入式GUI程序的可移植性.
API编程接口嵌入式GUI
图3可移植嵌入式GUI的结构
Fig.3
Structureof
portable
embeddedGUI
3.2图形用户接口的特点
①对嵌入式系统,采用C语言编程以提高程序运行速度.
②对IAL层简化,去掉对鼠标设备的支持以适应某些自动设备的需要..
③支持点阵字库.
④对屏幕显示用structwindow进行封装.⑤对每个按钮、输入框、静态框等用structcontroller进行封装.
⑥整个系统采用多线程,void*read—key—
thread()线程读取用户输入;void*screen—thread()线程进行屏幕刷新等操作;void*back—compute_thread()线程对数据进行处理操作.3.3输入及用户指令
对于用户指令及用户输入(对于读取函数来说都只表现为单个字符),使用单一线程void*read—key_thread()进行读取,采用无阻塞方式.并把读到的指令或者用户输入存入缓存,使用堆栈式数据结构,为防止void*read—key—thread()和void*back_compute_thread()对输入缓存读取时发生竞争,使用pthread—mutex—lock(&m—mutex)函数对输入缓存进行控制.
3.4用户设定输入处理函数
采用类似于WindowsTM的窗口回调函数,便于用户设定自己的消息处理函数.每一个控件(按钮、输入框、静态框等)也可以定义各自的消息处理函
236
北京理工大学学报
第28卷
数,更方便用户针对各种不同应用编写特定的消息处理函数.各种回调函数的调用级别如图4所示.
口具有以下特点:
①具有良好的扩展性、较高的稳定性和较快的响应速度;
②适用于工业领域;
③对窗口以及控件有良好的封装.
嚣
但是,本系统在对字符集的支持、窗口间的协调等方面还需进一步改进.
参考文献:
E13
Corbet
J,RubiniA,Kroah-hartmanG.Linuxdevice
drivers[M].Cambridge:O’ReillyMedia,2005:1—2.[23Feynman.MiniGui
programming
guide[M].Beijing:
FeynmanSoftwareTechnologyCo.,Ltd,2006:31—32.
回
图4回调函数
Fig.4
Callbackfunctions
[33
Corbet
J,Rubini
A,Kroah-hartmanG.Linuxdevice
drivers[M].Cambridge:O’ReillyMedia,2005:5—7.[4]Matthew
N,Stone
R.Linux程序设计[M].杨晓云,王
建桥,杨涛,等译.北京:机械工业出版社,2002.
MatthewN,StoneR.DesignofLinuxprogramming
[M].YangXiaoyun,WangJianqiao,Yang
4
Tao,etal
结论
transl.Beijing:ChinaMachinePress,2002.(inChi—
nese)
本驱动程序及图形用户接口已应用于某废气监测系统用户应用程序中,作者所开发的图形用户接
(责任编辑:康晓伟)
(上接第210面)
4
社,2005.
YuFan,LinYi.Vehicle
dynamics[M].Beijing:China
结论
MachinePress。2005.(inChinese)
针对传统的转向系统转向性能的不足即“转向特性随车速以及转向盘转角的变化,传动比不变,给驾驶员带来较大的体力和精神负担”的问题,提出了3种线控转向变传动比控制规律,有效改善了车辆的转向特性.并对各种变传动比控制方案对整车操纵稳定性能的影响进行了分析,比较了各种变传动比控制规律的优缺点.仿真结果表明:基于方案3设置的变传动比控制规律整体性能最好.
参考文献:
[3]ChenJS.Control
[C]//SAE
ofelectric
powersteeringsystems
Automo—
Paper.Detroit,USA:Societyof
tiveEngineering,1998:981116.
[43
FarhadS.Acontrolwire
systemmethodologyfor
steer
by
systems[C]//SAE
paper.Detroit,USA:Society
ofAutomotiveEngineering,2004:2004一Ol一1106.
[5]Motoaki
Hosaka,ToshiyukiMurakami.Yaw
ratecon—
trolofelectricvehicleusingsteer-by-wireThe8thIEEEInternationaltion
systemiC]//
Workshop,AdvancedMo—
Press,2004:
Contr01.Kawasaki,Japan:IEEE
31-34.
[1]余志生.汽车理论[M].3版.北京:机械工业出版
社,2000.
Yu
[6]TanakaT,DaikokuA,ImagiA,eta1.Anadvanced
e—
lectricalpowersteeringmotor[C]//SAE
Paper.De—
Zhisheng.Automobiletheory[M].3rded.Beijing:MachinePress,2000.(inChinese)
troit,USA:Society
2000一01一0824.
of
AutomotiveEngineering,2000:
China
[2]喻凡,林逸.汽车系统动力学[M].北京:机械工业出版
(责任编辑:匡梅)
万方数据
轻量级嵌入式Linux图形驱动程序与图形用户接口
作者:作者单位:刊名:英文刊名:年,卷(期):被引用次数:
金锋, 武志辉, JIN Feng, WU Zhi-hui
北京理工大学信息科学技术学院自动控制系,北京,100081北京理工大学学报
TRANSACTIONS OF BEIJING INSTITUTE OF TECHNOLOGY2008,28(3)2次
参考文献(4条)
1.Corbet J;Rubini A;Kroah-hartman G Linux device drivers 20052.Feynman MiniGui programming guide 2006
3.Corbet J;Rubini A;Kroah-hartman G Linux device drivers 20054.Matthew N;Stone R;杨晓云;王建桥,杨涛 Linux程序设计 2002
本文读者也读过(1条)
1. 靳京.桑楠.刘一.JIN Jing.SANG Nan.LIU Yi 基于XML的嵌入式Linux系统用户界面定制[期刊论文]-电子科技大学学报2007,36(3)
引证文献(3条)
1.代鑫.张承宁.王志福.李军求 基于CAN总线通讯混合动力挖掘机显示终端开发[期刊论文]-现代科学仪器 2010(2)2.赵小欢.夏靖波.李明辉 基于ARM和FPGA的视频监控系统设计[期刊论文]-液晶与显示 2010(1)3.苏锦.王震.陈嘉丰 基于arm的虚拟直流电测量仪器[期刊论文]-现代电子技术 2013(8)
本文链接:http://www.77cn.com.cn/Periodical_bjlgdxxb200803012.aspx
正在阅读:
秋天作文700字07-01
高三英语试题精选2018届高考英语语法专项复习题(含答案) - 001-11
07-082汇编语言程序设计实验指导书11-28
基于PowerPC双核处理器嵌入式Linux系统开发05-22
机械基础综合课程设计任务书04-16
萨提亚的冰山理论03-10
盾构施工工序控制手册 (A4)04-26
- 教学能力大赛决赛获奖-教学实施报告-(完整图文版)
- 互联网+数据中心行业分析报告
- 2017上海杨浦区高三一模数学试题及答案
- 招商部差旅接待管理制度(4-25)
- 学生游玩安全注意事项
- 学生信息管理系统(文档模板供参考)
- 叉车门架有限元分析及系统设计
- 2014帮助残疾人志愿者服务情况记录
- 叶绿体中色素的提取和分离实验
- 中国食物成分表2020年最新权威完整改进版
- 推动国土资源领域生态文明建设
- 给水管道冲洗和消毒记录
- 计算机软件专业自我评价
- 高中数学必修1-5知识点归纳
- 2018-2022年中国第五代移动通信技术(5G)产业深度分析及发展前景研究报告发展趋势(目录)
- 生产车间巡查制度
- 2018版中国光热发电行业深度研究报告目录
- (通用)2019年中考数学总复习 第一章 第四节 数的开方与二次根式课件
- 2017_2018学年高中语文第二单元第4课说数课件粤教版
- 上市新药Lumateperone(卢美哌隆)合成检索总结报告
- 图形
- 轻量级
- 嵌入式
- 驱动程序
- 接口
- 用户
- Linux
- QQ相册图片上传教程
- 2018第十期防汛、防溺水简报
- 绍兴文理学院大学生学科竞赛管理办法(征询稿)
- 新实施的房建工程类规范
- 少先队队室建设要求
- 关于宽容的经典名人名言
- 新国家审计准则解析
- 辽宁省阜新市2014年中考作文题及满分作文范文
- Eclipse安装SVN插件方式简明介绍
- 小学奥数举一反三第一次摸底测试题
- 生辰八字取名字 四柱取名步骤及方法详解
- 泰拉瑞亚怎么获取天使翅膀 获取天使翅膀攻略
- 我为武汉教育发展献一策
- 中国特色社会主义社会建设之一:社会建设的基本理论与实践
- 潍坊中百益家园超市有限公司_中标190920
- 沈阳市工伤职工旧伤复发及康复治疗审批表
- 计划生育对中国社会与安全的影响
- 新选举法的五大民主看点
- 政府工作报告:非常时期决胜蓝图
- 政府采购法实施条例全国知识竞赛试题及答案【全部正确】