微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > 基于ARM&Linux图形用户界面开发平台的设计

基于ARM&Linux图形用户界面开发平台的设计

时间:04-20 来源:互联网 点击:

一个定义良好的内部编程接口,这些接口完全隐藏了设备的工作细节。用户的操作通过一组标准化的调用执行,而这些调用独立于特定的驱动程序。Linux系统的设备分为字符、块和网络设备三种。字符设备是指存取时没有缓存的设备。块设备的读写都有缓存来支持,并且块设备必须能够随机存龋网络设备在Linux里做专门的处理。

3。2。1LCD控制器S1D13506驱动程序的开发①帧缓冲区驱动程序接口LCD控制器的功能就是产生驱动信号,进而驱动LCD。用户只需要读写一系列寄存器,就可以配置和显示驱动,在配置LCD控制器中最重要的一步是帧缓冲区的指定。帧缓冲区为图像硬件设备提供了一种抽象化处理,它代表了一些视频硬件设备,允许应用软件通过定义明确的界面来访问图像硬件设备。用户程序只要与帧缓冲区驱动程序抽象出来的接口打交道,就可以把要显示的内容从缓冲区中读出,从而显示到屏幕上。

在Framebuffer(帧缓冲)驱动程序里最核心的结构体是structfb_info,它记录了当前Framebuffer硬件设备的状态,其定义在Linux的include/linux/fb。h中,其中主要的结构体有:(1)structfb_fix_screeninfo:定义了显示设备自身的属性,如屏幕缓冲区的物理地址和长度等。(2)structfb_var_screeninfo:记录了桢缓冲区设备和指定显示模式的可修改信息,主要包括屏幕的分辨率、颜色数和一些时序变量。实际的编程中,通过赋值来设置这两个结构体的相关参数。

②LCD初始化Linux下驱动程序的入口是module_init(),因此初始化通过调用module_init(13506fb_init)函数来实现。13506fb_init初始化的部分代码主要完成以下工作:⑴对LCD的背光灯进行点亮。LCD显示是一种被动显示模式,它不能发光,只能依靠控制透射或反射周围环境的光达到显示目的,因此必须通过写寄存器,实现背光灯的点亮。⑵本系统在13506。h头文件里用了一个数组对寄存器的设置作了一个预定义,然后再初始化函数里利用两个实际参数写入,从而设定寄存器的值。寄存器设置的值为:static13506_REGSas1dregs[]={…{0x0032,0x27},{0x0038,0xEF},{0x0039,0x0}…}。其中数组里每个元素的第一个值代表寄存器的名称,第二个值代表要设定的值。这里32h设置LCD显示的水平象素值320;38h,39h分别设置成0xEF和0x0,即设置垂直象素值240。除了这三个寄存器外,34h和3Ah这两个寄存器也会对分辨率有影响。

③LCD驱动“文件层-驱动层”函数的实现帧缓冲设备属于字符设备,要实现“文件层-驱动层”接口的方式来对LCD进行驱动就必须对file_operation数据结构fb_ops进行填充,并实现其对应的成员函数。本系统移植的Linux下include/linux/fb。h中定义了帧缓冲区的文件操作结构体structfb_ops。该结构中的每一个字段都必须指向驱动程序中实现特定操作的函数,对于不支持的操作字段可以置为NULL,或留到后续开发时添加。针对本系统的LCD,需要特定的操作成员函数如下:staticstructfb_ops13506fb_ops={owner:THIS_MODULE,fb_open:13506fb_open,fb_get_fix:13506fb_get_fix,fb_get_var:13506fb_get_var,fb_set_var:13506fb_set_var,fb_get_cmap:13506fb_get_cmap,fb_set_cmap:13506fb_set_cmap,fb_mmap:13506_mmap,};至此,LCD的驱动程序框架已完成,所剩工作就是把一些调用的函数写完整,编写好驱动程序后用arm-linux-gcc交叉编译工具编译驱动模块,之后动态加载或静态编译进内核。

3。2。2USB驱动程序开发通用串行总线(USB)是一种外部总线结构,特点是接口统一、易于使用、方便扩展、支持热插拔(hotplug)和PNP(Plug-and-Play),简化了计算机与不同类型外设间的连接,一经推出就得到计算机外设硬件制造商的广泛采用。Linux作为一个占有相当市场份额的开源操作系统,自2。2。18版本内核以来,就加入了对USB的支持。

USB是一种分层总线结构,USB设备和主机之间的信息传输通过USB控制器实现。USB控制器的驱动分为三层,由底至上为:USB主控制器驱动、USB驱动和USB设备类驱动。

处于最底层USB主机控制器驱动(HCD)是USB主机直接与硬件交互的软件模块。Linux-2。4内核中的USB支持2种主控制器接口:通用主控制器接口(UHCI)和开放控制器接口(OHCI)。主控制器驱动为上层提供统一的接口,屏蔽掉硬件的具体细节。具体实现的功能有:主控制器硬件初始化;为USBD层提供相应的接口函数;提供集线器设备配置、控制功能;完成4种数据传输类型。USB驱动(USBD)部分是整个USB主机驱动的核心,主要负责USB总线的管理、USB

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top