1 / 24

主流嵌入式 Linux 下 GUI 解决方案

主流嵌入式 Linux 下 GUI 解决方案. 基本概念介绍 GUI (graphical user interfaces) 图形用户界面  (GUI), 图形用户接口 . 为用户提供界面友好的所见所得的操作环境 .  主流解决方案 Qt/Embedded 图形库大而全,能够开发较为复杂的图形系统 Microwindows 项目规模较小、功能较为薄弱,缺乏等三方软件开发的支持 MiniGUI 小巧、灵活 , 源码相对较少. 基本概念. Qt

Download Presentation

主流嵌入式 Linux 下 GUI 解决方案

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 主流嵌入式Linux下GUI解决方案 • 基本概念介绍 • GUI (graphical user interfaces) 图形用户界面 (GUI),图形用户接口. 为用户提供界面友好的所见所得的操作环境.  • 主流解决方案 • Qt/Embedded 图形库大而全,能够开发较为复杂的图形系统 • Microwindows 项目规模较小、功能较为薄弱,缺乏等三方软件开发的支持 • MiniGUI小巧、灵活,源码相对较少

  2. 基本概念 • Qt • Qt是Trolltech公司所开发的一个跨平台FrameWork环境 (一个运行的平台,有一堆常用的“库”) • 多平台的C++图形用户界面应用程序框架 • 支持组件编程 (把系统分割成一些组件或设施的一种思想 ,修改项目代码的一些部分不会破坏整个系统) • Trolltech • 跨平台应用程序界面框架 (QT) • 嵌入式Linux开发的应用程序平台,能够应用到PDA和各种移动设备(Qtopia) • Qt/E • Qt库开发商Trolltech公司开发的面向嵌入式系统的Qt版本 • 采用C++封装 • 丰富的控件资源 • 较好的可移植性

  3. Qt/Embedded • Qt/E实现结构 • Qt/Embedded的底层图形引擎基于framebuffer • 计算机显示存储器的一部分,存放屏幕图像的内容。 • framebuffer是一种驱动程序接口 • 将显示设备抽象为帧缓冲区 • 显示内存的一个映像(用户) • QWSserver • 负责事件的服务分发

  4. Qt/Embedded • QPE(Qt Plamtop Environment) • 针对PDA软件的整体解决方案 • 底层的GUI系统、Window Manager、Soft Keyboard • 上层的PIM(个人信息管理器)、浏览器、多媒体 • Qtopia是基于QT/Embedded开发的一个嵌入式的窗口系统和应用程序集 • Qtopia平台组成 • Qtopia 库(Qt/E,libqpe,libqtopia1,qtopiapim) • Qtopia server/laucher • 控制窗口系统 • 进程间通信 • 发起所有应用和其他核心任务的主要服务程序

  5. Application Qt/Embedded Qtopia Arm linux kernel 2.4.18 Driver fb cramfs vivi Hardware Board 系统平台介绍 • 系统平台软件结构图 • 引导装载程序vivi • 设备驱动(包括帧缓存fb) • 嵌入式Linux内核 • 文件系统yaffs(只读cramfs,需做修改) • 基于QT/Embedded和Qtopia的用户图形界面以及应用程序

  6. Qt/E 、Qtopia • 构建GUI时用于 Qt开发的典型工具 • tmake:跨平台的Makefile生成器 • moc:用于Qt C++扩展的metra-object编译器 • designer:用于设计窗口组建的应用程序,(*.ui文件) • uic:从界面文件生成代码的用户界面编译器(*.cpp&*.h) • qvfb(virtual frame buffer):X窗口用来运行和测试Qtopia应用程序的系统程序。即Qt的虚拟仿真窗口 。 • qpe(Qtopia executable):用来处理所有的用户程序界面 • 所需要的包 • tmake tmake-1.13.tar.gz:用来得到tmake工具 • /bin: progen工具:生成.pro文件 • tmake工具:组织生成Makefile

  7. Qt/E 、Qtopia • 所需要的包 • qt-embedded-2.3.10.tar.gz:Qt的嵌入式版本。 • /bin:模拟目标机器的qvfb后台程序,如moc 、qvfb 、uic • /lib:qvfb上PC机模拟运行时需要加载的库文件 libqte.so* • qt-x11-2.3.2.tar.gz:Qt的X11版本 • /bin :在PC机器上的运行的开发工具和编译程序,如desinger 、findtr 、moc 、uic等 • /lib:源文件编译成PC机器X11环境下的共享联接库 libqt.so* • qtopia-free-2.1.1.tar.gz:官方网站提供的Qtopia免费版。 • Qtopia是一个用Qt/Embedded开发的程序 :综合的应用程序平台和用户界面 • e2fsprogs-1.38.tar.gz:为了得到qtopia所需的uuid.h和libuuid.so。

  8. Qt/E 、Qtopia • 建立本机Qtopia 虚拟平台 • 设定tmake的环境变量 • export TMAKEPATH=/root/qtopia/tmake-1.13/lib/qws/linux-x86-g++ • 指定tmake在生成Makefile时使用本机的编译器 • 注:环境变量的设置非常重要(指定路径、库、头文件) • 编译qt-x11 • 目的:生成moc、uic、qvfb、designer • 复制到qt-embedded\bin目录 • export QTDIR=$PWDexport PATH=$QTDIR/bin:$PATH(指定命令搜索路径 )export LD_LIBRARY_PATH=$QTDIR/lib:$LD_LIBRARY_PATH(共享库路径) • 配置qt-embedded编译选项 • ./configure -system-jpeg -gif -no-xft -qconfig qpe -qvfb -depths 4,8,16,32 • 使Qtopia平台支持jpeg、gif格式的图形 • 指定Qt 嵌入式开发包(qconfig-local.h )生成虚拟缓冲帧工具qvfb,并支持4,8,16,32 位的显示颜色深度

  9. Qt/E 、Qtopia • 建立本机Qtopia 虚拟平台 • 使用make命令编译qt-embedded,用来生成Qt库(libqte.so) • 编译 e2fsprogs • 库文件libuuid.so提供uuid支持 • 唯一字符串生成库 • 编译libjpeg、libpng • 得到jpeg/png图形编码解码程序库libjpeg.so/ libpng .so • qtoppia需要Qt/Embedded配置为支持jpeg、gif • 配置并交叉编译Qtopia • 生成应用程序以及桌面环境

  10. Qt/E 、Qtopia • qtopia目录结构 • apps/Applications:应用程序桌面配置文件apps/Games:游戏桌面配置文件apps/Settings:系统设置桌面配置文件bin:二进制可执行文件configs:编译配置文件目录doc和docs:qtopia的参考文档etc:应用配置文件目录include/qpe:与qtopia相关的头文件目录inputmethods:输入法library:qtopia部分源代码目录pics:与应用相关的图片存放目录plugins:各种插件目录,如mpeg3解码插件、输入法插件等sounds:音频文件存放目录taskbar:桌面程序的源代码(qpe的源代码)

  11. Qt/E 、Qtopia • 测试Qt/E桌面环境 • 有源文件progressbar.cpp • 指定环境变量TMAKEPATH=…/qws/linux-x86-g++ • 使QTDIR指向Qt/Embedded的安装路径以及库 • progen –t app.t –o progressbar.pro(生成工程文件.pro) • tmake -o Makefile hello.pro(生成Makefile文件) • 使用LINUX系统自带的make进行整个程式的编译联接 • 生成二进制的可执行文件progressbar • 运行qvfb来模拟Virtual framebuffer(指定模拟器长、宽)

  12. Qt/E 、Qtopia • 建立本机Qtopia 虚拟平台 • 测试Qt/E桌面环境 • qvfb -width 640 -height 480 & • 在qvfb上加载二进制文件,运行程式.如:./progressbar -qws • 建立本机Qtopia 虚拟平台 • 在Virtual framebuffer 中实现Qtopia • cd /root/qtopia/qtopia-2.1.1-host/binqvfb &sleep 10./qpe.sh  • qvfb:运行Qt 的虚拟缓冲帧工具 • 把显示结果输出到虚拟缓冲帧,出现桌面环境

  13. Qt/E 、Qtopia • qte/qtopia在2410s上的移植 • 软件环境 • PC 机操作系统REDHAT LINUX 9.0 • MINICOM • ARM-LINUX 开发环境 • 配置NFS(网络文件系统) • 使计算机系统通过网络访问其它计算机系统的目录和文件 • 远程访问控制 • 修改etc/export指定文件夹共享可访问 • /root/share 192.168.0.* (rw,sync,no_root_squash) • 配置minicom • 友好易用的串口通信程序 • /etc/minirc.dfl中编辑系统范围的缺省值 • 建立arm-linux-gcc交叉编译环境 • 在某个主机平台上(比如PC上)用交叉编译器编译出可在其他平台上(比如ARM上)运行的代码的过程 • 生成的编译工具在目录/usr/local/arm/2.95.3/bin • 环境:与PC机不同的库函数和编译器 • Host-〉交叉编译工具链 -〉源代码-〉二进制文件-〉目标板可执行

  14. Qt/E 、Qtopia • qte/qtopia在2410s上的移植 • 交叉编译e2fsprogs • ./configure --enable-elf-shlibs 支持elf共享库(linux标准可执行程序格式 ) • --host=arm-linux 指定目标机类型 • --with-cc=/usr/local/arm/2.95.3/bin/arm-linux-gcc 指定编译器 • --with-linker=/usr/local/arm/2.95.3/bin/arm-linux-ld 指定连接 • --prefix=/usr/local/arm/2.95.3/arm-linux 指定安装路径 • 交叉编译jpeg、libpng • 需要修改Makefile文件 • 交叉编译zlib • 一个压缩解压程序库 • 提供库libz.so* • 交叉编译tslib • 是一个触摸屏的库,它提供诸如滤波、去抖、校准之类的功能,为不同的触摸屏提供了一个统一的接口 • 提供触摸屏共享库libts.so等 • 修改qte-2.3.10交叉编译环境参数文件使其增加对触摸屏的支持

  15. Qt/E 、Qtopia • qte/qtopia在2410s上的移植 • 设定tmake的环境变量 • export TMAKEPATH=/root/qtopia/tmake-1.13/lib/qws/linux-arm-g++ • 指定交叉编译器 • 交叉编译Qt/Embedded • ./configure -xplatform linux-arm-g++ -qconfig qpe -qvfb -thread -system-jpeg –tslib -system-zlib -system-libpng -gif -depths 4,8,16,32 • -xplatform linux-arm-g++,表示需要交叉编译,编译的目标平台是linux-arm-g++。具体可查看XPLATFORM文件。 • -qconfig qpe,表示这次编译是为了支持QPE(Qtopia),只会生成QPE所需要的库。 • -qvfb,qvfb支持。如果是在开发板上运行,则不需要qvfb。 • -thread,是否支持多线程。选择后会生成libqte-mt.so库(挺大的)。 • 生成库文件libqte.so.2.3.10* • File命令检查库文件:file libqte.so.2.3.10libqte.so.2.3.10: ELF 32-bit LSB shared object, ARM, version 1 (ARM),not stripped • 交叉编译qtopia

  16. Qt/E 、Qtopia • qte/qtopia在2410s上的移植 • 建立宿主机和开发板的通讯 • 执行 minicom • 重启nfs /etc/rc.d/init.d/nfs start • mount –t nfs –o nolock 192.168.0.155:/root/share /mnt/nfs • 所需库文件copy到目标板的/usr/lib目录 • 所需其他文件copy到指定目录 • qte/qtopia在2410s上的移植 • 使用tslib • 修改目标机/etc/profile文件 • export TSLIB_TSEVENTTYPE=H3600 对tslib中的设备结构体定义 • 基于src/ts_read_raw.c文件:查看触摸屏驱动程序数据结构,保证一致 • typedef struct {  unsigned short pressure;  unsigned short x;  unsigned short y;  unsigned short pad;} TS_RET; 驱动程序提供给上层应用程序使用的信息,用来存储触摸屏的返回值

  17. 项目进度 • 触摸屏坐标确定 • 触摸屏本身有自己的指标分辨率, 比如2048*2048(即它 的坐标系),它和我们LCD显示屏的坐标系(比如大点的1024*768)是两个概念。 • 通过ADS控制器的SPI/I2C总线读取到的触摸屏的坐标信 息,是触摸屏(贴在LCD上面很像包装纸的一层薄膜)以它 本身坐标原点O(物理的固定的,4个边角的某一个)为参 考的坐标对(X,Y) • 原理是两个电压值(Nx,Ny),根据触摸屏X,Y方向的参 考电压,做个线性比较,得到其坐标值(X,Y)

  18. 项目进度 • 触摸屏坐标确定 • 实际使用过程中, 唯一的参考定位是LCD屏的坐标系(x,y), tslib就是把两个2维线性坐标系通过几个样值的比较,对应转换, 即(X,Y)--->(x,y) • (1)计算程序,调用LCD显示驱动程序,在LCD上打印几个光标,选择方便计算的,比如( x1,y1),(x2,y2)... (2) 触摸屏驱动程序应该还没有设计完成, 这里只需要做到其触摸屏控制器初始化函数、坐标数据读取函数和相应的点击中断程序工作就可以了。分别点击这些点,程序中读出这些点对应的触摸屏坐标值(X1,Y1),(X2,Y2)... (3) 这时候,就可以得到了两个坐标系的对应关系,具体就是代入程序中读到的采样值求解下面对应方程的6个系数(a,b,c,d,e,f):{   x=aX+bY+c, y=eX+fY+g   }

  19. 项目进度 • tslib校正原理 • 触摸动作模拟鼠标动作 • 传统的鼠标:相对定位系统,只和前一次鼠标的位置坐标有关 • 触摸屏:绝对坐标系统 • 绝对坐标系统的特点:每一次定位坐标与上一次定位坐标没有关系,每次触摸的数据通过校准转为屏幕上的坐标,不管在什么情况下,触摸屏这套坐标在同一点的输出数据是稳定的。不过由于技术原理的原因,并不能保证同一点触摸每一次采样数据相同,不能保证绝对坐标定位,点不准,这就是触摸屏最怕出现的问题:漂移。对于性能质量好的触摸屏来说,漂移的情况出现并不是很严重。所以很多应用触摸屏的系统启动后,进入应用程序前,先要执行校准程序。

  20. 项目进度 • tslib校正原理 • LCD坐标和触摸屏的物理坐标的比较 • 从触摸屏中读出的是点的物理坐标,其坐标轴的方向、XY值的比例因子、偏移量、缩放因子都与LCD坐标不同

  21. 项目进度 • tslib校正原理 • 使触摸屏坐标和LCD坐标一一对应,且以插件形式提供附加功能如滤波、防抖。 • tslib的API接口 • tsdev表示触摸屏设备 • fd:打开触摸屏设备的文件描述符 • list:指针,依次存放指向tslib插件的指针

  22. 项目进度 • tslib校正原理 • tslib的API接口 • ts_sample存放按键消息 • x,y:按键的坐标位置(以LCD坐标系为基准) • pressure:按键的轻重程度 • tv:按键发生的时间

  23. 项目进度 • tslib校正原理 • tslib的函数 • ts_open() 打开触摸屏设备 • ts_config() 读取触摸屏配置文件并决定加载模块 variance:限定点击力度方差 dejitter:去除点击抖动 linear: 将触摸屏上的坐标转换成LCD的坐标 • ts_close() 释放触摸屏设备及相关资源 • ts_fd() 返回打开的触摸屏设备的文件描述符 • ts_read() 从触摸屏设备读取采样点坐标 • 开发板上运行Calibrate程序,触摸屏上任何一点的坐标就可以在主机LCD屏上回显出来。于是,就采集到了4个角的物理坐标 • 假设是6.4英寸屏,640X480分辨率,则它们的像素坐标分别是(20,20)、(20,460)、(620,460)和(620,20)。这样,使用待定系数法就可以算出坐标系之间的平移关系。比如: • Vx = xFactor*Px + xOffset • Vy = yFactor*Py + yOffset

  24. Qt/E 、Qtopia • qte/qtopia在2410s上的移植 • 使用tslib • export TSLIB_CONSOLEDEVICE=none tslib运行需要的控制台,这里就是LCD屏幕,设定控制台设备为none,否则默认为/dev/tty, • export TSLIB_FBDEVICE=/dev/fb0 指定帧缓冲设备 • export TSLIB_TSDEVICE=/dev/touchscreen/0raw 指定触摸屏设备节点文件 • export TSLIB_CALIBFILE=/etc/pointercal 指定触摸屏校准文件pintercal的存放位置 • export TSLIB_CONFFILE=/etc/ts.conf 指定TSLIB配置文件的位置 • export TSLIB_PLUGINDIR=$QTDIR/lib/ts 指定触摸屏插件所在路径 • 校准屏幕(5点校准) • ./ts_calibrate • 用户点击从ts驱动获得数据 • 屏上坐标位置 • 运行PDA • ./qpe

More Related