基于嵌入式系统的图形界面应用设计1.docx
《基于嵌入式系统的图形界面应用设计1.docx》由会员分享,可在线阅读,更多相关《基于嵌入式系统的图形界面应用设计1.docx(30页珍藏版)》请在冰豆网上搜索。
![基于嵌入式系统的图形界面应用设计1.docx](https://file1.bdocx.com/fileroot1/2023-1/2/93bb3136-6691-41c4-8bdb-6ab70ef24d0e/93bb3136-6691-41c4-8bdb-6ab70ef24d0e1.gif)
基于嵌入式系统的图形界面应用设计1
基于嵌入式系统的图形界面应用设计
1嵌入式系统概述
1.1嵌入式系统简介
嵌入式系统是一种以应用为目的,软硬件可裁减,适应应用系统对功能、成本、体积、功耗严格要求的专用计算机系统。
随着计算机的发展和应用的普及,嵌入式系统取得了迅猛的发展,嵌入式产品已经渗透到社会经济、军事、交通、通信等相关行业,而且深入到家电、娱乐等各个领域,掀起了一场数字化革命。
嵌入式图形用户界面系统是嵌入式系统的一个重要组成部分,它将极大的促进嵌入式技术的发展和应用。
嵌入式系统是当前最热门、最有发展前途的IT应用技术之一。
一方面,嵌入式系统广泛的应用于智能家电、手持终端、工业控制等专用设备上,通常这些设备的硬件资源(如处理器、存储器等)非常有限,并且对成本很敏感,有时对实时响应要求很高;另一方面,随着计算机技术的发展,越来越多的嵌入式系统设备需要良好的人机交互界面,这需要一个高性能、高可靠、占用系统资源少的用户图形界面的支持。
为了适应嵌入式设备对人机交互界面的要求,本论文对基于嵌入式Linux图形用户界面的设计实现进行了研究。
一方面,嵌入式硬件性能不断提升,使得嵌入式设备上运行精美的图形用户界面成为可能;另一方面,嵌入式手持式消费电子产品的普及,例如PDA(个人数字助理)、智能手机、PMP(便携式多媒体播放器),一个完善的嵌入式图形用户界面成为不可缺少的组成部分,嵌入式GUI(图形用户界面:
GraphicalUserInterface)为嵌入式系统提供了一种应用于特殊场合的人机交互接口。
纵观国际相关产业在图形用户界面方面的发展现状,许多国际知名公司早已认识到GUI在嵌入式产品方面产生的强大增值功能,以及带动的巨大市场价值,因此在公司内部成立了专门从事GUI研究与设计的部门。
图形用户界面(GUI)是一种结合计算机科学、美学、心理学、行为学,以及商业领域需求分析的人机系统工程。
这种面向用户的系统工程设计目的是优化产品性能,使操作更人性化,减轻使用者的认知负担,使其更适合用户的操作需要,直接提升产品的市场竞争力。
图形用户界面的广泛流行是当今计算机技术的重大成就之一,它极大的方便了非专业用户的使用,可以通过窗口、菜单方便的进行操作。
一个图形用户界面通常由三个基本层次组成,也就是显示模型、窗口模型和用户模型。
用户模型包含了显示和交互的主要特征,因此用户图形界面有时也仅指用户模型。
然而,对于嵌入式系统来说,由于其固有的体积、功耗以及价格的限制,使得传统的图形用户界面并不能直接应用于嵌入式系统[41,在嵌入式系统上实现GUI是一个具有挑战性的课题。
总的来说,嵌入式GUI要求简单、直观、可靠、占用资源小且反应速度快,以适应系统硬件资源有限的条件嘲。
另外,由于嵌入式系统硬件本身的特殊性,嵌入式GUI应具备高度可移植性与可裁减性,以适应不同的硬件条件和使用需求。
具体的嵌入式GUI一般具备如下特点:
1.体积小
2.运行时耗用系统资源小
3.上层接口与硬件无关,高度可移植
4.高可靠性
5.在某些应用场合应具备实时性
目前,嵌入式GUI的开发正处于起步阶段,有许多技术难题尚待解决,因此对嵌入式图形系统的研究成为嵌入式系统研究及发展中的一个重要内容。
可以预见,随着电子、计算机等行业的高速发展,嵌入式系统将以它专用化,效率高的特性深入实际应用的各个领域,因而开发与改进嵌入式图形用户界面有着长远的意义。
1.2嵌入式系统的组成
嵌入式系统一般可以分为四个部分:
嵌入式处理器、嵌入式外围设备、嵌入式操作系统和嵌入式应用软件,如图1-1所示。
图1-1嵌入式系统的组成
1.3本课题的背景和意义
嵌入式导航计算机是飞机,车辆,导弹和船舶等运载体上的重要设备,
主要任务是按照原定的计划和任务,以要求的精度,在一定时间内将载体引
导至目的地。
嵌入式导航计算机主要分为两部分:
硬件电路,嵌入式操作系
统。
本课题的目的就是针对其硬件环境,搭建起一个高效、稳定的嵌入式操
作系统的平台。
它具有通用操作系统的基本特点,能够有效管理复杂的系统
资源;能够快速的处理大量的信息;能够提供库函数、驱动程序、工具集以
及部分应用程序。
在这个系统平台上可以运行导航程序,接受传感器的数据
经处理后得到任务所需要的信息,从而实施导航任务。
嵌入式Linux有着嵌入式导航计算机操作系统需要的很多特色:
支持多
任务处理、中断处理及任务间通信,性能稳定,剪裁性好,开发与使用都很
方便。
因此,本设计选用嵌入式Linux作为嵌入式导航计算机的操作系统,
这对于实现导航计算机的高效率、低功耗具有现实意义。
图1-2嵌入式导航计算机硬件平台结构图
1.4本课题的主要工作和研究内容
本课题的最重目标是为嵌入式导航计算机移植Linux操作系统。
通过参
阅大量文献,学习嵌入式Linux系统和ARM体系微处理芯片S3C2410的相
关知识,研究启动下载程序Bootloader和Linux内核的基本工作原理,并且
搭建交叉编译平台,重点是移植Bootloader和内核,以及制作根文件系统。
具体工作内容包括:
(1)学习Linux操作系统的知识。
(2)了解ARM的体系结构和S3C2410芯片硬件结构。
(3)完成交叉编译环境的建立。
(4)修改并移植U-boot1.2.0。
(5)修改和裁剪Linux2.6.24.4内核,移植网卡驱动程序。
(6)制作根文件系统。
(7)编写应用程序进行测试。
(8)将内核和根文件系统部署到开发板。
2硬件平台及ARM体系结构
2.1处理器选择
本设计的处理器选择高性能、低功耗的ARM9微处理器SamsungS3c2410。
S3c2410是著名半导体公司Samsung推出的一款32位RISC处理器。
S3c2410的内核基于ARM920T,带有MMU功能,主频高达203MHz,可以支持Linux、WinCE等主流嵌入式操作系统。
同时它还采用了一种叫做AdvancedMicrocontrollerBusArchitecture(AMBA)的新型总线结构。
此外S3c2410还集成了以下片上功能:
(1)16KB指令Cache和16KB的数据Cache;
(2)LCD控制器(支持STN和TFT);
(3)4通道DMA;
(4)3通道UART;
(5)2通道USB;
(6)4路PWM和1个内部时钟控制器;
(7)117个通用IO,24路外部中断;
(8)16位看门狗定时器;
(9)RTC(实时时钟);
(10)1通道IIC/IIS控制器;
(11)NANDFlash控制器;
(12)PLL数字锁相环。
S3c2410将系统的存储空间分为8组(bank),每组大小是128MB,共1GB。
Bank0到Bank6都采用固定Bank起始寻址,用于ROM或SRAM。
Bank7具有可编程的Bank的起始地址和大小,用于ROM、RAM或SDRAM。
S3c2410还支持从NANDFlash启动,NANDFlash具有容量大、比NORFlash价格低等特点。
系统采用NANDFlash与SDRAM相结合的方式,可以获得非常高的性价比。
2.2ARM体系结构
ARM微处理器基本架构:
ARM9微处理器采用RISC体系结构:
优先选取使用频最高的简单指令,避免复杂指令
RISC体系结构应具有如下特点:
1.采用固定长度的指令格式,指令归整、简单、基本寻址方式有2~3种。
2.使用单周期指令,便于流水线操作执行。
3.大量使用寄存器,数据处理指令只对寄存器进行操作,只有加载/存储指令可以访问存储器,以提高指令的执行效率。
4.除此以外,ARM体系结构还采用了一些特别的技术,在保证高性能的前提下尽量缩小芯片的面积,并降低功耗:
5.所有的指令都可根据前面的执行结果决定是否被执行,从而提高指令的执行效率。
6.可用加载/存储指令批量传输数据,以提高数据的传输效率。
7.可在一条数据处理指令中同时完成逻辑处理和移位处理。
8.在循环处理中使用地址的自动增减来提高运行效率。
ARM微处理器的寄存器结构:
1.ARM处理器共有37个寄存器,被分为若干个组(BANK),这些寄存器包括:
2.31个通用寄存器,包括程序计数器(PC指针),均为32位的寄存器。
3.6个状态寄存器,用以标识CPU的工作状态及程序的运行状态,均为32位,目前只使用了其中的一部分。
4.同时,ARM处理器又有7种不同的处理器模式,在每一种处理器模式下均有一组相应的寄存器与之对应。
即在任意一种处理器模式下,可访问的寄存器包括15个通用寄存器(R0~R14)、一至二个状态寄存器和程序计数器。
在所有的寄存器中,有些是在7种处理器模式下共用的同一个物理寄存器,而有些寄存器则是在不同的处理器模式下有不同的物理寄存器。
ARM微处理器的指令结构:
ARM微处理器的在较新的体系结构中支持两种指令集:
ARM指令集和Thumb指令集。
其中,ARM指令为32位的长度,Thumb指令为16位长度。
Thumb指令集为ARM指令集的功能子集,但与等价的ARM代码相比较,可节省30%~40%以上的存储空间,同时具备32位代码的所有优点。
ARM9系列微处理器具有以下特点:
1.5级整数流水线,指令执行效率更高。
2.提供1.1MIPS/MHz的哈佛结构。
3.支持32位ARM指令集和16位Thumb指令集。
4.支持32位的高速AMBA总线接口。
5.全性能的MMU,支持WindowsCE、Linux、PalmOS等多种主流嵌入式操作系统。
6.MPU支持实时操作系统。
7.支持数据Cache和指令Cache,具有更高的指令和数据处理能力。
大小都为16K。
8.ARM9系列微处理器主要应用于无线设备、仪器仪表、安全系统、机顶盒、高端打印机、数字照相机和数字摄像机等。
9.ARM9系列微处理器包含ARM920T、ARM922T和ARM940T三种类型,以适用于不同的应用场合。
3软件平台
3.1嵌入式操作系统选择
本设计的嵌入式操作系统选择嵌入式Linux操作系统。
嵌入式操作系统是一种支持嵌入式系统应用的操作系统软件,它是嵌入式系统(包括硬、软件系统)极为重要的组成部分,通常包括与硬件相关的底层驱动软件、系统内核、设备驱动接口、通信协议、图形界面、标准化浏览器等Browser。
一般情况下,嵌入式操作系统可以分为两类,一类是面向控制、通信等领域的实时操作系统,如WindRiver公司的VxWorks、ISI的pSOS、QNX系统软件公司的QNX、ATI的Nucleus等;另一类是面向消费电子产品的非实时操作系统,这类产品包括个人数字助理(PDA)、移动电话、机顶盒等。
嵌入式Linux操作系统
Linux的嵌入式改造主要围绕体积和实时性展开,目前已经有很多公司在进行这方面的工作,其中包括RT-Linux,uClinux,Embedix,Xlinux,MidoriLinux和红旗嵌入式Linux等等。
与目前市场上的众多商业的实时系统相比,嵌入式Linux除具有内核稳定,功能强大,支持多种硬件平台,兼容性好的优势外,还拥有以下的特点:
(1)完全开放源代码
嵌入式Linux完全开放其源代码,这使得修改,裁剪Linux成为可能,开发者可以根据实际需要优化操作系统代码,降低整个系统的开销与能耗。
(2)成本低
GPL协议保证了源自Linux的嵌入式Linux也是开放源代码的自由软件。
而大多数嵌入式Linux使用的开发工具也是遵守GPL协议的,同样也可以免费获得。
(3)丰富的实用软件支持
Linux提供了大量的实用程序和各种应用软件。
这些软件的正确性和有效性都经过了实际检验,可以根据需要合理利用他们迅速构建嵌入式应用的软件环境。
这样可以极大地减小嵌入式软件开发的时间和费用,提高系统可靠性。
而商用的实时操作系统也试图提供各种常用软件工具包,但其数量是无法和Linux操作系统匹敌的。
由此可见,选择嵌入式Linux操作系统,就有了丰富的资源保障,在节省成本的同时,提高了开发效率。
3.2交叉编译环境的建立
采用交叉开发环境(CrossDevelopmentEnvironment)是嵌入式应用软
件开发时的一个显著特点,通常在通用计算机上编写程序,然后通过交叉编
译生成目标平台上可运行的二进制代码格式,最后再下载到目标平台上的特
定位置运行,交叉开发环境是指编译、链接和调试嵌入式应用软件的环境,
它与运行嵌入式应用软件的环境有所不同,通常采用主机/目标及模式。
交叉开发模型如图2-1所示:
图3-1交叉开发模型
3.2.1上位机的软硬件配置
硬件:
本课题用到一台通用PC机和一台笔记本电脑,其硬件配置如下:
PC机:
CPU:
PIV2.0G
RAM:
256MB
串口:
RS-232
并口:
25针母头
笔记本电脑:
CPU:
PM705
RAM:
768MB
网卡:
10/100MBps自适应网卡
软件:
PC机的操作系统为WindowsXP,装有DNW串口调试工具以及SJF2410三星Flash烧写工具。
前者用于串口调试,后者用于烧写Bootloader。
笔记本电脑的操作系统为Ubuntu7.10,装有GCC等编译工具以及arm-linux-gcc交叉编译工具,并开启TFTP和NFS服务。
用于Linux内核编
译和软件开发,并作为TFTP服务器和NFS主机。
其中,Ubuntu7.10是Linux的桌面发行版之一,是当今最为流行的桌面Linux系统。
使用Linux操作系统及其自带的工具,是目前最权威的嵌入式Linux系统开发方式,但是许多操作都是基于命令行的,所以需要扎实的Linux基础知识。
在Ubuntu中建立arm用户,专门用于ARM开发。
在home目录中建立下列几个子目录:
Boot:
用于存放bootloader相关程序。
Kernel:
用于存放Linux内核源码。
FS:
用于存放根文件系统相关的程序。
Program:
用于存放用户程序。
3.2.2硬件连接与调试
硬件连接方式:
图3-2硬件连接图
(1)开发板串口UART0通过交叉串口线与PC主机的COM1口相连。
(2)开发板的JTAG口通过20PIN排线与SUPERJTAG调试头相连,再通过25PIN并口线连接到主机的LPT1口。
(3)开发板的网卡接口通过以太网线连接到路由器的LAN1口。
(4)笔记本的网卡接口通过以太网线连接到路由器的LAN2口。
(5)路由器的WAN口连接到INTERNET。
串口调试:
在本课题嵌入式系统中的目标开发板,采用串口调试的方法,即把串口当作目标开发板的显示终端,无论是打印输出,还是管理配置输入,都使用串口,这就需要主机系统装有串口调试工具。
PC机中安装有DNW串口调试工具,在使用DNW之前,应当对PC机的串口进行设置。
方法如下:
(1)XP系统中,右键单击“我的电脑”,选择“属性”。
(2)选择“硬件”——“设备管理器。
(3)选择“端口”——“串口(COM1)”,打开的对话框按图2-3设置。
图3-3串口属性设置
运行DNW工具,选择菜单“Configuration”——“Options”,按图2-4所示进行设置。
图3-4DNW设置
每次使用DNW之前,应当设置DNW连接到串口。
点击菜单中的“SerialPort”——“Connect”,当DNW的标题栏出现[COM1,115200bps]的提示后,表明已经连接好,此时才可以使用DNW工具。
3.2.3配置TFTP及NFS服务
TFTP服务简介:
TFTP(TrivialFileTransferProtocol)协议即简单文件传输协议,是TCP/IP协议族中的一个用来在客户机与服务器之间进行简单文件传输的协议,提供不复杂、开销不大的文件传输服务。
TFTP承载在UDP上,提供不可靠的数据流传输服务,不提供存取授权与认证机制,使用超时重传方式来保证数据的到达。
TFTP服务在Linux系统中有客户端和服务器两个软件包。
配置TFTP服务,必须都安装好。
TFTP服务安装与配置:
(1)Ubuntu中安装tftp工具只需在终端中键入命令:
$sudoapt-getinstalltftptftpd
其中,前者是客户端,后者是服务器。
(2)Ubuntu是debian类的系统,默认是没有安装inetd的,安装命令如下:
$sudoapt-getinstallnetkit-inetd
(3)在home目录里建立tftpboot文件夹,命令如下:
$cd~
$sudomkdirtftpboot
$sudochmod777tftpboot
其中,参数777的意义是:
根管理员、组和其他用户对tftpboot文件夹
的权限均为“可读、可写、可以执行”
(4)修改/etc/inetd.conf,添加如下语句:
tftpdgramudpwaitnobody/usr/sbin/tcpd/usr/sbin/in.tftpd/home/arm/tftpboot
目的是指定tftp服务的根目录为/home/arm/tftpboot,修改/etc/inetd.conf
文件后应当重启inted进程,命令如下:
$sudo/etc/init.d/inetdreload
(5)重启inted进程后,配置即可生效,在tftpboot中建立文件test后,用
下列命令可以进行测试:
$cd~
$tftp127.0.0.1
Tftp>gettest
若可下载test文件,则证明TFTP服务配置正确。
NFS服务简介:
NFS就是NetworkFileSystem的缩写,最早之前是由Sun这家公司所开发的。
最大的功能就是可以透过网络,让不同的机器、不同的操作系统、可以彼此分享个别的档案(sharefiles)。
所以,可以简单的将它看做是一个文件服务器(fileserver)。
通过NFS服务器可以让开发板将网络远端的NFS主机分享的目录,挂载到开发板当中,在开发板看起来,那个远端主机的目录就好像是自己的根目录一样,可以方便的进行开发调试。
NFS服务安装与配置:
(1)Ubuntu上默认是没有安装NFS服务器的,首先要安装NFS服务程序:
$sudoapt-getinstallnfs-kernel-server
在安装nfs-kernel-server时,apt会自动安装nfs-common和portmap。
这样,宿主机就相当于NFSServer。
(2)配置/etc/exports:
NFS挂载目录及权限由/etc/exports文件定义。
本课题要将home目录中
的/home/zp/share目录让192.168.0.*的IP共享,则在该文件末尾添加下列语句:
/home/arm/FS/myrootfs192.168.0.2/10(rw,sync,no_root_squash)
配置参数说明:
rw:
具有可擦写的权限。
sync:
文件同步写入到内存和硬盘当中。
no_root_squash:
若登陆共享目录的使用者是root的话,则他的权限将被限
制为匿名使用者,通常他的UID和GID都会变为nobody。
(3)本地测试NFS:
输入以下命令可以将NFS根目录挂载到本地的/mnt目录中:
$sudomount192.168.0.2:
/home/arm/FS/myroot/mnt
此时/mnt中的内容应当与NFS根目录中的内容一致。
3.2.4安装交叉编译工具
交叉编译简介:
所谓交叉编译,简单的说,就是在一个平台上生成另一个平台上的可执行代码,比如在PC平台上(X86CPU)编译出能运行在以ARM为内核的CPU平台上的程序,一般选择GNU开发工具gcc。
GNU的开发工具都是免费的,遵循GPL协议,任何人可以从网上获取。
GNU提供的编译工具包括汇编器as、c编译器gcc、c++编译器g++、连接器ld和二进制转换工具objcopy。
出于兼容性和稳定性考虑,本课题选择目前比较稳定的版本Cross-3.3.2和Cross-3.4.1。
交叉编译器的安装及配置:
(1)获取arm-linux交叉编译工具:
登陆arm-linux项目组的FTP服务器:
ftp.arm.linux.org.uk/pub/armlinux/toolchain/
下载cross-3.3.2.tar.bz2和cross-3.4.1.tar.bz2。
(2)通过下列命令可以安装arm-linux交叉编译工具:
$cpcross-3.4.1.tar.bz2/
$cd/
$tarjxvfcross-3.4.1.tar.bz2
这样,交叉编译工具就被安装到了/usr/local/arm/3.4.1中。
用同样的方法
可以安装cross-3.3.2版的交叉编译工具。
(3)设置环境变量:
修改home目录下的profile文件,加入如下代码,指明交叉编译工具的
目录。
#Userspecificenvironmentandstartupprograms
exportTARGET=arm-linux
exportPRJROOT=/home/arm
export
PATH=$PATH:
$HOME/bin:
$PREFIX/bin:
/usr/local/arm/3.4.1/bin:
/sbin:
/usr/
sbin:
/usr/local/sbin
测试交叉编译器:
可以通过一个简单的程序测试安装好的交叉编译工具,看其能否正常工作。
编写一个hello.c源文件,通过以下命令进行编译,编译后生成名为Hello的可执行文件,通过file命令可以查看文件的类型。
当显示以下信息是表明交叉编译工具正常安装了,通过编译生成了ARM体系可执行的文件。
注意,通过该交叉编译器编译的可执行文件只能在ARM体系下执行,不能在基于X86的普通PC上执行。
$arm-linux-gcc–oHellohello.c
$fileHello
Hello:
ELF32-bitLSBexecutable,ARM,version1(ARM),forGNU/Linux
2.4.3,dynamicallylinked(usessharedlibs),notstripped
4移植Bootloader
4.1Bootloader概述
简单地说,Bootloader就是在操作系统内核运行之前运行的一段小程序。
通过这段小程序,我们可以初始化硬件设备