datasheet
超过460,000+ 应用技术资源下载
pdf

基于ARM的PDA软硬件平台设计

  • 1星
  • 日期: 2014-03-05
  • 大小: 2.84MB
  • 所需积分:1分
  • 下载次数:0
  • favicon收藏
  • rep举报
  • 分享
  • free评论
标签: 基于ARM的PDA软硬件平台设计

在当前的电子信息技术和网络技术高速发展的后PC时代,嵌入式系统已经广泛地渗透到科学研究、工程设计、军事技术、商业文化艺术、娱乐业以及人们日常生活中的方方面面。与此同时,PDA因其小巧,功能强大,日益受到人们的青睐。因此,对嵌入式Linux的PDA研究具有非常重要的意义。 本文的研究主要是基于ARM和Linux的PDA软硬件平台的开发。硬件平台的内核模块采用ARM920T核的S3C2410X嵌入式处理器,外部包含64M的SDRAM和64M的NAND Flash,硬件平台还集成了液晶、触摸屏等人机接口和嵌入式GPS模块,同时提供了USB主机、SD卡扩展接口。该平台技术先进,结构合理,功能较完备,整体性、可扩充性强,还可以作为其他嵌入式系统硬件开发的良好平台和有益借鉴。 在此硬件平台的基础上,本文深入探讨和解决了Linux操作系统和嵌入式图形用户接口移植过程中所面临的任务和难题。论文首先研究了硬件平台下引导Linux启动的Bootloader的设计方法和实现过程。然后,给出了Linux2.4内核和YAFFS文件系统的启动分析和移植到硬件平台的整个过程。并且,在Linux内核驱动模型的基础上,实现了LCD帧缓冲显示设备Framebuffer、触摸屏、USB驱动程序的开发。最后,实现了图形化用户接口Qt/E在嵌入式Linux平台上的移植。通过Linux操作系统和图形化用户接口Qt/E等软件平台的实现,为PDA平台提供了良好的图形化操作系统支持,从而大大减少了PDA产品的开发难度和开发周期。 另外,在开发实现的PDA软硬件平台的基础上给出了—个地图的显示以及实现放大、缩小等功能的程序,为综合应用了PDA平台软硬件资源提供了—个有用的实例。

分类号:—— U D C:—— 密级:—— 编号:二——一 工学硕士学位论文 基于ARM的PDA软硬件平台设计 硕士研究生:李燕南 指导教师 :张仁忠教授 学位级别 :工学硕士 学科、专业:-系统工程 所在单位 :自动化学院 论文提交日期:2008年5月 论文答辩日期:2008年6月 学位授予单位:哈尔滨工程大学 哈尔滨下程大学硕+学位论文 摘要 在当前的电子信息技术和网络技术高速发展的后PC时代,嵌入式系统已经广 泛地渗透到科学研究、工程设计、军事技术、商业文化艺术、娱乐业以及人们日 常生活中的方方面面。与此同时,PDA因其小巧,功能强大,日益受到人们的青 睐。‘因此,对嵌入式Linux的PDA研究具有非常重要的意义。 本文的研究主要是基于ARM和Linux的PDA软硬件平台的开发。硬件平台 的内核模块采用ARM920T核的¥3C2410X嵌入式处理器,外部包含64M的 SDRAM和64M的NAND Flash,硬fr牛-V台还集成了液晶、触摸屏等人机接口和嵌 入式GPS模块,同时提供了USB主机、SD卡扩展接口。该平台技术先进,结构 合理,功能饺完备,整体性、可扩充性强,还可以作为其他嵌入式系统硬件开发 的良好平台和有益借鉴。 在此硬件平台的基础上,本文深入探讨和解决了Linux操作系统和嵌入式图形 用户接口移植过程中所面临的任务和难题。论文首先研究了硬件平台下引导Linux 启动的Bootloader的设计方法和实现过程。然后,给出了Linux 2.4内核和YAFFS 文件系统的启动分析和移植到硬件平台的整个过程。并且,在Linux内核驱动模型 的基础上,实现了LCD帧缓冲显示设备Framebuffer、触摸屏、USB驱动程序的 开发。最后,实现了图形化用户接口Qt/E在嵌入式LirIux平台上的移植。通过Linux 操作系统和图形化用户接口Qt/E等软件平台的实现,为PDA平台提供了良好的图 形化操作系统支持,从而大大减少了PDlA产品的开发难度和开发周期。 另外,在开发实现的PDA软石N牛--V台的基础上给出了一个地图的显示以及实 现放大、缩小等功能的程序,为综合应用了PDA平台软硬件资源提供了—个有用 的实例。 关键词:PDA;嵌入式系统;Linux;ARM;图形用户接口 哈尔滨工程大学硕士学位论文 ABSTRACT hl the age of pervasive computing with the rapid development of the present electronic technology and network technology,the embedded system has already penetrated into all fields,such as scientific research,engineering design,military technology, commerce culture art and people's daily life.At t11e same time,because PDA it is exquisite, the function is formidable,day by day receives people's favor.Therefore,the great significance should be put on the research ofembedded Linux PDA system. development The main research and ofthis task is the PDA's hardware and sothvare platform based on ARM and Linux.The CPU ofits COre module is¥3C2410X embedded processor based on ARM920T COre,around it has 64M SDRAM and 64M NAND Flash. The platform integrates some devices,such as the interface between human-machine(LeD and Touchpad),embedded GPS module.And it provides some extended interface such as USB Host,SD Car&The features ofthe platform are advanced,logical and extendable.It offers a dependable platform and an useful application to develop others embedded system. On this hardware platform,we deeply discussed and resolved the task and difficult problem be confronted with the COUI鬻of Linux and embedded GUI portillg.The paper firstly studies the development and implementation of the Bootloader(the Linux start-up guide code).Secondly,gives out the start-up analysis ofthe Linux and the collwoe ofporting the Linux 2A kemel and the YAFFS filesystem to the platform.And then,based on deeply graspes Linux device driver model,implementes the drivers such as LCD Frarnebuffer, Touchpad,USB Host.Finally,implem.entes the porting of the QVE GUI Through portmg ofthe Linux and the Q汜GUI,the platform has been supported by graphics OS,s0 we Call develop others PDA applications on this platform easily. Based Oil the platform,we give out a programme capable of demonstating map as well as enlarging and mjni聊ng therrL It provides ahelpful application to integrated apply the Soulv.e ofthe platform. Key words:PDA;Embedded System;Linux;ARM;GUI 哈尔滨工程大学 学位论文原创性2声明 本人郑重声明:本论文的所有工作,是在导师的指导 下,由作者本人独立完成的。有关观点、方法、数据和文 献的引用已在文中指出,并与参考文献相对应。除文中已 注明引用的内容外,本论文不包含任何其他个人或集体己 经公开发表的作品成果。对本文的研究做出重要贡献的个 人和集体,均已在文中以明确方式标明。本人完全意识到 本声明的法律结果由本人承担。 作者(签字):1趣妒:叶!塑 日期:’吲年多月 哈尔滨工程大学硕士学位论文 第1章绪论 1.1选题背景 在当前数字信息技术和网络技术高速发展的后PC(Post-PC)时代,嵌入式系 统已经广泛地渗透到科学研究、工程设计、军事技术、各类产业和商业文化艺术以 及人们的日常生活等方方面面中。随着国内外各种嵌入式产品的进一步开发和推广, 嵌入式技术越来越和人们的生活紧密结合。 嵌入式设备是指应用了嵌入式系统的计算机设备。嵌入式设备现在正在日新月 异的发展,并快速的侵入了我们的生活。就在几年前,掌上电脑在国内还只是—个 在电视或者网络上看到的名词,而今却已经成为流行人士特别是年轻人最为青睐的 时尚物品。 在众多的嵌入式设备中最常见的便是PDA了。而PDA因其功能大小、针对的 应用、生产厂家及型号的不同有着各种叫法:个人数字助理PDA、PalmPc、 Hand-HeldPC(简称}Ⅱ)C)、PocketPC、手持设备、手持电脑、袖珍电脑等等。 PDA(Personal Digital Assistant)是—个面向广大非专!I匕用户的计算和通信设备。 现在,PDA市场竞争极其激烈,国内的PDA要想在市场上立于不败之地,必须加 大自主知识产权产品和技术的开发,以降低生产成本,在极小化生产成本的同时极 大化应用性能,在竞争中获得主动位置。在现今硬件技术大幅进步的情况下,软件 的发展技术成为嵌入式系统中最重要的环节,所以本次课题重点对运用于PDA嵌 入式系统的软件技术进行了研究与开发。 1.2国内外研究概况 1.2.1民用PDA的研究概述 自从1993年第一台PDA(Newton)在Apple公司发明以来,国外的民用PDA 的研究己经有了完整的体系和成熟的产品。例如,最近ⅢM发布了—个开发标准的 基于Linux/Java的PDA参考设计。该参考设计基于PowerPC 405LP嵌入式处理器, 配合嵌入式Linux应用平台(e-I。AP.—嘲bedded Linux Application Platform),稍 加修改就能设计自己的PDA或其他产品。 哈尔滨工稃大学硕士学位论文 I II II 我们国家的PDA开发和研究相对较晚,目前的民用PDA产品,基本上都是国 外公司的天下,国产产品凤毛麟角。目前国内的研究工作主要在以下『1.个方面: (1)本地化。文献”指出“一个成功的产品设计是不能离开用户的文化背景的。 中文PDA不应该是—个经过汉化的西文PDA,而应该是—个考虑到中国人文化背 景和习惯而设计的产品。当然,也应该考虑与西文PDA的兼容性"。并且定义了 两种概念的PDA(电子记事本PDA和PC伴侣Pc}A)的功能特点和中文化方向。 (2)软件平台研究,包括操作系统和图形用户界面移植的研究。如文献‘191聊 分析了Linux操作系统在嵌入式系统中的方法。文酬习分析了基于嵌入式Linux的图 形用户界面支持系统的有关技术,在此基础上设计并实现了—个基于典型的嵌入式 图形用户界面系统MiniGUI的PDA应用实例。 (3)开发技术研究。如文酬1介绍了·种PDA仿真调试器,是直接在PC机上 建立的—个软仿真调试平台。较之许多微处理器生成厂家提供的由硬件和软件共同 构成的仿真执行平台,使用简便,运行稳定,开发成本低。经过分析和测试,这种 “纯软件”的仿真调试器,可以很方便地完成大部分的应用程序的开发调试工作。 这为高效的开发PDA上的应用软件提供了可能。 1.2.2军用PDA的研究概述 国外一些国家已经开始从事PDA技术军事应用的研究和开发,并已有此类产 品装备到特定的作战场合。我们国家起步较晚,目前只有极少数的几样产品设计完 成。由于军用PDA技术属于每个国家的国家机密,公开的资料非常少。目前国内 外几种军用PDA的功能特性分述如下: (1)“指挥官数字助理’’(Commander's Digital Assistant)川:美国陆军正在准 备给排级和连级的指挥官配发大约300台“指挥官数字助理"手持帮助计算机。CDA 基本上属于一种军用PDA。新的CDA将会采用军事行动追踪系统技术,不断在PDA 屏幕上显示附近所有的友好的排、坦克和战斗机的位置。 (2)Rugged PDA(RPDA-88)09I舶1:RPDA-88使战场场景知晓和通信能力能 够装入士兵的口袋里,而RPDA-88的模块化设计允i备用户能够在基本模块不变的 基础上根据不同的作战任务重新配置软硬件。 在国内,在这个领域,还处于刚刚起步阶段,没有相关的产品出现,这与我国 军工产品生产和研发现状有一定的关系。通过网络搜索,只发现了少数的几条相关 2 哈尔滨工程大学硕十学位论文 的信息,见下:. (1)北京旋极信息技术有限公司给出了军用PDA设计方案,但是没有相关的 产品。 (2)文艄应用—款通用的32位CPU结合嵌入式cPU应用、多任务操作系统 RTOS、GIS应用、卫星定位系统定位、无线通信、蓝牙技术、CCD技术、图像处 理技术等当前最先进的技术阐述军用PDA的构成以及实现方法。 这些产品都具备一些共同的基本功能,如:地图显示、战场态势实时显示、GPS 定位与导航、距离量算、用户标注、路径选择、人性化界面、无线通信等。 1.3研究内容 本文以设计—个硬件开放、源码公开、能满足军民两用需求的PDA软硬件平 台为目的,采用系统工程和软件工程的原理,将嵌入式系统、操作系统、GUI等技 术手段相结合,进行技能新研究,以形成—个综合的技术体系,构建—个新的PDA 软硬件平台。因此本研究的主要内容有以下几/个.力面:PDA系统设计:包括系统目 标、结构与功能设计;硬件平台设计;软件平台设计:包括Boofloader的设计、Linux 操作系统移植、相关的Linux驱动程序开发、GUI移植等;基于PDA平台的应用实 例设计:综合应用平台资源设计—个较实用的应用程序。 1.4论文组织结构 本文共分为六章,第一章为绪论,介绍课题背景和研究价值以及研究的目标和 内容。 第二章主要阐述PDA软硬件平台的总体设计思想:包括系统的设计原则、总 体结构、操作系统和用户图形界面GUI的选型。 第三章阐述了PDA硬件平台的设{-I-并l实现,包括微处理器的选择和硬件平台 总体结构。 第四章在介绍了PDA软件平台总体结构的基础上,详细阐述了Linux操作系统 在PDA硬件平台上的移植。包括:Boofloader的设计与实现;Linux内核移植;YAFFS 文件系统的建立。 第五章详细阐述了基于Linux操作系统的PDA外部设备驱动的设计与实现以及 Ql甩图形操作界面在PDA的Linux平台上的移植。 哈尔滨工程大学硕士学位论文 第六章介绍—个实现电子=}电图显示以及放大、缩小等功能的PDA应用程序实 例的设计。 4 哈尔滨工程大学硕十学位论文 第2章总体设计 2.1系统总体设计的基本原则 PDA软硬件平台设计是—个嵌入式系统和现代电子技术的综合应用。系统的总 体设计主要是按照系统设计的目标来规划系统的功能模块和确定系统的各个组成部 分,并说明它们在整个系统中的作用和相互关系。系统总体设计应遵循以下原则: (1)可行性原则:在全面调研的基础上,确保系统的研制在技术、资源、能力 等各方面可行。 (2)实用性原则:实用性原则包含三层意思:完备性,设计的系统功能齐全、 完备,包含PDA所需要的基本功能;可靠性,系统运行安全可靠、结构完整;界 面友好,用户界面操作方便简单。 (3)规范化原则:规范化原则包含两层意思:标准化,所有的设计符合l见有的 国家标准和行业规范;兼容性,数据、文档、程序具有可交换性。 (4)可扩充性原则:考虑到当前计算机技术和电子技术的发展,系统设计时应 采用模块化结构设计,模块的独立性强,模块增加、减少或修改均对整个系统影响 很小,便于对系统改进、扩充,使系统处于不断完善过程中。 2.2系统的总体结构 |软 }件 l平 i台 驱动程序 GUl 操作系统 BIOS 图2j1系统总体结构 iiiiiiiiiiiiii宣iiiiiiii哈ii尔ii滨ii工ii程i大 ii学ii硕ii士ii学i位 ii论ii文iii宣iiiiiiiiiiiiiiiiii‘ PDA系统的总体结构见图2.1,软件平台包括BIOS、操作系统、·驱动程序和. GUI四大部分,是对硬件平台的逐级封装和有效调度,是应用软件运行的基础。 2.3硬件平台功能模块的规划 对于—彻能完备的PDA,至少应该包含以下功能: (1)基本功能 CPU,RAM和外部存储器构成的—个基本的嵌入式计算机系统。CPU应该具‘ 备优良的运算能力,具有进行较为复杂事务处理的能力,还应该有较低的功耗。较 大容量和快速访问的RAM是执行复杂处理的基本保证。较大容量外部存储器能够 保证操作系统和用户软件的保存,还能为用户预留较大的存储空间来储存私人资料。 (2)人柳.接口 PDA硬件平台的人机接口是使用者和PDA进行互动时非常重要的部件,基于 PDA的特点本文采用TFr LCD和触摸屏作为输出部件和输入部件。 Ⅱ呵液晶显示屏具有亮度好,对比度高,层次感强,颜色鲜艳的优点,基于用 户界面良好的要求,Ⅱ吓LCD是不错的选择。nT LCD也有比较耗电的缺点,需 要软件控制节电来弥补。 在便携式的电子类产品中,触摸屏由于其轻便、占用空间少、方便灵活等优点, 己经逐渐取代键盘成为嵌入式计算机系统的输入设备。 (3)外部扩展 不同的用户的需求总有不同的需求,不可能有—个产品能包罗万象。因此,没 有设计很多外围的功能部件,而是通过允许用户扩展的方式来解决这个问题。 系统设计了—个USB Host,可以连接遵循USB 1.1标准的所有外设,如摄像头、 无线网卡、蓝牙、军用通信设备等。 另外,还设计了一个SD/MMC Host,可以弥补存储器不足的问题。在GIS等 应用中,数字地图占用的存储需求非常庞大,有了SD Host,就可以把数字地图储 存在SD卡移动存储设备上。另外,支持SDI的外设也越来也多,如无线网卡等, 也能弥补只有—个USB口来扩展外设的不足。 ¥3C2410微处理器是—款由Samsung Electronics Co.,Lcd为手持设备设计的低功 耗、高度集成的微处理器,内含—个ARM920T内核和LCD控制器、触摸屏接口、 SDRAM控制器、USB主机接口、SD接口和MMC卡接口、3个通道的UART、 6 哈尔滨工程大学硕士学位论文 MMU等片内外围功能部件。对比以上的PDA功能规划,。¥3C2410从芯片级提供了 支持,而且MMU的存在保证了嵌入式操作系统的良好运行,应该是不错的选择。 2.4嵌入式操作系统的选择 嵌入式系统是指将应用程序和操作系统与计算机硬件集成在—起的系统。简单 的说就是系统的应用软件与系统的硬件一体化,类似于BIOS的工作方式。这种系 统具有软件代码小,高度自动化,响应速度快等特点,特别适应于要求实时的和多 任务的体系。 嵌入式系统可分为硬件和软件2个平台。嵌入式系统的硬件部分,包括处理器/ 微处理器、存储器及外设器件和I/O端口等,如图2.2所示。 图2.2嵌入式系统的硬件 嵌入式系统有别于一般的计算机处理系统,它不具备像硬盘那样大容量的存储 介质,而大多使用EPROM、EEPROM或闪存(Flash Memory)作为存储介质。软 件部分包括操作系统软件(要求实时和多任务操作)和应用程序。应用程序控制着 系统的运作和行为,而操作系统控制着应用程序编程与硬件的交互作用。具体包括 以下几个部分: (1)高性能实时核心 嵌入式操作系统核心提供多任务的调度(基于优先级的抢占调度)、任务间的 同步、进程间通信中断处理以及内存管理机制等功能。 .(2)设备驱动 哈尔滨工程大学硕十学位论文 操作系统通过设备驱动与硬件打交道,嵌入式操作系统提供:显示驱动、网络 驱动、串口驱动、并口驱动、外接卡驱动、键盘/鼠标驱动、声音驱动。 (3)文件系统 . 提供适合嵌入式应用的快速文件系统,包括RAM、ROM、Flash以及标准磁盘 文件系统(如FATl6、FAT32等)‘。 (4)图形用户界面 为嵌入式操作系统提供小型、高性能、高可靠性的图形用户界面,包括多窗口 的管理(创建、删除、隐藏、移动等)、图形操作(点、线、园、矩形等)、字体 显示、预定义的控件(静态文本框、按钮、单行、多行编辑框、列表框、进度条、 工具栏、月历、日期等)、消息传递机制、定时器、加速键、插入符、GIF/JPEG图 片的支持以及Windows资源(位图、图标、光标)的支持等。 (5)网络通信协议 主要指网络协议,如TCPflP、PPP、UDP、BOOTP、邢、DHCP、DNS、 FTP以及无线传输协议(WAP)。当然无线协议还包括蓝牙、红外传输协议(IrDA) 等。 (6)基本应用程序 另外—个完整的嵌入式操作系统还应包括一些基本的应用程序,如程序管理器 (桌面)、文件管理器、设置等。 常见的通用型嵌入式操作系统有Linux,VxWorks,Winnows CE.net等。常用 的专用型嵌入式操作系统有Smart Phone,Pocket PC,Symbian等。 (1)Vxworks VxWorks操作系统是美国WindRiver公司于t983年设计开发的—种嵌入式实 时操作系统(RTOS)。良好的持续发展能力、高性能的内核以及友好的用户开发 环境,使之在嵌入式实时操作系统领域逐渐占据_席之地。 VxWorks具有可裁剪微内核结构;高效的任务管理:灵活的任务间通讯;微秒 级的中断处理;支持POSIX 1003.1b实时扩展标准;支持多种物理介质及标准的、j 完整的TCP/IP网络协议等。 然而其价格昂贵,通常需花费10万元人民币以上才能建起—个可用的开发环 境,对每—个应用—般还要另外收取版税。—般不提供源代码,只提供二进制代码。 由于是专用操作系统,需要专门的技术人员掌握开发技术和维护,所以软件的开发 哈尔滨工程大学硕十学位论文 t-iiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii宣iiiiii宣萱iiiiiiiiiiii置 和维护成本都非常高。支持的硬件数量有限。 (2)W溉 ’ WinCE与Windows系列有较好的兼容性,是—种针对小容量、移动式、智能 化、32位模块化实时嵌入式操作系统。为建立针对掌上设备、无线设备的动态应用 程序和服务提供了二种功能丰富的操作系统平台,它能在多种处理器体系结构上运 行,并且通常适用于那些对内存占用空间具有一定限制的设备。它是从整体匕为有 限资源的平台设计的多线程、完整优先权、多任务的操作系统。它的模块化设计允 许它对从掌上电脑到专用的工业控制器的用户电子设备进行定制。操作系统的基本 内核需要至少200KB的ROM。 从技术角度上讲,WinCE作为嵌入式操作系统有很多的缺陷:没有开放源代码, 使应用开发人员很难实现产品的定制;在效率、功耗方面的表现并不出色,而且和 Windows—样占用过多的系统内存,运用程序庞大;版权许可费也是开发时不得不 考虑的因素。 (3)嵌入式Linux 嵌入式Linux最大的特点是源代码公开并且遵循GPL协议,在近年来成为研究 热点。由于其源代码公开,人们可以任意修改,以满足自己的应用,并且查错也很 容易。遵从GPL,无须为每例应用交纳许可证费。有大量的应用软件可用,其中大 部分都遵从GPL,是开放源代码和免费的,可以稍加修改后应用于用户自己的系统。 有大量的免费的优秀的开发工具,且都遵从GPL,是开放源代码的。有庞大的开发 人员群体。无需专门的人才,只要瞳Unix/Linux和C语言即可。软件的开发和维护 成本很低。优秀的网络功能,这在Intemet时代尤其重要。系统稳定,内核精悼, 运行所需资源少,十分适合嵌入式应用。 支持的硬件数量庞大。嵌入式Linux和普通Linux并无本质区别,PC上用到的 硬件嵌入式Linux几乎都支持。而且各种硬件的驱动程序源代码都可以得到,为用 户编写自己专有硬件的驱动程序带来很大方便。 在嵌入式系统E运行Linux的—个缺点是:Linux体系提供实时性能需要添加 实时软件模块。由于这些实时软件模块是在内核空间运行的,因此代码错误可能会 破坏操作系统从而影响整个系统的可靠性,这对于实时应用将是—个非常严重的弱 点。相对于WinCE和VxWorks而言,嵌入式Linux的开发难度较大、没有内嵌的 GUI、没有良好的可视化的开发环境,但是Linux是—个源代码完全开发的操作系 哈尔滨丁程大学硕士学位论文 统,不需要支付昂贵的开发费用而可以免费获得,这是WinCE和VxWorks所不具 有的。所以,本文选择Linux作为PDA的操作系统。 2.5嵌入式GⅥ的选择 嵌入式GUI为嵌入式系统提供了—种应用于特殊场合的人机交互接口。嵌入式 GUI要求具备以下特点:体积小;运行时耗用系统资源小;上层接口与硬件无关, 高度可移植,高可靠性;在某些应用场合应具备实时性。 目前应用于嵌入式Linux系统中比较成熟,功能也比较强大的GUI系统底层支 持库有SVGA fib、LibCⅪI、Xwindow、Framebuffer等。目前主要流行的嵌入式GUI 系统有MicroWindows、MiniGUI、Ql/Embedded等几种。 (1)MicroWindows 为三层,最底层是面向图形显示和键盘、鼠昧韵蝴的驱动程序;中间层提供底 MicroWindows是—个典型的基于Server/Client体系结构的GUI系统,基本分 层硬件的抽象接口,并进行窗口管理;最高层分别提供兼容于X Window和ECMA APIW(Will32子集)的API。 MicroWindows提供了相对完善的图形功能和一些高级的特性,如Alpha混合、 三套维接支字持的和X实Tr现ue模Typ式e字,体采支用持了等基。于该消系息统机为制了的提S高e删运l行i二enjt建传嫂输,机也制改。进M了ic基ro于WiSnodcokwest 也有—些通用的窗口控件,但其图形引擎存在许多问题,可以归纳如下:无任何硬 件加速能力;图形引擎中存在许多低效算法,如在圆弧图函数的逐点判断剪切的问 题。 由于该项目缺乏一个强有力的核心代码维护人员,2003年MieroWindows推出 版本0.90后,该项目的发展开始陷于停滞状态。 (2)MiniGUI MiniGUI是由国内自由软件开发人员设计开发的,目标是为基于Linux的实时 嵌入式系统提供—个轻量级的图形用户界面支持系统o MiniGUl分为最底层的GAL层和L乜层,向上为基于标准POSIX接12中pthread 库的Mini-thre劢架构和基于Server/Client的Mini-Lite架构。M硒Gu的GAL层支 于Trolltech公司的呷在X 持SVGA hb、LibCK3I、基于Framebuffer的native图形引擎以及哑图形引擎等,对 Window下也有较好的支持。池层则支持Linux标 哈尔滨工程大学硕十学位论文 ·准控制台下的GPM鼠标服务、触摸屏、标准键盘等。 MiniGUI下丰富的控件资源也是MiniGUI的特点之一。当前MiniGUI的最新版 本是1.3.3。该版本的控件中己经添加了窗口皮肤、工具条等桌面GUI中的高级控 件支持。 (3)Q饱anbedded Qt/Embedded(简称Q忸)是著名的Qt库开发商Trolltech公司开发的面向嵌入 式系统的Qt版本。因为Qt是KDE等项目使用的GUl支持库,许多基于Qt的X Window程序因此可以非常方便地移植到Qt/Embedded上。Qt/Embedded同样是 ServerQ/gCElmibenetd结d构e。d延续了Qt在X上的删能,采用Framebuffer作为底层图形接 口。同时,将外部输入设备抽象为keyboard和mouse输入事件,底层接口支持键盘、 GPM鼠标、触摸屏以及用户自定义的设备等。 Qt/Embedded类库完全采用C.阡封装。丰富的控件资源和较好的可移植性是 Qt/Embedded最为优秀的一方面。它的类库接口完全兼容于同版本的Qt-X1 1,使用 X下的蛳开be发dd工ed具当可前以的直最接新开版发本基为于3.Q3t./2E,mb能ed够de支d的持应Tr用ol程lt序ecGhU的I界手面持应。用刘@Qtopia 的Qt/Emlxxided最高版本为2.3.8。 基于良好界面和支持丰富方面的要求,在权衡这三种嵌入式GUI的优缺点后, 最终为PDA选择了叫Embedded嵌入式GUI。 2.6本章小结 本章简要地介绍了PDA平台设计的基本原则和总体结构,做出硬件平台的规 划,并较为详细的对比几种嵌入式操作系统以及图形用户界面,选出适合于这次开 发所使用的嵌入式操作系统和用户图形界面。 哈尔滨工程大学硕士学位论文 第3章PDA硬件平台 PDA硬件平台是课题总体设计思想在硬件方面的具体实现。本章主要肌总体结 构和硬件平台的构建两方面来阐述PDA硬件平台设计的思路和方法。 3.1总体结构 PDA硬件平台的总体结构如图3.1。 CPU 支持电路 I usB接口 !外 ouⅨH i乒 !展 GPS模块 I I I CPU 64MB SDRAM 存 储 承f 64M[B NAND Flash 统 电平转换电路 TFrLCD 触摸屏控制电 路 |触摸屏l ^翔辖口 P ! 电源管 电 池 理电路 1.SV CPU核心电源 3.3V CPU I/o电源 5.0V外围设备电源 LCD背光电源 图3.1 PDA硬件总体结构图 12 哈尔滨丁程大学硕士学何论文 3.2硬件平台的构建 3.2.1微处理器的选择 嵌入式系统的核心部件是各种类型的嵌入式处理器。据不完全统计,目前全世 界嵌入式处理器的品种总量己经超过1000多种,流行体系结构有30几个系列。但 与全球PC市场不同的是,没有—种微处理器和微处理器公司可以主导嵌入式系统, 仅以32位的CPU而言,就有100种以上嵌入式微处理器。由于嵌入式系统设计的 差异性极大,因此选择是多样化的。 在掌上型电子产品(包括PDA)的硬t牛-V台中,最重要的部件主要是微处理器 (MPI卜—士洒cro Process Unit)。微处理器是—个小型的CPU,其匕集成相应的寄 存器和程序指令集,用户可以通过MPU来完成嵌入式系统中的程序执行和运算功 能。目前,在移动终端领域,获得广泛应用的主要是ARM公司所推出的ARM系 列微处理器。ARM9微处理器系列是美国ARM公司继ARM7 RISC(精简指令集) 架构微处理器后又推出的_款32位嵌入式RISC微处理器解决方案。这是一套具有 高性能、低费用、高效率的RISC处理器,并且经过特殊优化以适应于鼠入式系统 的开发环境。由于ARM9系列处理器的优良性能,国外大多数移动终端芯片生产商 的硬件平台解决方案都是基于ARM9微处理器系列的体系结构所设计的。本文的硬 件平台中所用的就是ARM9微处理器系统中的ARM920T开放平台处理内核。 ARM9微处理器系列是—个32位典型的RISC微处理器,因此,其地址空间指 针、寄存器、程序指针、指令等的长度均为32位(4字节)。同时,ARM9微处理 器采用的是独立的内存装载/存储指令体系,即指令体系中只有相应的装载,存储指 令可以访问系统中的内存,而数据处理指令只能访问寄存器。 ARM920T的结构框图,如图3.2所示,ARM920T核由ARMgTDMI、存储管 理单元MMU和高速缓存三部分组成。其中,MMU可以管理虚拟内存,高速缓存 由独立的16KB地址和16KB数据高速Cache组成。ARM920T有两个内部协处理 器:CPl4和CPl5。CPl4用于调试控制,CPl5用于存储系统控制以及测试控制。 哈尔滨T程大学硕士学位论文 图3.2 ARM920T结构框图 本系统采用MC2410E(采用¥3C2410处理器)开发板。¥3C2410是韩国三星 电子公司推出的—款为手持设备设计的低功耗、高度集成的微处理器,采用272脚 FBGA封装,内含—个ARM920T内核和如下片内外围功能部件: (1)1个LCD控制器(支持STN和唧带有触摸屏的液晶显示器); (2)SDRAM控制器; (3)3们厦道的I 7ART; (4)4个通道的DMA; (5)4个具有PWM功能的计时器和1个内部时钟; (6)8通道的lO位ADC; (7)触摸屏接口; (8)IIC总线接口; (9)1个USB主机接口,1个USB设备接口; (10)2个SPI接口; (11)SD接口和MMC卡接口; (12)117位通用I/O口和24位夕h部中断源。 14 哈尔滨工程大学硕士学位论文 ¥3C2410的芯片结构如图3.3所示: · . 3.2.2R26UM 图3.3¥3C2410芯片结构图 (1)SDRAM简介 K4S561632是Samsung公司运用高性能CMOS技术生产的54脚TSOP封装 256MBits高速SDRAM,字宽16位,分成4个L-Banks,每个汹anl(s包括4 196304 15 哈尔滨工程大学硕士学位论文 个字。 K4S561 632的引脚定义如下: ●CLK:时钟信号; ·cl@:时钟有效信号;‘ ●/CS:片选信号; ●A0"-,A12-行刀列地址线; ·BA0、BAl:L-Bank地址线; ·瓜AS:行地址选通信号; ·/Q峪:列地址选通信号; ●忍,E:写允许信号; ⅧDⅣSS.电舭: ·L(U)DQM:数据输入/输出掩码信号; ● ●VDDQNSSQ:数据输出电源/地。 (2)S3C2410的存储器控制器 ¥3C2410的存储器控制器提供访问外部存储器所需要的存储器控制信号。 ¥3C2410的存储器控制器具有以下特性: ·小『大端模式; ·地址空间:每Bank有128MB(总共l GB/8Banks); · 除Bank0外(16/32位宽),其它Bank都可编程设置位宽(8/1们2); ·总共8个Bank(6个R(m蟾RAM,2个ROM/S刚山瞻D&州); · 7个固定的Bank起始地址,最后—个Bank的起始地址是可以调整的,最 后两个Bank的大小是可编程的; . ·所有Bank的访问周期都是可编程的; · 总线访问周期可以通过插入外部wait信号来延长; ·支持SDRAM的自刷新和掉电模式。 (3)S3C2410的RAM存储器连接 在本PDA中,使用两片K4S561632组成64MB字宽是32位的RAM存储器。 具体连接图见图3.4。 哈尔滨工程大学硕十学位论文 图3.4 SDRAM硬件连接图 17 .3.2.3外部存储器 哈尔滨丁程大学硕十学位论文 嵌入式系统的外部存储器NOR FLASH和NAND FLASH的应用最为广泛。 NAND结构能提供极高的单元密度,并且写入和擦除的速度也很快,是高数据存储 密度的最佳选择。但是,NAND的实际应用方式比较复杂,需要I/O接口和驱动程 序才能使用。Linux内核提供了对NAND FLASH的支持。 ·¥3C2410内嵌NAND FLASH控制器,特性以下: · 支持蕾髟写/编程NA卜D FLASH存储器; · 支持NAND FLASH启动模式:在该模式下,系统复位后S3C2410自动把 启动代码传输到Steppingstone中,并在Steppingstone中执行; ● 硬件ECC检测模块(硬件检测,软件纠错); ●¥3C2410内建4KB SRAM的缓冲区作为Steppingstone。 K9F1208是Smmxmg公司生产的采用NAND技术的大容量、高可靠Flash存储 器。该器件存储容量为64M木8位,除此之外还有2048K'8位的空闲存储区。该器 件采用TSSOP48封装,工作电压2.7--3.6V。K9F1208对528字节一页的写操作所 需时间典型值是200 la S,而对16K字节一块的擦除操作典型仅需2ms。8位I/O端 口采用地址、数据和命令复用的方法。这样既可减少引脚数,还可使接口电路简洁。 3.2.4人机接口 PDA硬件平台的人机接口是使用者和PDA进行互动时非常重要的部件,基于 PDA的特点设计了采用1rI可LCD的输出部件和触摸屏的输入部件。 (1)田盯LCD —块LCD屏显示图像,不但需要LCD驱动器,还需要有相应的LCD控制器。 通常LCD驱动器会以COF/COG的形式与LCD玻璃基板制作在一起,而LCD控 制器则有外部电路来实现。而¥3C2410内部已经集成了LCD控制器,因此可以很 方便地去控制各种类型的LCD屏,例如:STN和11可屏。由于n可屏将是今后应 用的主流,因此在PDA中选用了1rI=T屏。 对于控制n可屏来说,除了要给它送视频资料(VD[23:0】)以外,还有以下一 些信号是必不可少的,分别是: · VSYNC(VFRAME):帧同步信号: 哈尔滨f:程大学硕十学何论文 _ · HSYNC(VLD屺):行同步信号; II IIIII ·VCLK:像素时钟信号; · VDEN(ⅥⅥ):数据有效标志信号。 REGBANK是LCD控制器的寄存器组,用来对LCD控制器的各项参数进行设 置。而LCDCDMA则是LCD控制器专用的DMA信道,负责将视频资料从系统总 线(System Bus)上取来,通过VIDPRCS从VD[23:0]发送给LCD屏。同时TIMEGEN 和LPC3600负责产生LCD屏所需要的控制时序,例如VSYNC、HSYNC、VCLK、 VDEN,然后从VIDEO MUX送给LCD屏。 (2)触摸屏 S3C2410内置1个8信道的10bit模数转换器(ADC),该ADC能以500KsPS 的采样资料将外部的模拟信号转换为10bit分辨率的数字量。同时ADC部分能与 CPU的触摸屏控制器协同工作,完成对触摸屏绝对地址的测量。 ADC及触摸屏控制器的工作模式如下: · ADC普通转换模式(Normal Conversion Mode):用来进行一般的ADC转 换; ·独立X/Y轴坐标转换模式(Separate X/Y Position Conversion Mode):包含 了X轴模式和Y轴模式两种模式:首先进行X轴的坐标转换,等待转换 完成后,触摸屏控制器产生相应的中断,然后进行Y轴的坐标转换; ● 自动X/Y轴坐标转换模式(Auto X/Y Position Cowersion Mode):自动地 进行X轴和Y轴的转换操作,随后产生相应的中断; · 中断等待模式(Wait For Interrupt Mode):在系统等待“Pen Down”即触 摸屏按下的时候,其实是处于中断等待模式。一旦被按下,实时产生 “INT TC”中断信号。每次发生此中断时,X轴和Y轴坐标转换资料都 可以从相应的寄存器中读出。 ● 闲置模式(Standby Mode):保留为上次转换时的资料。 3.2.5USB ’ (1)USBl.1概述 USB是Universal Serial Bus的简称。它是一种可以同时处理计算机与具有USB 接口的多种外设之间通信的电缆总线。这些连接到计算机上的外设共同分享USB 19 哈尔滨T程大学硕十学位论文 的带宽。USB的分时处理机制真正在硬件的意Y._tz实现了计算机外设的即插即用。 USB主机系统不仅包含了用于和USB外设进行通信的USB主机控制器及用于 连接的USB接口(Sm),而且还是USB系统软件和USB客户软件的载体。USB 主机软件系统可以分为三个部分: ● 客户软件部分(CSW),在逻辑上和外设的功能部件部分进行资料的交换。 ·USB系统软件部分(即HCD),在逻辑和实际中作为HCD和USBD之间 的接口。 · USB主机控制器软件部分(即HCD和USBD),用于对外设和主机的所 有USB有关部分的控制和管理,包括外设的SIE部分、USB资料发送接 收器(Transreceiver)部分及外设的协议层等。 (2)S3C2410内置USBl.1 Host控制器 ¥3C2410内置的USB Host控制器具有以下特性: ·完全兼容USBl.1协议: ·支持全速(Full Speed)设备; · 支持Control、Interrupt和Bulk传输模式; ●5个具备FIFO的通讯端点; · Bulk端点支持DMA操作方式; · 接收和发送均有64Byte的FIFO; ● 支持挂起和远程唤醒功能。 3.2.6电源管理 本文的PDA采用一节L,i+电池(妈.6V,lAh)进行供电,系统的供电电压要求 主要有: ● 1.8V.¥3C2410核电压; · 3.3V-¥3C2410外围功能部件、触摸屏、SD卡接口等; ● 5V.USB接口、田盯LCD等; ● 12 ̄15V:LCD背光。 为此采用Maxim公司的MAX8594电源管理芯片来实现PDA系统的电源管理。 MAX8594是完整的电源管理芯片。它包含了小型便携设备所需的全部调节器、输 出和电压监视器j只需要少量外部元件。MAX8594采用3.1V至5.5V电源供电, 20 哈尔滨’I:稗人学硕+学位论文 空载时消耗46峭的电源电流。它采用微型、24引脚、4mm车4mm薄型QFN封装, 可耗散1.67W功率。该器件工作在-40'c至十85℃的温度范围。 3.3本章小结 本章主要介绍了PDA硬件平台的构建,主要包括系统的总体结构以及构建硬 件平台所使用的开发板、处理器芯片器的选择和电源管理等方面,由于本论文主要 是对软件平台的研究,所以对系统的硬件平台只作了简单的介绍。. 哈尔滨丁程大学硕+学位论文 I //'i _ Ill iI ii 第4章Lmux在PDA硬件平台上的移植 所谓移植(Porting),从软件的角度来看,就是使一套软件在不同的硬件平台 上正常运行的过程。操作系统是介于应用程序和硬件间沟通的桥梁,因此当底层的 硬件有所改变时,操作系统和平台相依(Platform Dependent)的部分就必须跟着做 变动,所以移植前,了解目标平台(Target Platform)的硬件规格是相当重要的前置 工作。除此之外,对于要移植的操作系统,其中与平台相依的各个部分要先熟悉, 如此才能将这些部分迅速的转移到其它的平台上。 本章围绕Linux操作系统在基于ARM的PDA硬件平台上的移植阐述了软件平 台的总体结构、BoofloM珂的设计实现、Lmux内核的移植和YAFFS文件系统的移 植。 4.1 PDA软件平台总体结构 PDA软件平台提供对硬件资源的有效封装和良好调度,支持直观简洁的人机互 动操作界面。PDA软件平台包括Bootloader、嵌入式Linux、Ot/E和用户驱动程序4 个部分,总体结构见图4.1。 驱动程序 Qt/E Linux Bootloader 图4.1 PDA软件平台总体结构图 Bootloader代码(即启动代码)是处理器复位后进入操作系统之前执行的一段 代码,主要是为运行操作系统提供基本的运行环境,如初始化CPU和堆栈、初始化 存储器系统等。Boofloader代码与CPU芯片的内核结构、具体芯片和使用的操作系 统等因素有关。其功能有点类似于PC机的BIOS(基本输入输出系统——BaSic Input/Output System)程序,但是由于嵌入式系统的软硬件都要比PC机的简单,所 以它的Bootloadcr代码要比BIOS程序简单得多。 嵌入式Linux操作平台是整个PDA软件平台的核心,包括存储管理、进程调度、 哈尔滨工程大学硕+学位论文 I/O设备管理、文件系统等多个方面。Linux是—1-用C语言开发的源代码开放的操 作系统,除了与硬件平台相依的部分需要修改以外j其他部分可以不做改动直接编 译移植到本文的PDA平台上。需要做的移植工作主要有Linux内核的移植和外部存 储器文件系统的建立。 Linux提供了基于“文件”的设备管理机制,针对PDA硬件平台,需要开发和 移植一些外部设备驱动程序,这—部分内容将在第五章中详细的阐述。 ‘ 人机交互图形化用户界面简称用户图形晃面(GIⅡ-—_(蛔pbical User Interface), 是屏幕产品的视觉体验和互动操作优良结合的前提。基于Q忸的PDA GUI移植工 作在第五章中详细阐述。 PDA软件平台的启动过程如下: (1)由于NAND Flash不支持直接运行程序,需要加载到RAM中执行,为了 实现NAND Flash上执行启动代码,¥3C2410设置了—个叫“Steppingstone"的4KB 内部SDRAM缓冲器。系统复位后,¥3C2410自动把NAND Flash的前4KBytes程 序加载到Steppingstone,然后系统自动执行这些加载的启动代码。 (2)把完整的Linux启动4-溺Bootloader分为两部分stagel和stage2。自动加 载到Steppingstone中的stagel执行把stage2加载到洲中执行。 (3)Bootloader的stage2实现把压缩的Linux内核映像加载到RAM中执行, 完成内核自解压和Linux启动工作,包括静态加载的外部设备驱动程序。 (4)Linux启动完成后,加载(Mount)YAFFS文件系统和模块化的外部设备 驱动程序。 (5)在配置完成Framebuffer的基础上,加载Q汜图形用户操作界面。 这样,完整的PDA软件平台就建立起来了。 4.2 Boot Loader的设计与实现 · 4.2.1Boot Loader第—部分的运行 硬件设备初始化:这是Boot Loader一开始就执行的操作,其目的是为第二部分 的执行以及随后的kernel的执行准备好一些基本的硬件环境。它通常包括以下步骤: 1.屏蔽所有的中断:为中断提供服务通常是OS设备驱动程序的责任,因此在 Boot Loader的执行全过程中可以不必响应任何中断。中断屏蔽可以通过写CPU的 哈尔滨fT程大学硕七学位论文 中断屏蔽寄存器或状态寄存器(比如ARM的CPSR寄存器)来完成。 2.设置CPU的速度和时钟频率:这通制E Config文件中通过宏来设置的。 3.RAM初始化:包括正确地设置系统的内存控制器的功能寄存器和控制寄存 器等。 4.初始化LED:一般通过GPIO来驱动LED,其目的是表明系统的状态是OK 还是Error。如果板子上没有LED,那么也可以通过初始化I IART向串口打印Boot Loader的Logo字符信息来完成这一点。 5.关闭CPU内部指令倦濡cache。 6.准备好—段可用的RAM空间:也就是为加载第二部分的程序准备RAM空 间。为了获得更快的执行速度,通常把第二部分程序加载到RAM空间中来执行, 因此必须准备好—段可用的RAM空间范围。由于第二部分代码通常是C语言执行 代码,因此在考虑空间大小时,除了映象的大小外,还必须把堆栈空间也考虑进来。 此外,空间大小最好是页(memory page)大小(通常是4KB)的倍数。—般而言,1M 的RAM空间已经足够了。具体的地址范围可以任意安排。这段范围应该是可以读 写的,这通常是在Config文件中,根据自己的板子并结合CPU的类型来确定的, 在以前的Boot Loader中,为确定其可靠性,通常还要另外的测试。通常的测试以页 (—般为4K)为被测试单位,测试每个页开始的两个字是否是可读写的。其具体步 骤如下: (1)先保存memorypage一开始两个字的内容。 (2)向这两个字中写入任意的数字。比如可以参照Flash的读写:向第—个字 写入0x55,第2个字写入0xAA。 (3)立即将这两个字的内容读回。我们读到的内容应该分别是0x55和0xAA, 否则说明此页所占据的地址范围不是一段有效的RAM空间。 (4)再向这两个字中写入任意的数字。比如:向第—个字写入0xAA,第2个 字中写入0x55。 (5)立即将这两个字的内容立即读回。显然,我们读到的内容也应该分别是 0xAA和0x55。如果不是,则说明这个memory page所占据的地址范围不是一段有 效的RAM空间。 (6)恢复这两个字的原始内容。测试完毕。为了得到一段干净的RAM空间范 围,我们也可以将所安排的RAM空间范围进行清零操作。 哈尔滨工程大学硕士学位论文 7.拷贝第二部分执行的代码到RAM中:拷贝时要确定两点,即第二部分的可 执行映象在固态存储设备的存放起始地址和终止地址以及RAM空间的起始地址。 8.设置堆栈指针sp:堆栈指针的设置是为了执行C语言代码作好准备。通常 我们可以把sp的值设置为准备的1M的RAM空间的顶部减去4字节。经过E述这 些执行步骤后;系统的物理内存布局以及FLASH空间的布局应该如图422所示。 ● 指针sp_ RAM地址空间 第二部分的可执行映像的RAM空间,一般在RAM 的最高地址lM处 f r Flash地址空间 J Bank·…·· 文件系统映像 Bank…… 内核映像 Bank…… Boot Loaderl;iq第二部分可执行映像 Boot Loader的第一部分可执行映像 图4.2 Boot Loader的第二部分执行时的系统布局 9.最后跳转到第二部分的C入口点:在上述—切都就绪后,就可以跳转到Boot Loader的第二部分去执行了。比如,在ARM系统中,这可以通过修改PC寄存器 为合适的地址来实现。 哈尔滨T程大学硕士学位论文 4.2.2Boot Loader第二部分的运行 正如前面所说,第二部分的代码通常用C语言来实现,以便于实现更复杂的功 能和取得更好的代码可读性和可移植性。但是与普通C语言应用程序不同的是,在 编译和链接Boot Loader这样的程序时,值得注意的就是我们不能使用uclibc库中的 任何支持函数。因此跳转进mainoi函数就是直接把mainoi函数的起始地址作为整个 第过二ma部in分oi执粼行递映函像数的参入数口;点二或是许无是法最处直理接m的ai。no但i要是i这数样返做回有的两情个况缺。点—:种一更是为无法巧通妙 的方法是利用trampoline(弹簧床)的概念。也即,用汇编语言写—段trampoline小 程序,并将这段uampoline小程序来作为第二部分可执行映象的执行入121点。然后 我们可以在trampoline汇编小程序中用CPU跳转指令跳入nlaino函数中去执行;而 当rnainoi函数返回时,CPU执行路径显然再次回到我们的trampoline程序。简而言 之,这种方法的思想就是:用这段lrampoline小程序来作为mainoi函数的外部包裹 (external wrapper)。· 4.2.3常见问题 在Boot Loader程序的设计与实现中,没有什么能够比从串口终端正确地收到打 印信息能更令人激动了。此外,向串口终端打印信息也是—个非常重要而又有效的 调试手段。但是,我们经常会碰到串口终端显示乱码或根本没有显示的问题。造成 这个问题主要有两种原因: (1)Boot Loader对串口的初始化设置不正确。 (2)运行在客户端的终端仿真程序对串口的设置不正确,这包括:波特率、奇 偶校验、数据位和停止位等方面的设置。此外,有时也会碰到这样的问题,那就是: 在BootLoader的运行过程中我们可以正确地向串口终端输出信息,但当BootLoader 启动内核后却无法看到内核的启动输出信息。对这一问题的原因可以从以下几个方 面来考虑:首先要确认内核在编译时配置了对串口终端的支持,并配置了正确的串 口驱动程序。然后Boot Loader对串口的初始化设置可能会和内核对串口的初始化设 置不—致。此外,对于诸如S3C44box这样的CPU,CPU时钟频率的设置也会影响 串口,因此如果Boot Loader和内核对其CPU时钟频率的设置不—致,也会使串口 终端无法正确显示信息。 j 哈尔滨丁程大学硕七学位论文 最后,还要确认BootIxsader所用的内核基地址必须和内核映像在编译时所用的 运行基地址一致,尤其是对于uClinux而言。假设你的内核映像在编译时用的基地 址是0xc0008000,但你的Boot.Loader却将它加载到Oxe0010000处去执行,那么内 核映像当然不能正确地执行了。 在调试的代码过程中,另外—个重要的工具就是通过MUTLI-ICE用ADS来进 行断点或步进式的调试,可以通过这个工具看出每一步相对的各个寄存器的值和内 存的数据,这对于在开发过程中相关寄存器的不正确设置和指针等不正确初始化都 有很好的检查作用。 4.3 Linux内核移植 将Linux内核移植到本文的PDA平台上,需要了解移植内核所要修改的文件, 需要了解Linux的文件组织结构。 4.3.1Linux的文件组织结构 基于ARM核的¥3C2410处理器有关要添加和修改的文件集中在 linux/arch/arm/mach-s3c2410和linux/'mclude/asm-arm/arch-s3e2410中。 linux/arcbYarm下其他目录包含通用的ARM代码: ke棚el_—-核心代码; mn广_内存管理代码; 1ib.—_ARM特殊的或经过优化的内部库函数; nwfve、自甜阳——两种不同的浮点实现; ’bo醋—-最终编译生成的内核所在目录,还包含了一些生成压缩内核的工 具; &f-configr—咆.含给每种机器默认的配置。 linux/'mchde&sm-arm下是—些通用的目录: 舐灯—-j奎接到已配置机器的头文件; ha—vva聍—·和ARM有关的芯片和设备的头文件; mach——很多机器使用的通用接口定义(的、dma)和机器描述符宏; 础聍—^根据配置的机器情况连接到pl"oc-arlllo和pros-armv; pl"OC-a11TIO、pro争a咖、卜—_ARM内核处理器的头文件26位和32位版本。 哈尔滨工程大学硕士学位论文 I| I 4.3.2Linux在PDA平台上的移植 Linux内核的启动可分为三个阶段:第—阶段主要是进行CPU和体系结构的检 查、CPU本身的初始化以及页表的建立等;第二阶段主要是对系统中的—些基础设 施进行初始化;最后则是更高层次的初始化,如外部设备的初始化。启动流程如图 4.3所示: 图4.3嵌入式Linux系统启动流程 在Linux内核移植的初始阶段应尽可能暂时屏蔽不相关的设备驱动以及内核功 能配置选项,使内核支持的选项尽可能的少,构造最小内核。对内核的修改也尽可 能的小,对内核不正确的修改会引起系统崩溃。在确保已经进行的内核移植操作正 确的情况下逐步的添加相应的硬件支持和功能支持。 首先是准备一些必要的文件,主要的修改部分是内核入口部分(head-army.S)、 哈尔滨]二释大学硕士学位论文 处理器和体系结构相关的部分(mach-smdk2410.c)、I/O端口映射部分和中断初始 化部分(entry-armv.c)。移植过程如下: (1.)登记machine D-. 把machine is S3C2410 Co】qFIG剐RC=H S3C24lO MACH下佃E S3C2410 machine ID 200加入到linuxdarch/arm/tools/mach-types文件中, 脚本 linux/arch/amVtools/gen-mach-types需要linurdarch/mn/tools/mach-types来产生 linux/includc/asm-ann/tools/mach-typcs.h文件(编译的时候产生),这个文件设置了 一些定义和宏。源代码使用这些宏和定义来选择合适的汇编代码(操作系统中会根 据不同的机型设置不同的代码,而提供的接口是—样的)。 (2)配置文件 linurdarch/am/def-configs包含以<machine-name>(这里是¥3C2410)命名的默 认配置文件。编辑linux/arch/arm/coniig.in文件以便使make config支持¥3C2410。这 个文件说明了机器的CONFIQsymbols以及他们与其他CONFiQsymboks之间的依 赖关系。其实这个文件是在后面的make menuconfig中自动产生的。从这里可以看 到机器的各种配置。 这里还需要加入—些对外围设备的支持选项。 (3)Makefile文件 1)arch/arm/Makefile 插入表明该机型选用的是¥3C2410的语句到这个文件。 2)arch/mm/Ix,ot/Makefile 在这个文件中定义Zq"EXTADDR(内核解压后开始的地址),这个地址值应 该和Bootloader中设定的Linux被加载的地址相同,标准的做法是在RAM基址以 上32K(0xS000),RAM基址和内核开始之间的空间留给页表使用。 (4)中断初始化和中断处理部分 arch/arm/kemel/entry-annv.S j这里提供汇编语言编写的宏disable_fiq、getjrgnr and base、irq_pdotable。 disable_fiq和irq_prio_table通常是空的,getjrgnr_and_base用来从处理器获得中断 号。 (5)调试函数的设置(调试内核时使用) arch/area/kernel/debug-army.S 哈尔滨丁程大学硕士学位论文 这里的函数不依赖中断或者任何内核函数,如果内核不能启动,需要这些函数 来调试内核。 addruart——设置UART的地址; senduart——发送; waituart——等待; busyuart——UART忙。 (6)设置有关¥3C2410的体系结构 1)arch/ram/math s3c241 0/Makefile 在这里为机器添加目标代码,在这个文件中列出目标文件。 ”arcb./anTl/mach—s3c2410/mach-smdk2410.c 这是非常重要的文件,它包含体系结构的fix (修补函数)和Io初始化。 以 START 的配置。各种有关机型的参数 开始的一系列宏用来建立机.u器psMACHINE 会被填入数据结构machine—desc(用来描述机器,称为机器描述符)中。tLx'up0用 来在引导阶段调整和分配机器的各种入口。 ”include/asm—arm/arch—s3c2410/hardware.h 虚拟地址和实际地址的转换函数放在这里。 4)include/asm arm/arch s3c241 0/s3c241 0.h 在这个文件中,定义内存地址、IO地址等以及映射关系。 5)include/asm—amgarch—s3c2410/io.h 在这儿定义宏IO_SPACE_LIMlT(as Oxtmmr)、j嘶dm)、_arch__getw(addr)、 _arch_putw(data,addr)以及其它和CPU有关的宏。 (7)其他设置 当然,还需要修改和系统时间以及内存映射有关的文件,这些比较简单。 修改完相关的文件后,就可以通过 make menuconfig mflke dep n比zImage 配置内核、编译内核和生成核映像文件,然后下载到系统中去。 如果上述步骤全部正确,就会产生可引导的压缩内核,并且通过调试函数输出 调试信息,但是还需要添加支持外围设备的程序,相关文件的位于以下目录: 哈尔滨丁程大学硕士学位论文 linux/drivers—·各个驱动程序所在tl录; linux/fs——文件系统目录; linux/net——网络协议目录。 在本文的PDA上有以下一些驱动程序Framebuffer(LCD)、Touchpad、RTC、 UARTS、SD/MMC Card和USB的驱动程序,相关内容在下一章具体叙述。 4.4文件系统的构建 4.4.1YAFFS文件系统简介 YAFFS(Yet Another Flash File System),是—种类似于JFFS/JFFS2的专门为 Flash设计的嵌入式文件系统。YAFFS借鉴了JFFS文件系统日志系统的思想,通过 日志机制保证文件系统的稳定性,适合于大容量的存储设备。 YAFFS文件系统按照层次结构设计,可分为文件系统管理层、YAFFS内部实 现层、NAND接口层,简化了其余系统的接口,可以方便的集成到系统中去。YAFFS 还带有NAND芯片驱动,并为嵌入式系统提供了直接访问文件系统的API。YAFFS 对文件系统上的所有内容都统一当作文件来处理,每个文件都有—个页面专门存放 文件头,文件头保存了文件的模式、所有者id、组id、长度、文件名、Parent Object ID等信息。 YAFFS还带有NAND芯片驱动,并为嵌入式系统提供了直接访问文件系统的 API,用户可以不使用Linux中的MTD和VFS,直接对文件进行操作。NAND Flash 大多采用MTD+YAFFS的模式。MTD(内存技术设备——M锄。哆Technology Devices)是对Flash操作的接口,提供了一系列的标准函数,将硬件驱动设计和系 统程序设计分开。 4.4.2珊S文件系统的移植 YAFFS代码可以从http://www.alephl.co.uldannlinux/proj椰载(YAFFS代码 包括ya母9cc.c,yaffsfileem.c,ya伍s_fs.c,yaffs__guts.c,yaffsmtdif.c,yatfs_ramem.c)。 YAFFS文件系统源代码相关文件及功能描述如下: · yaft's_ece.C-—屯CC校验算法; yaffs_fileem.c_—嘲0试flash; 哈尔滨]_程大学硕+学位论文 yaffs yaffs_guts.c一—-YAFFS文件系统算法; yaffs mtdif.r—喇AND函数; yaffs YAFFS在嵌入式Linux下的移植过程如下: (1)内核中没有YAFFS,所以需要建立YAFFS目录,并把下载的YAFFS代 码复制到该目录下面; (2)修改fs/Kconfig,使得可以配置YAFFS; (3)修改fs/rnakeNe,添加对YAFFS的支持; (4)在fs目录下生成YAFFS目录,并在里面生成—个makefile和Kconfig文 件; (5)在Jarch/arm/mach-s3c2410/mach-smdk2410.C找到smdk default nand_part 结构,修改nand分区。需要注意的是分区要结合Boot Loader里面的分区来进行设 置; (6)配置内核时选中MTD支持; (7)配置内核时选中YAFFS支持; (8)编译内核并将内核下载到开发板的flash中。 YAFFS文件系统移植的过程中需要fs/config.in添加YAFFS配置,再在 fs/makefile中添加YAFFS编译选项。 在drivers/mtd/maps/physmap.C定义YAFFS文件系统的分区表信息: const static struct mtd_partition partition"mf01]={ ‘ {name"‘'u-lx)ot", offset:X00000000, size:0X00020000), {name"‘'Kernel'’ offset:0X00020000, j size:OX00100000}, {name:'罚e system'" offset:0X00120000, size:∞:03de0000}, 哈尔滨工程大学硕+学位论文 配置内核时选中MTD支持(【木】MTD partitioning support)和YAFFS支持(◇> Ya Another Flash Filing System(YAFFS)file system support),这时YAFFS文件系 统就移植完成了。 . 4.5本章小结 本章在对PDA软件平台的总体结构介绍之后较为详细的阐述了操作系统在 PDA硬件平台上的移植,其中包括Boot l oader的设计,Linux内核的移植以及文件 系统的建立。 哈尔滨工程大学硕+学位论文 第5章设备驱动程序的设计和用户图形界面的开发 Linux的开放性极大促进了自身的发展。如今在无限的网络资源中总是很容易 找到为了实现某种功能的应用程序、为了驱动某个特定设备的程序和为了提高工作 效率的新版本内核。正是这些开源精神的倡导者用这些灵l生的代码极大推动Linux 在各个方面的发展,当然也包括嵌入式方面。使它在嵌入式领域的应用也越来越流 行。同时,也就要求Linux面对更多各种不同的硬件设备。通过编写驱动程序,使 这些新设备为系统服务也就成了嵌入式系统开发的—项重要工作。 5.1设备驱动程序概述 设备驱动程序在Linux内核中扮演着特殊的角色。他们就如—个个黑箱,对外 提供一系列定义良好的内部编程接口的同时,完全隐蔽了设备内部的工作细节。驱 动程序的使用者通过—组标准化的调用就能轻松完成对硬件设备的操作。这些标准 化的调用称为系统调用,系统调用是操作系统内核和应用程序之间的接口,设备驱 动程序是操作系统内核和机器硬件之间的接口,四者关系如图5.1所示。 应用程序 弋夕 系统调用 |!之乡 内核 设备驱动 \之夕7 硬件设备 设备驱动的分层结构 哈尔滨工程大学硕士学位论文 5.1.1驱动程序的结构 —般Linux设备驱动程序可以分为3个主要组成部分: (1)自动配置和初始化子程序,负责检测所要驱动的硬件设备是否存在和是否 能正常工作。如果该设备正常,则对这个设备及相关设备驱动程序需要的软件状态 进行初始化。这部分驱动程序仅在初始化的时候被调用一次。 (2)服务于I/O请求子程序,又称为驱动程序的上半部分。调用这部分是由于 系统调用的结果。这部分程序在执行的时候,系统仍认为是和进行调用的进程属于 同—个进程,只是由用户态变成了核心态,并具有此系统调用的用户程序的运行环 境,所以可以在其中调用sleep0等与进程运行环境有关的函数。 (3)中断服务程序,又称为驱动程序的下半部。在Linux系统中并不是直接从 中断向量表调用设备驱动程序的中断服务子程序,而是由Linux系统来接收硬件中 断,再由系统调用中断服务子程序。因为设备驱动程序一般支持同—类型的若干设 备,所以—般在系统调用中断服务子程序时,都带有—个或多个参数,以唯—标志 请求服务的设备。 在系统内部,I/O设备的存伸『通过—组固定的入口点来进行,这组入口点是由 每入口个点设由备啾的件设操备作驱结动构程来序向提系供统的进。行具说体明到。Lfianluexo系pe统ra,tio设ns备结驱构动定程义序于所Li提nu供x/的f这s.组h 文件中,随着内核的不断升级,file operations结构也越来越大,不同版本的内核会 稍有不同。 file operations结构中的成员几乎全部是函数指针,所以实质上就是函数跳转表。 每个进程对设备的操作,都会根据major、minor设备号,转换成对file 9perations 结构的访问。 在用户自己的驱动程序中,首先要根据驱动程序的功能,完成file operations 结构中函数实现。不需要的函数接1:3可以直接在file operations结构中初始化为 NULL。file变量会在驱动程序初始化时,注册到系统内部。当操作系统.operations 对设备进行操作时,会调用驱动程序注册的file 5.1.2Linux设备驱动程序接口 Linux设备驱动程序为应用程序设计者提供的一组标准编程接口都在 结构中的函数指针。.perations 哈尔滨工程大学硕+学位论文 舭_operations的结构中定义。内核使用fie_operations结构访问驱动程序内的函数, 从而达到系统调用的实现。file 结构是—个定 Y,.在<Linux/fs.h> 针数组,结构为: 结构中的成员几乎全部指针,所以实质上就是函数跳转表。.perations 中的函数指.operations struct file_operatiom { int(}lseekXstn】ct inode木inode,struct file宰mp,off_t ogint pos); ∥移动文件指针的位置,只能用于可以随机存取的设备 int(*readXstruct inode木inode,struct file}rap,char*buf,int count); /尉文件进行读的操作,参数bur为存放读取结果的缓冲区,count为所要读取的 数据长度。返回值为负表示读取操作发生错误;否则,返回实际读取的字节数 脓杉砰蜥写操作,完成向设备发送数据的任务 iat(水writeXstruct inode宰inode,stng-t file宰rap,const char*bur,int count); int(牛readdirXsmLct inode宰inode,struct rae幸rap,void宰,findir_t filldir); //取得下—个目录入口点,只有与文件系统相关的设备驱动程序才使用 int(木selectXsmm inode幸inode,struct file奎邱,int seLtype,select table幸wait); 脏生行选择操作。如果驱动程序没有提供select入口,select操作将会认为设备已 经准备好进行任何的FO操作 int(}ioctl)(statct inode·inode,struct file卡flip,unsigned int cmd,unsigned long arg): 脏生行读写以外的操作,参数cmd为自定义的命令 ht(枣mmapXstrua file枣脚,struct vm_area_struct宰); ∥用于把设备的内容映射到地址空间,_般只用于块设备驱动程序 int(木openXstruct inode乖inode,struct file宰rap); ‘ 肘】.开设备准备进行I/O操作 void(木releaseXstruct inode+inode,struct file木丘lp); ∥关闭对应设备,既完成close的系统调用 int(水fsync)(smm inode木inode,struct file木flip); //¥耥J新待处理的数据 ); file 每们挂程对设备的操作,都会根据主、次设备号,转换成对相应file_operations结构 I 的访问。 哈尔滨工程大学硕+学位论文 在驱动程序开发过程中,首先要根据驱动程序的功能,完成file operations结构 中函数的实现。对于不需要的函数接口可以直接在结构中初始化为NULL。 file operations会在驱动程序初始化时,注册到系统内部,当操作系统对设备进行操 作时,会调用驱动程序注册的file operations结构中对应函数的指针。 5.1.3Linux设备驱动程序模块化 完成了设备驱动程序的编写后,就是对程序的编译。Linux下的设备驱动程序 可以按照两种方式进行编译,—种是直接静态编译成内核的—部分,另—种则是编 译成可以动态加载的模块。如果直接编译进内核的话,会增加内核的大小,还会因 为要改动内核的源文件,而使系统的稳定性降低,而且不能动态卸载,也不利于调 试。而动态加载的驱动程序,以模块方式存在,可以在需要的时候加载,任务结束 后卸载。在存储资源有限的嵌入式应用中,第二种编译方式运用广泛。在以模块方 式编写驱动程序时,下面两个函数是必不可少的。 (1)模块初始化函数:int init init module(void),它负责注册模块所提供的任 何设施,既—个可以被应用程序访问的新功能,如作为字符设备驱动模块,向内核 注册—个字符设备的过程就是在此完成。 (2)模块清除函数:void cleanup 有由初始化函数注册的所有设施,并且习惯._m上od以u相le(反vo于id)注册的顺序实现撤消。 内核模块编译后生成的模块(—般为.O文件)可以使用食疗令insmode载入Linux 内核,从而成为内核的一部分,此时内核会调用模块中的函数ink module0。当不 需要该模块时,可以使用rmmod命令进行卸载,此时内核会调用模块中的函数 deanup_rnodule0。 5.1.4设备驱动程序的开发流程 ,该函数的任务就是撤消所.exit 嵌入式Linux系统驱动程序开发与普通Linux没有大的区别。嵌入式设备由于 硬件种类非常丰富,在所选的内核版本中不一定包括所需要的驱动程序。实现—个 嵌入式Linux设备驱动的流程如下: (1)定义主、次设备号,也可以通过函数实现动态获取; (2)实现驱动初始化和清除函数。如果驱动程序采用模块加载方式,则要实现 哈尔滨工程大学硕士学位论文 模块初始化和清除模块函数; . (3)设计所要实现的文件操作,定义file 结构;_operations (4)实现所需的文件操作调用,如open,read,write等;. (5)实现中断服务函数,并用request蛔向内核注册; (6)将驱动编译到内核或编译成模块.,用imaod命令加载; (7)生成设备节点文件。 5.2 LCD设备驱动程序设计 5.2.1FIamebuffer LCD控制器的功能是产生显示驱动信号,驱动LCD显示器。用户只需要通过 读写一系列的寄存器,完成配制和显示控制。配置LCD控制器重要的—步是指定 显示缓冲区,显示的内容就是从缓冲区中读出的,其大小由屏幕分辨率和显示颜色 数决定。在驱动LCD设计的过程中首先要做的是配置LCD控制器,而配置I_,CD 控制器中最重要的一步是对帧缓冲区(Framebuffer)的指定。驱动帧缓冲的实现是整 个驱动开发过程的重点。 帧缓冲(Framebuffer)是Linux为显示设备提供的—个接口,是把显存抽象后 的_.种设备,它允许匕层应用程序在图形模式下直接对显示缓冲区进行读写操作。 这种操作是抽象的,统一的。用户不必关心物理显存的位置、换页机制等等具体细 节。这些都是由Framebutfer设备驱动来完成的。帧缓冲驱动广泛的应用在Linux的 桌面系统中,Xwindow服务器就是利用帧缓冲进行窗口的绘制。尤其是通过帧缓冲 可显示汉字点阵,成为Linux汉化的唯一可行方案。 帧缓冲设备对应的设备文件为/dev/fb*,如果系统有多个显示卡,Linux下还可 支持多个帧缓冲设备,最多可达32个,分别为/dev/f60至岣ev肺3 l,而阳ev肺则为 当前缺省的帧缓冲设备,通常指向/dev/filO。当然在嵌入式系统中支持—个显示设备 就够了。帧缓冲设备为标准字符设备,主设备号为29,次设备号则从0到3l。分别 对直}d铡|宙∞-/dev/fb3 1 o 帧缓冲设备属于字符设备,采用了“文件层.驱动层"的接口方式a Linux为帧 缓冲设备定义的驱动层接口为struct Yb info结构,在文件层次上Linux为其定义了 下面的操作函数: 哈尔滨丁程大学硕士学位论文 .static struet file._opemtions ib_fops={ owner=THIS MODULE, 嘏l耐b贼jd, wri归-fo_write, ’iocld--eo_ioa], mmap--fo mmap, rel峨release, opt--to open, gel;wmla】∞目卿萌=g融;fb!:LlIml删舛ea' #ifdefHAVE—.ARCH—.FB——UNMAPPED——AREA 托-ndif >; 其中的成员函数都在文件linux/driver/video/tbmem.e中定义。由于显示设备的特 殊性,在驱动层的接口中不但要包含底层函数,还要有—些记录设备状态的数据。 Linux为帧缓冲设备定义的驱动层接口为struct fo into结构,在include/ILnux/fb.h中 定义。这个结构比较长,限于篇幅,文章中就不全部列出了。幸运的是,嵌入式系 统要求的显示操作比较简单,只涉及到结构中少数几个成员,下面只对编写驱动中 要用到的几个关键成员作一说明。 struct fb info是LLnux为帧缓冲设备定义的驱动层接口。fb info中纪录了帧缓 冲设备的全部信息,包括设备的设置参数,状态以及操作函数指针。每—个帧缓冲 设备都必须对应—个fb im。o结构。其中成员变量modemme为设备名称,fonmamc 为显示字体,loop为指向底层操作的函数的指针,这些函数是需要驱动程序开发人 员编写的。 成员fo—vat—sereeninfo和tb—fix—sereeninfo也是结构体。其中fo—var—sereeninfo 记录用户可修改的显示控制器参数,包括屏幕分辨率和每个像素点的比特数。 fo vflr Scl优nin如中的x11es定义屏幕—行有多少个点,yres定义屏幕一列有多少个点, bits per 定义每个点用多少个字节表示。而fb fix screerlinfo 中记录用户不能修_pixel 改的显示控制器的参数,如屏幕缓冲区的物理地址长度。当对帧缓冲设备进行映射 操作的时候,就是从fb fix SCl'eenJ/11jo中取得缓冲区物理地址的。上面所说的数据 成员都是需要在驱动程序中初始化和设置的。 39 哈尔滨工程大学硕士学位论文 在了解了上面所述的概念后,编写帧缓冲驱动的实际工作并不复杂,需要做的 工作是: (1)编写初始化函数:初始化函数首先初始化LCD控制器,通过写寄存器设 置显示模式和显示颜色数,然后分配LCD显示缓冲区。在Linux可通过klnalloc函 数分配一片连续的空间。 (2)编写结构fb into中函数指针fb ops对应的成员函数:对于嵌入式系统的 简单实现,只需要下列三个函数就可以了: fix删。木fix,int struct fo_ops{ int(宰fb_geC_fixXstmet fb con,struct fb—info幸info); int Pfb gelvar)(smm fb var screeninfo·var,int con,struct eo_info幸into); con,s蚴tb—info·info); int(水fb set varXstruct tb vat sereeninfo·var,int ); 5.2.2LCD驱动程序的移植实现 开发过程中采用的移植步骤如下: (1)原码拷贝过程,拷贝LCD相关文件并在此基础上作相应的修改: arch/ann&emel/armksyms.c arch/arm/mm/comistent.c drivers/video/arm/clcd.-core.c drivers/video/atan/clcd-cp.C drivers/video/arm/clcd.h ’drivers,video/ama/clcd-impdl.C drivers/video/ama/clcd-versatile.c drivers,video/ann/Kconfig drivers/video/ann/Makefile (2)基于原码树修改LCD驱动相关的文件: ar】cb/am价nach-i11:ce口锄舭孕a土。蔓!cp.C drivers/video/fbmem.C drivers/video/Kconfig drivers/video/Makefile 40 哈尔滨’T:程大学硕十学何论文 因为该设计将驱动作为内核的一部分,而不是模块加载的方式,所以需重新编 译内核,并将新编译的Linux内核下载到开发板内。 Linux内核配置与编译时,使用下面的命令启动Linux内核配置工具: #make menuconfig; 编译内核时要加入对LCD帧缓冲设备的选项: Graphics support--> [母]Support for flame buffer devices r]ARM PrimeCell PLl 10 CLCD support Console display driver support--> <*>Framebuffer Console support P]Select compiled-in fonts r]VGA 8x8 font r]VGA 8x16 font 同时修改传递内核的参数crndline,然后编译生成新的内核u-linux.vga。 下载新的内核重新启动系统,通过应用程序检测,可以使屏幕显示任意所需图 片,表明了驱动LCD显示的设计已成功实现。 5.3触摸屏设备驱动程序设计 5.3.1触摸屏驱动程序中用到的数据结构 1.触摸屏采样结构 typedefslruct{ unsigned short pressure; unsigned short x; unsigned short y; unsigned short pad; )TS r砸r; 表示笔触点数据信息的结构TS—RET,它包括了以下内容: (1)Dressll船—_压力。 (2)xr——横纵坐标的采样值。 41 哈尔滨工程大学硕+学位论文 (3)pad_—_土真充位。 · 2.触摸屏设备结构 typedefstruct{ b删TS unsigned int penStatus; TS_RET BUF]; umigned int head,tail; wait_qucuc_hcad_twq; spinlock_t lock; }TS_DEV; TS DEV结构用于记录触摸屏运行的各种状态,penStatus包括PEN UP、 PEN DOWN和PEN FLEETING。butlMAX TS BtW]是用来存放数据信息的事件 队列,head、tail分别指向事件队列的头和尾。程序中的笔事件队列是—个环形结构, 当有事件加入时,队列头加一,当有事件被取走时,队列尾加一,当头尾位置指针 —致时读取笔事件的信息,‘进程会被安排进入H卿民。wq等待队列,包含—个锁变量 和—个正在睡眠进程链表。当有好几个进程都在等待某件事时,Linux会把这些进 程记录到这个等待队列。它的作用是当没有笔触事件发生时,阻塞上层的读操作, 直到有笔触事件发生。lock使用自旋锁,自旋锁是基于共享变量来工作的,函数可 以通过给某个变量设置—个特殊值来获得锁。而其他需要锁的函数则会循环查询锁 是否可用。MAX TS BUF的值为16,即在没有被读取之前,系统缓冲区中最多可 以存放16个笔触数据信息。 3.触摸屏操作函数结构 static stmct file_operations s3c2410_fops={ owner:THIS—MODULE, open:s3e2410 ts open, read:s3e2410一ts—read, release:s3e2410一ts—release, poll:s3c2410_ts__pool, ‘ ); s3c2410 12 El 就是内核对驱动的调用接,完成了将驱动函数映射为标准接。.fops 上面的这种特殊表示方法不是标准C的语法,而是Q町编译器的—种特殊扩展, 哈尔滨工程大学硕士学何论文 它使用名字进行结构字段的初始化,它的好处体现在结构清晰,易于理解,并且避 免了结构发生变化带来的许多问题。 ‘ 5.3.2触摸屏驱动程序的实现 在Linux中,触摸屏被当成字符设备来处理。触摸屏驱动程序主要完成设备初 始化,用户按下、释放时对触摸点坐标信息的采集、转换等。由于触摸屏主要是完 成信息输入的,因此不需要实现write函数。 · 1.设备驱动初始化与撤销过程的设计 Linux内核为设备入口提供了一种特殊的文件系统,即设备文件系统devfs ’ (device file system)。devfs机制的优点在于: (1)各种设备驱动模块动态地向系统登记,设备初始化时若醐w目录下创建设 备入口点,注销设备时将其删除。 (2)设备驱动程序可以指定设备名、所有者和权限位。 (3)不需要为设备驱动程序分配主设备号以及次设备号。 (4)当装载和卸载模块时,不再需要运行脚本来仓0建设备文件,驱动程序自主 地管理其设备文件。采用devfs机制的设备驱动程序调用下面的函数来处理设备的 创建和删除工作。 devfs_hander_t devfs mk dir(devfs_hander_.t dir,const char宰llaiTle,void幸info); devils—bander—t devfs_register(dev蕾s_hander_t dir,const char·name,unsigned int_tlags,unsigned int major,unsigned int minor,umode_t mode,void枣ops,void}info): void devfs_tmregister(devfshander t de); 2.触摸屏操作函数的实现 (1)打开设备 当触摸屏设备被打开时(s3c2410 ts open函数),完成触摸屏初始化的部分工 作,初始化一个缓存区、等待队列和定时器,触摸屏的状态初始为PEN UP等。触 摸屏驱动程序中定义了—个可保存16个事件的环形缓存区,它可保存应用程序来不 及处理的触摸屏动作。 (2)读设备 在用户程序调用删对触摸屏进行读操作,驱动程序就会调用入口点函数 s3c2410 ts稼|(10。这个函数实现的任务是将数据从设备缓存中读到用户空间的数据 哈尔滨工程大学硕士学位论文 缓存中。当缓存区数据不为空时,直接返回缓存区中的数据:当缓存区数据为空时, 根据打开设备是否为o.NONBLOCK状态来决定是否阻塞当前的用户进程。通过调 用interruptible_sleepon(&tsdev.wq)数将进程阻塞,并进入等待队列,同时设置触 摸屏状态为等待;如果选择了非阻塞型操作,则程序在没有数据到达的时候立即返 回。 在等待数据到来的过程中,如果有触摸动作发生,则该进程被唤醒,并将坐标 位置信息等从队列中取出,放入用户空间(copy_to_user),这样用户程序就可以使 用了,避免了用户直接和硬件打交道。 触摸屏驱动程序编好后,要把编好的触摸屏驱动程序进行模块方式编译,加载 入内核进行测试。也可以把s3c2410一.c拷贝到drivers/char目录中,并修改相应得 配置编译文件。 5.3.3触摸屏驱动的配置及编译 驱动程序编写完成后,可以选择将其编译为动态可加载模块或静态地编译入内 核中。这里采用的是编译到内核中的方式,方法是需要修改drivers/char/Config.in配 置文件和drivers/char/Makefile文件。 在drivers/char/Cortfig.in文件中添加: dep tristate‘Support¥3C2410 TouchScreen’ CONFIG_S3C2410_TOUCHSCREEN¥CONFIG—。ARCH—.¥3C2410 在drivers/char/Makeftle文件中添加: obj-¥(CONFIG_S3C2410_TOUCHSCREEN)+=s3c2410-ts.o 之后在内核配置图形界面中选择‘Support¥3C2410 TouchScreen’为Y,即可 将触摸屏驱动配置到内核中。 5.4 USB设备驱动程序设计 在Linux中,由于Linux本身已经提供了很多设备的驱动程序,包括USB,这 里只是在HCD(Host Controller Driver)基础上实现了USB键盘,并按功能对USB 驱动程序进行详细的说明。 ’Linux下的USB工作方式是Host采用查询的方式周期性的扫描集中器的端口, 如果发现有新的设备插入总线,Host就通过root hub分配给设备—个地址,然后读 哈尔滨下程大学硕士学位论文 取设备的设备描述体和接口描述体等信息,根据这些信息,Host就可以确定和设备 采用哪—种方式来通信。然后通过控制性(conlr01)传输类型建立传输,建立传输 的。当然,在设备插入到总线上时会调用该设备对应的删函数来探测设备对应 后就是真正的数据通信了。也就是说在USB总线中,所有的传输都是由Host发起 的驱动程序,在设备撤离总线时,会调用di sIc0衄ecfO函数处理善后工作。 在文件传输过程中,很重要的一点是:当服务器端开始发送数据时,客户端要 同时进行文件数据的接收。如果客户端没有运行,服务器端会一直等待客户端发送 请求。当服务器源文件发送完毕,则客户端也将源文件的数据完全接收,并生成新 的目标文件,从而实现文件的网络通信。 5.4.1USB传输协议 USB主机唯—通过描述符了解设备的有关信息,根据这些信息,建立起通信, 在这些描述符中,规定了设备所使用的协议、端点情况等。因此,正确地提供描述 符,是USB设备正常工作的先决条件。USB海量存储设备(USB Mass Storage Class) 只需要支持—个接口,即数据接口,选择缺省配置时此接口即被激活。数据接口允 许与设备之间进行数据传输,它提供三个端点:Bulk hpIIt端点、BulkOutput端点和 中断端点。海量存储设备是随机存取、基于块偏区存储的设备。它只能存储和取回 来自CPU的数据。这种设备的接口遵循SCSI标准的直接存取存储设备协议。USB 设置上的介质使用与SCSI设备相同的逻辑块方式寻址。 设备插入到USB后,USB即对设备进行搜索,并要求设备提供相应的描述符。 在USB Host得到上述描述符后,即完成了设备的配置,识别出为Bulk-Only的Mass Storage设备,然后即进入Bu配OIlly传输方式。所以在设备驱动程序中需要静态的 定义一段数据区域包含该设备的各种描述符以备主机查询。在此方式下USB与设备 间的所有数据均通过Bulk-In和Bulk-Out来进行传输,不再通过控制端点传输任何 数据。 在这种传输方式下,有三种类型的数据在USB和设备之间传送,CBW,CSW 和普通数据。CBW(命令块包——Command Block Wrapper)是从USB Host发送到 设备的命令,命令格式遵从接口中的bInterfaceSubClass所指定的命令块,这里为 SCSI传输命令集。USB设备需要将SCSI命令从CBW中提取出来,执行相应的命 令,完成以后,向Host发出反映当前命令执行状态的CSW(Command Status 哈尔滨1=程大学硕士学位论文 Wrapper),Host根据CSW来决定是否继续发送下—个CBW或是数据。Host要求 USB设备执行的命令可能为发送数据,则此时需要将特定数据传送出去,完毕后发 出CSW,以使Host进行下一步的操作。USB设备所执行的操作可用下图描述:’ 图5.2USB数据传黼图 USB Host按照下表的格式向设备端发送CBW: 表5.1 CBW格式 7 6 5 4 3 2 l O o。 dCBWSignature ” dCBWTag 8-1l dCBWDataTmnsferLenglh 12 bmCBWRasS 13 Reserve bCBWIIJN 14 15-30 Reserve bCBWCBLenglh CBWCB. . 得到—个CBW后,解析出CBWCD中所代表的命令,然后按照SCSI命令集 中的定义来执行相应的操作,或是需要接收下—个Bulk-Out发来的数据,或是需要 向Host传送数据,完成以后需要向USB Host发送CSW,反映命令执行的状态。 USB也是通过此来了解设备的工作情况的。下面是CSW的格式和定义: 表5.2CSW格式 哈尔滨T稗大学硕十学侮论文 ∞ .dCSWSignatu佗 " dCSWTag &1l dCSWDataResidue 12 bCSWStatus 5.4.2USB设备驱动实现 USB的设备驱动利用分层实现,底层模块和硬件互交,而上层模块实现具体的 功能和协议。这样可以把各部分功能分离,方便添加和修改功能。无论何种功能, 硬件的互交是不变的,比如数据发送的开始和停止,数据的同步,读写FIFO中的 数据等等都是相同的,所以把实现这些功能的函数放在底层实现,上层不同模块都 可以调用这些函数来实现不同功能。 除了和硬件互交以外,底层模块还要和操作系统紧密相连,即向系统注册USB 的设备驱动。其采用如下的结构体并在内核中注册。 struet device driver ude—driver={ n卸[Ile:‘'zylonite-udc", bus:&platform_bus_type, probe:zylonite_ude._probe, i,ulfflove’zylonite_udc_remove ); 其中name项是本驱动的名称,根据bus项提供的接口与内核中的设备相匹配。 probe和remove分别是设备插上和移除时所进行的操作。在probe函数中除了一些 硬件和软件的初始化外,还注册了一个中断用来在收到数据和发送完毕数据时通知 系统: request_ira(IRQ..USB,zylonite_udc_irq,SA_INTERRUPT,driver_name,dev); 其中zylonite 据。设备刚插上时会产生—个中断,这时中断函数便利用端点0和主机互交发送描 述符并接受主机设定。当有数据接收到时,中断函数负责把接收到的数据送给上层 模块。当FIFO中的数据发送完毕时,中断函数检查是否还有数据未发送,如果有 则把数据填入发送FIFO,否则通知上层模块数据发送完毕。 便是中断数,此函处理几乎所有的发送和接受数ude.irq 哈尔滨工程大学硕士学位论文 底层模块提供了—个通用的接口给上层模块,并可以方便的注册,卸载。每个 上层模块使用usb_gadget_driver数据结构表示。其中包含了上层模块函数指针,这 些函数分别实现E层模块注册,.卸载时的—些操作。最后上层模块使用下层模央提 供的函数: int usb_gadget_mgistcr_driver(stmct usb_gadget_ddver幸driver); 来完成—个功能模块在下层模块中的注册。 上层模块的usb__gadget_driver结构如下: stmct usb_gadget_driver fsg_driver={ speed:USB_SPEED_FULL, bind:fsg_bind, unbind:fsg unbind, }; 其中speed表示该设备使用USB的何种速度,此处使用USB全速即12M每秒。 bind为此模块加载后的—些初始化操作,比如打开—个分区文件作为FAT文件系统 的镜像,并将其格式化这样该分区文件的头部就包含了所有的FAT文件头信息。并 在操作系统用户空间的接口处提供了该模块以及文件系统的—些属性与信息,方便 在用户空间查询状态,最后启动—个内核线程,该内核线程处理设备与主机之间的 Bulk-Only协议互交,并根据设备当前的状态发送或接受相应的数据。unbind函数 首先处理所有未完成的USB传输请求,然后关闭作为文件系统的分区文件,并清楚 用户空间接口处的所有信息,最后结束该模块的内核线程。 该内核线程平时处于休眠状态,每当有数据要发送或者接受时被唤醒,然后首 先调用get_next_commandO函数从主机处得到主机当前的CBW命令并将SCSI命令 从CBW中提取出来,然后调用do scsi commandO"函数执行相应的命令,完成以后 使用send 数向主机发出当前命令执行状态的 CSW Host 以使进行下一步.statusO函 的操作。当主机和设备之间没有数据传输时,该内核线程便进入休眠状态等待下一 次数据请求。 哈尔滨rT程大学硕十学位论文 5.5嵌入式Linux图形用户界面(GUI) 5.5.1嵌入式GUI的基本概念、特点和结构 图形用户界面(GIⅡ_——黟aphiCal user interfaces)是计算机设备与用户之间沟通 的桥梁。在个人PC上安装Linux系统时,我们会从—些“标准"图形组件中选出 自己所想要的,通常情况下,会选择X Window(XFree86)作为图形显示基础,选 择GNOME或者KDE作为窗口环境。但是在PC上的Linux有关图形界面的这—套 工具并不适合嵌入式Linux系统。嵌入式设备有严格的资源要求(比如十分有限的存 储空间)。同时嵌入式系统经常有一些特殊的要求,而这些要求普通的PC上的图形 窗口系统是远远不能满足的。比如察Y-r殊的外观效果,控制提供给用户的函数,提高 装载速度,特殊的低层图形或输入设备等等,因此嵌入式Linux系统必须要有自己 的图形用户界面。 —个具备良好移植性的嵌入式GUI系统,其底层接口应该在很大程度上隐藏具 体硬件的实现细节,抽象出GAL与工AL层。GAL层完成系统对具体的显示硬件设 备的操作,为程序开发人员提供统一的图形编程接口。IAL层则需要实现对于各类 不同输入设备的控制操作,提供统一的调用接口。—个典型的嵌入式GUI系统结构 如图5.3所示。 应用程序编程接1:3(API) 嵌入式GUI实现 GAL层 IAL层 图形显示设备 输入设备 图5.3嵌入式GUI系统结构 上图中GAL和IAL层实现了具体的设备操作。最终为嵌入式GUI系统提供统 ·的硬件操作接口。GAL和L虬层—般由GUI系统底层支持库实现,目前匣用于 嵌入式hI呶系统中比较成熟、功能也比较强大的GUI系统底层支持库有SVGA lib, LiKTA3I、Xwindow、framcbutfer等。 哈尔滨丁程大学硕+学位论文 5.5.2典型的嵌入式GUI开发工具 . 嵌入式系统是—种定制设备,它们对GUI的需求也各不相同。有的系统只要求 一些图形功能,而有些系统要求完备的GUl支持,因此很多嵌入式系统需要自己特 定的嵌入式GUI随着嵌入式系统的飞速发展和嵌入式GUI项目的出现,为特定的 嵌入式GUI的定制提供了参考和模板。目前开发嵌入式GLⅡ的方法主要有下列三 种: (1)—些大型厂商有能力自己开发满足自身所需的GUI系统。 (2)—些厂商没有将GUI作为—个软件层从应用程序中剥离,GUI的支持逻 辑由应用程序自己负责。 (3)采用某些比较成熟的GUI开发系统,比如MiIliG.UI、Microwindows等等。 GUI是—种类似于操作系统的基础软件,这种软件系统遵循一定的标准,而独 立开发需要投入大量的人力、物力。所以上述第三种方法对于大部分中小型开发者 来说是比较理想的选择。 采用当前较成熟的开发工具系统,可由现存的开放源码的嵌入式GUI利用,减 少了投入的人力、物力,同时大量的开发文档也为开发者提供了宝贵的技术资料, 缩短了开发周期,提高了产品的竞争力,从而使得开发者可以集中精力来开发自己 的应用程序。 如下表5.3为三种主流嵌入式GLⅡ的比较: 授燃 已知能运行的硬 j僻平台 典型系统配置 表5.3用户图形界面性能比较 MiniGUI Micmwindows LGPL MP啪PL Intel x86、AI洲、 PPC、M鹏、 鼬唧删主频最 低需30MHz 10MIPS以上,8MB FLASH,1 6MB RAM Intel x86、AlM、MIPS、 StroJ igARM主频最低需 70MHz 30MIPS以上,16MB FIASH,16MB RAM Qt/Embedded GPL(2.2以后版. 本)VOPL 对系统6毫件需求比菠 高,—般采用 Sm)ngARM,主频最 低需100MHz 200MIPS以上, 16MOEl FLASH, 哈尔滨丁程大学硕十学位论文 系统资源消耗 小 较小 32MB.RAM 最人 函数摩容量 500KB 600l(B 1500KB 对操作系统的要 求 主要运行与Linux控 能够在没有任何操作系统的 具有优良的跨平台特 制台 支挣卜运行 性 图形支持库 基于SVGALib、 LibGGl或 F舢eBuffer 有白己的图形抽象层,可运 行与SVGALib,FrameBuffer 或X之上 基-j-.FrameBuffer 可移植l生 较差 非常好 较好 API 多进程支持 实现语言 产品使用广泛性 Win32风格 好 C语言 中、低端产品 X,win32子集 QT(a斗) X接口的多进程支持好,但 好 Win32尚不支持多线稃 C语言(部分采用汇编) C抖 高、中端产品,主要Cfx寸V- 高端产品,主要针对 持设备 手持设备 从上表可知,MiniGUI是建立在比较成熟的图形引擎之上,开发的重点在于窗 口系统,其小巧精致并且尽量与Win32兼容。MicroWindows目前开发的重点在底 层的图形引擎,窗口系统和图形接口方面功,月a匕N比较欠缺,与Win32和X Windows 窗口系统保持兼容,提供了相对完善的图形功能。 Qt/Embedded是一个专门为小型设备提供图形用户界面的应用框架和窗El系 统。提供了丰富的窗口小部件(Widgets),并且还支持窗口部件的定制,因此它可 以为用户提供漂亮的图形界面。Qt是KDE等项目使用的GUl支持库,所以有许多 基于Qc的X Windows程序可以非常方便地移植到QffEmbedded版本上。最终,在 分析和比较了各种GUI的特点后,本文选用Qt/Embedded作为移植对象。 5.6 Qt/Embedded开发工具简介 5.6.1 Qt/Embedded知识背景及概况 Qt是一个跨平台的C++形用户界面库,由挪威TrollTech公司出品,目前包括 Qc,基于Framebuffer的Qt/Embedded,快速开发工具Qt Designer,国际化工具Qt 哈尔滨I:稃入学硕十学仲论文 Linguist等部分。Qt支持所有Unix系统,当然也包括Linux,还支持WinNT/Win2k, Win95/98平台。Qt的良好封装机制使得Qt的模块化程度非常高,可重用性较好, 对于用户开发来说是非常方便的。Qt提供了一种称为signals/slots的安全类型来替代 callback,这使得各个元件之间的协同工作变得十分简单。并且Qt包括多达250个 以上的a斗类,还提供基于模板的collections、serialization、file、I/O device、directory management、date/time类,甚至还包括正则表达式的处理功能。 Qt/Embedded是Qt的嵌入式Linux端口。它是一种全方位的自包含CH图形用 户界面及平台开发工具,可用于基于Linux的嵌入式程序开发。Qt/Embedded包含 一整套的GUI类,操作系统封装、数据结构类、以及公用和集成类。此外,它还包 括多种用来辅助程序开发、测试和调试的工具。Qt/Embedded API的广阔应用范围 使得它被广泛地应用于大量的开发项目中。Qt/Embedded可用来开发市面上的许多 种产品和设备,其范围涵盖从消费类电子产品(移动电话、web pads和机顶盒)NI 业控制设备(医学成像装置、电子信息站,移动信息系统等)。 Qt/Embedded为嵌入式系统和设备开发者提供以下几种主要优势: (1)拥有同一种API作为Qt桌面(Desktop)。开发者只需学习—种API就 可以利用一个简单的编码库来实现多种桌面环境(Windows、X1 l和Mac OS x)和 嵌入式Linux环境。 ’ (2)可将q的强大能量扩展至嵌入式系统。开发者可构建占用极少量内存和 Flash的高级嵌入式应用程序。 (3)包含特有的视窗系统:Qt/Embedded不需要其他的图形子系统。它包含有 直接在Linux上实现图形化的所有元素。 (4)可定制的外观。Qt/Embedded图形用户界面完全可定制且完全主题化 (themeable)。 (5)超强的资源利用效率:QVEmbedded可避免占用运行内存,能提供更快、 更高的性能。 (6)全模块化。为了减少占用内存,Qt/Embedded允许移除不需要的模块和系 统。 在这些当中最为显著的便是Qt/Embedded的跨平台特性,通过使用 Qt/Embedded,开发者可以感受到在Qt/X1 l、Qt/Windows和Qt]Mac等不同的版本 下使用相同的API编程带来的便利。 哈尔滨T程大学硕十学位论文 正是由于吣bedded具有上述的诸多优势,针对本文所设计的嵌入式系统的 实际隋况,决定采用Qc/Ehbedded作为系统的GL玎开发工具。 5.6.2Qt/Embedded的移植 1.重新设置相关环境变量 export TMAKEDIR=/by/QT/tmake-1.13 ‘ export][MAKEPATH=¥1MAKEDIR/lib/qws/linux-arm-g++ export PATH=¥TMAKEDIR/bin:/by/QT/qt-x1 1/bin:¥PATH export LD_LIBRARY_PATH=/by/QT/qt-xU/Iib:¥LD_LIBRARY_PATH 2.交叉编译Qt/Embedded库。当我们有了ARM9的Linux编译器之后,我们 就可以使用这个编译器交叉编译Qt/Embedded库的源代码,从而产生一个以ARM9 为目标代码的Qt/Embedded库。具体过程如下: (1)编译步骤: Star zxvfqt-embedded-2.3.7.tar.gz Smv qt-2.3.7 qte_arm export QTD承=¥PWD/qtearm export PAll士=¥QTDIR/bin:¥PATH export LD_LmRARY_PATH=¥QTDIR/Iib:¥LD LIBRARY_PATH cd qte_arm make clean cp。/qt-xll/lib/木lib/ cp.Jqtopia_arm/src/qt/qconfig-qpe.h·src/tools/ (echo yes;echo yes)IJcortfigure-plafform linux-generic-g-H--qconfig qpe--deaths 16, 24.32 make.Csrc 最终在qte arm/lib目录中生成我们要在丌发板上使用的经过交叉编译的Ⅱb库 文件。 (2)发布QT/Embedded库。编译完成后,我们需要将qte_arm/lib/H录下面的 libqte.SO libqte.so.2 libqte.SO.2.3 libqte.SO.2.3.1 O这四个文件及fonts文件夹发布到丌发 板上。我们首先在开发板的文件系统中新建一个文件夹(如:/usr/QT/lib),然后将 S3 哈尔滨I:程大号:硕十学1『寺:论文 qte_ann/lib厂下的libqte.SO*库文件及fonts文件央复制到恻Q]胁b目录下(注意复制 命令的参数cp-adrf)。这样即完成了QT/Embedded库的发布。 (3)Qtopia目标板E的移植。在编译Qtopia之前,要确认一下使用的交叉编 译工具链是否有e2fsprogs和jpeg的库,如没有的话,将e2fsprogs.1.35.tar.gz和 jpegsrc-v6b.tar.gz两个文件包交叉编译到交叉工具链中。所有的准备工作完成之后, 就可以开始编译QT的图形界面Qtopia了; 编译Qtopia: #tar zxvfqtopia-fiee-1.7.0.tar.gz mv qtopia-free-1.7.0 qtopia_arm export QPEDIR=¥PWD/qtopia_arm export PA邢隆_¥QTDIR/bin:¥QPEDIR/bin:¥PATH export LD_LIBRARY_PATH=¥QPEDNflib:¥LD_LIBRARY_PATH cd qtopiaarm/src linux—aml舻 #Jcordigure-xplatform make编译完成后,就会有下面的一些文件夹:apps,bin,ere,lib,pics,plug泌 等等。 发布Qtopia,把上面编译好的文件夹复制到开发板文件系统的/usr/QT文件夹里 面。 (4)在开发板上测试Qtopia。前面我们介绍过Qt/Embedded是直接写入帧缓 冲的,因此为了在开发板上运行Qtopia,要求在最初编译配置嵌入式Linux内核时 必须使其支持帧缓冲。运行之前确保开发板的文件系统I拘/usr/QT目录下有了我们发 布的内容。 我们写了一个自动运行的脚本,首先在丌发板上设置相应的环境变量,然后运 行qpe。如下: export QTDIR=/usr/QT export QPEDIR=/usr/QT export QWS_KEYBOARD=USB:/dev/Input/eventl export QWS_MOUSE_PROTO=USB:/dev/input/mouse0 #-export LD_LIBRARY_PATH=/usr/QT/lib:¥LD_LIBRARY_PATH ¥QPEDIR/bin/qpe>/dev/null 2>/dev/null 54 哈尔滨T程大学硕十学何论文 ·脚本运行完成后就可以在开发板的LCD d二看到移植的Qtopia图形用户界面了。 5.7本章小结 本章主要介绍了Linux系统下相关设备驱动程序的设计以及用户图形界面的 开发,其中相关驱动程序的设计包括LCD、触摸屏以及USB设备驱动程序的设计, 用户图形界面的开发是在对几种嵌入式用户图形界面开发工具进行比较后选择用 Qt/Embedde作为本次试验所选用的开发工具,进行用户图形界面的开发。 哈尔滨T程大学硕十学位论文 第6章应用实例 为了验证本课题所设计的PDA平台,本文设计了一个应用实例——地图信息 的显示功能,主要包括以下两种功能:在屏幕上显示一个地图(孙『G位图文件)以 及通过触摸屏可以对地图进行放大、缩小、左移、右移等操作。 本文的地图文件采用PNG格式的位图图像文件。PNG(Portable Network Graphics)是一种能存储32位信息的位图文件格式,PNG使用无损压缩方式来减少 文件的大小。在压缩位图数据时,它采用了颇受好评1277算法的一个变种。PNG图 像可以是灰阶的(16位)或彩色的(48位),也可以是8位的索引色。PNG图像使用的 是高速交替显示方案,显示速度很快,只需要下载1/64的图像信息就可以显示出低 分辨率的预览图像。Qt/Embedded支持PNG图像格式的显示和处理。 6.1地图文件的显示 1.打开地图文件 通过Qlmage::load0函数装入文件名为fileName的PNG位图文件,然后填充到 pixmap中。 2.显示地图文件 当显示界面发生修改需要重新显示或用户通过提示up'e0更新显示后,触发 paintEvent事件重新显示。Qt并不更新屏幕上的全部显示内容,只更新需要更新的 区域,需要重新显示的区域包含在event->region0.reets0数组中。在paintEvent程序 中,首先根据“视图”在“修改后映像”的起始位置(currentLetL currentTop)得到 与“视图”中需要重新显示区域对应的“修改后映像”中的区域,然后拷贝“修改 后映像”中需要重新显示区域的信息到“视图’’中的相应区域,就完成显示更新工 作。 3.地图文件的浏览 由于“视图”窗121显示“处理后映像”中(cutrentLeft,currentTop)开始的与“视 图”相同大小的一部分内容,通过修改(currentLefL,currentTop)的值就可以自由的 浏览“处理后映像”的内容。当然,必须做必要的边界处理,防止越界导致显示残 缺或没有显示内容。 lij≯獬爹≯冀 / ‘嚣《誉f=琏*§目 4 日 E 棼2良/;z:: P ’ ,。。一…**》。‘攥; £自∞ ‘g≈Ⅱ备麟*∞” 磊“荔赫# ;。冬≯“气 “”“ 一。w 《i+。叠崤≯唆……~ 暂 ∞8 +*暂 善Ⅺ”蘩槲 兰 ;嘞钔:。 ;”蛳“9 *;i:。!;*:詈薯 :8 8 。辽“ , V 皂 , 目Ⅱ蹲 6.2地图文件的缩放 位图文件良好的缩放可以更方便地浏览地图。本程序设计每次放大是在原缩放 映像的基础上放大1 25倍,每次缩小是在原缩放映像的基础上缩小0 8倍,因为一 个图像缩小0.8倍后放大l 25倍或放大1 25倍后缩小0.8倍图像又恢复到原来的大 小。 当然,在实际应用由于存在一定的计算误差和近似,多次缩放后与原图会有微 小差别。在缩放6n需要先保存原先的缩放比例scaleRadio以便以后处理。Qlmage 提供了优秀的平滑缩放函数QImage::smoothScale0可以保证图像缩放的质量,并且 每次缩放都是在“原始映像”上进行的,使得本程序虽然是对位图文件进行缩放但 也保持了相当好的显示质量。位图文件的缩放程申如下: scal划eRadio;∥保存原先的放大倍数 iiiiiiiiiiiiiiiiiii哈ii尔i滨ii工i程ii大i学i;硕士ii学i位ii论i文iiiiiiiiiiiiiiiiiiii double if(zoomln) scaleRadio*=O 8: //-缩d,0.8 if(zoomOut) scaleRadlo*=l 25;砌女大1.25 intvw-(iat)imagewidth0*scaleRadio;//{十算缩放后的图像宽度 inth=(int)image.晰ght0+scaleRadio;胜撒后的图像高度 pixraapconvertFromlmage(image smoothScalc(w,h)); ∥平滑缩放 毫三n{劳户一●*≈Ⅱ*R#镕#镕 一 i自 。∞ 。 ∑《 ~ 飞 £糯j≥ ; 光成畿』辅ia篓谁匦#獭。键’穗删镕.蹙苎魏 }№∞ 妒 E N% 托 雌娃 镕:% 图6.2缩放后的界面 6.3本章小结 本章给出了本次实验的应用举例,完成了地图的显示以及放大缩小等功能,由 于时间和水平的限制没能完成预期的与GPs相结合的应用实例。 哈尔滨:r程大学硕十学位论文 - ii——ii 结论 本文以系统科学理论为指导,运用系统工程的理论和方法,以计算机科学理论 为核心,将嵌入式系统、电子技术、软件工程、操作系统、计算机系统等理论有机 结合,在理论、方法和技术上对PDA软硬件平台进行了创新研究和设计。取得的 研究成果是: “基于ARM的PDA软硬件平台”的设计和实现,特点突出:. 1.建立了基于S3C2410的PDA硬件平台。该平台技术先进,结构合理,功能 较完备,整体性、可扩充性强,还可以作为其他嵌入式系统硬件开发的良好平台和 有益借鉴。 2.系统技术先进。PDA软件平台的设计以源程序开发的Linux为核心,保证 了软件平台的可靠性、安全性和自主性。基于硬件平台和嵌入式操作系统之间的 Bootloader采用面向硬件平台和面向Linux接口的两层软件设计思路技术先进、结 构合理。 ‘ 3.用户界面友好,操作简单。采用本地化的Qt/E嵌入式用户图形界面保证了 优秀的用户图形界面和良好的图形图像显示引擎。 4.本文开发的PDA软硬件平台进行较小的变动和二次开发,可应用于其他特 定功能的手持设备和其他嵌入式系统中,具有通用性和推广使用价值。 但同样还有许多问题有待下一步研究解决,主要有以下几个方面: 1.驱动程序的开发还不是很完备,应用实例还很简单。 2.在产品化的过程中还有很长的路要走。 59 m-——————哈— 尔滨— 下程— 大学— 硕十— 学位— 论文 'll -iI iiiiiiiiiiii 参考文献 【l】 高文,刘岩.为中文PDA定位.中文PDA产品的研究开发与标准化.中国计 算机用户,1998.4 【2】 谭勇.嵌入式系统在军用PDA中的设计与实现.http:llwww.efinchina.com, 20053 【3】 黄玉东,朱华杰.浅论嵌入式系统阴.沈阳电力高等专科学校学报,2003年第 5卷第4期 [4】 Abaxter.PDAs at War-Introducing the Commander's DigitaI Assistant (CDA).http://www.bargainpda.com/?newslD=2176,2004.8 【5] 黑新宏,崔杜武,吕林涛,张烨.基于嵌入式Linux的PDA设计与实现.西 安理工大学学报,2003.3 【6】 李林功,李华玲.嵌入式系统的构成与特点明.电测与仪表,2003(3) 【7】 赵雷,杨季文..PDA设备开发仿真系统设计与实现.计算机应用与软件,2004 【8】 [9】 【10] :【11] Samsung Electronics Co.,Ltd.¥3C2410A-200MHz&266MHz 32-Bit RISC Microprocessor User's Manual Revision 1.0.http://www.samstmg.com.2004.3 Klein Mark H,Thomas Ralya,Bill Pollak,Ray Harbour Obenza,Michael Gonzlez.A Practioner’S Handbook for Real-Time Ana/ysis:Guide to Rate Monotonic Analysis for Real-Time Systems.Norwell,Massachusetts:Kluwer Academic Publishers Group,1 993 David Seal.ARM Architecture Reference Manual.Pearson Education limited,200l ARM Limited.ARM Architecture Reference Manual IM]London.ARM Press, .【12] 2000:42.53P Alessandro Rubini,Jonathan Corbet.LINUX设备驱动程序(第二版).中国电 力出版社,2002 [13】 Richard M.Stallman,Roland McGrath.GNU Make A Program for Directing Recompilation describing make Version 3.74.1 996 [14】 李善平,陈文智等.边干边学—LINUX内核指导.杭州:浙江大学出版社, 2002 哈尔滨。I:释人学硕十学1_}7:论文 [15】 郑纬民,汤志忠.计算机系统结构(第二J皈).北京:清华大学出版社,1998 【1 6] Anand K Santhanam,Vishal Kulkami.Linux system development on 811 embedded device.http://www-900.ibm.tom 【17】 刘利国.¥3C2410下LCD驱动程序移植及GUI程序编 写.http'J/www.1aoliu-soft.tom 【1 8】徐广毅,张晓林等.嵌入式Linux系统中的GUI系统的研究与移植.单片机及 嵌入式系统应用.2004.8 [19】 范艳开.基于ARM的嵌入式Linux操作系统移植.西北工业大学,2005.3 [20】 秦蔚.ARM平台下Linux内核移植技术的分析研究与应用.昆明理工大学, 2004.6 [21】 王学龙.嵌入式Linux系统设计与应用.清华大学出版社,2001年8月 [22] 马忠梅等.ARM&Linux嵌入式系统教程.北京航空航天大学出版社,2004 年9月 [23】 李玉波等编著.Linux C编程.清华大学出版社,2005年3月 【24] 周立功等编著.ARM嵌入式系统基础教程.北京航空航天大学出版社,2005 年1月 [25】 周立功等编著.USB固件编程与驱动开发.北京航空航天大学出版社,2003 年2月 [261 陈铁军,仇洪冰.基于¥3C2410的嵌入式Linux的移植方法.桂林电子工业 学院学报.2006年26卷4期,起止页码:259.263页 [27】 张杰,曹卫华,吴敏,施卫强.基于¥3C2410的Linux移植微机发展.2005 年15卷6期,起止页码:142.144页 [28] 电子设计应用YAFFS文件系统在嵌入式Linux上的实现.2006年1期.,起 止页码:96.98页 [29】 王梅,董小国,田红波,田毅.Linux系统对多种文件系统支持的探讨.湖 南工程学院学报.自然科学版2003年13卷4期,起止页码:75.77页 [30】 任善全,吕强,钱培德,杨季文.一个基于Qt/Embedded的嵌入式Linux应 用程序的实现.计算机应用与软.2006年23卷2期,起止页码:105.107页 【31] 徐广毅,张晓林,崔迎炜,杨欣听,吴小伟.嵌入式Linux系统中GUI系统 的研究与移植.单片机与嵌入式系统应.用.2004年lO期.,起止页码:11.14,17 6l 哈尔滨T程大学硕士学何论文 页 [32】 田泽.嵌入式系统开发与应用.北京航空航天大学出版社,2005 [33】 孙天泽著.嵌入式设计及曲mx驱动开发指南—基于#J≈M9处理器.电子工 业出版社,2005年3月 f34]Arlessand∞Rubini,Jonathan Corbel著,魏永明等译.LINUX设备驱动程序.中 国电力出版社,2002 【35]‘Dreamtech软件开发组著,王勇,盖江南等译.嵌入式系统编程源代码解析.电 子工业出版社,2002 [303 毛德操,胡希明.Linux内核源代码情景分析.浙江大学出版社,2001. [371 陈莉君.深入分析Linux内核源代码.人民邮电出版社,2002 [38] 邹思铁.嵌入式Linux设计与应用.清华大学出版社.2002 [39】Tadiran Communications.Rugged PDA RPDA-88.http:t/www.tadiran-coneo.il. [40】 Barry Shilmover.Talla-Tech's Ruggedized R-PDA.http://www.pocketpcmag.com. 【41]嵌入式系统Boot Loader技术内幕.http://www-128.ibm.tom [42】 张义磊等.ARM芯片¥3C2410驱动TFT LCD的研究.液晶与显示.2005.2 }移】 杨涛,吕强,钱培德,杨季文.—个PDA数据链路层模块的设计与实现.计 算机工程与应用.2003.2 62 哈尔浜1.释大学硕十学位论文 Ill Illll ● 。攻读硕士学位期间发表的论文和取得的科研成果 [1】 张仁忠,李燕南.基于ARM和Linux j拘嵌入式系统平台的设计.信息技术, 已录用 [2】 李燕南.基于删的m~软硬件平台设计.应用科技,已投稿 63 哈尔滨二r:程大学硕十学何论文 致谢 本文是在导师张仁忠教授的悉15关怀和指导下完成的,在近三年的学习期间, 导师渊博的学识,严谨的治学作风和精益求精的治学态度给我留下了深刻的印象, 这三年的收获是一份宝贵的财富。在此,谨对导师多年的辛勤培养和关心致以最为 衷一tL,的感谢! 特别感谢所有曾经帮助过我的朋友们以及实验室的师兄弟、姐妹们给予我的真 诚帮助与友谊。—起走过的岁月,兄弟姐妹般的感隋,点点滴滴,永铭心头。 感谢我的父母和家人多年来对我的培养,他们殷切的期望是我完成学业的动力, 他们温暖的亲情是我挑战困难的勇气,他们幸福的笑容是我对生活的期盼。此文是 我献给他们的礼物,希望此文能给他们带来欣慰。 基于ARM的PDA软硬件平台设计 作者: 学位授予单位: 李燕南 哈尔滨工程大学 相似文献(0条) 本文链接:http://d.g.wanfangdata.com.cn/Thesis_Y1436527.aspx 下载时间:2010年5月25日
更多简介内容

评论

下载专区


TI 参考设计资源库

工业电子 汽车电子 个人电子
$(function(){ var appid = $(".select li a").data("channel"); $(".select li a").click(function(){ var appid = $(this).data("channel"); $('.select dt').html($(this).html()); $('#channel').val(appid); }) })