主流嵌入式Linux下GUI解决方案 基本概念介绍 GUI (graphical user interfaces)

Slides:



Advertisements
Similar presentations
LSF系统介绍 张焕杰 中国科学技术大学网络信息中心
Advertisements

第三章 数据类型和数据操作 对海量数据进行有效的处理、存储和管理 3.1 数据类型 数据源 数据量 数据结构
实用操作系统概念 张惠娟 副教授 1.
UI(用户界面)集训班 Illustrator 高级班.
基于解释性语言的手机跨平台架构 Sloan Yi. Qt MTK.
在PHP和MYSQL中实现完美的中文显示
计算机基础知识 丁家营镇九年制学校 徐中先.
J2EE与中间件技术 ——Lab.
陈香兰 助教:陈博、李春华 Spring 2009 嵌入式操作系统 陈香兰 助教:陈博、李春华 Spring 2009.
Kvm异步缺页中断 浙江大学计算机体系结构实验室 徐浩.
LSF系统介绍 张焕杰 中国科学技术大学网络信息中心
Hadoop I/O By ShiChaojie.
嵌入式用户图形界面编程 课程目的 了解嵌入式图形系统 掌握QT/E开发环境、关键技术 通过实例熟悉基于Qt/E的嵌入式GUI设计.
嵌入式系统课程简介 宋健建 南京大学软件学院 2004/02/10.
SVN的基本概念 柳峰
第二讲 搭建Java Web开发环境 主讲人:孙娜
学习前的准备工作 讲师:burning.
主流嵌入式Linux下GUI解决方案 基本概念介绍 GUI (graphical user interfaces)
什么是Android 本讲大纲: 1、平台特性 2、平台架构 3、Android市场 支持网站:
大学计算机基础 典型案例之一 构建FPT服务器.
SVN服务器的搭建(Windows) 柳峰
Qt移植.
第11章:一些著名开源软件介绍 第12章:服务安装和配置 本章教学目标: 了解当前一些应用最广泛的开源软件项目 搭建一个网站服务器
大数据管理技术 --NoSQL数据库 HBase 陈 辉 大数据分析技术.
DM81X 视频采集处理 ——简单采集显示例程讲解 广州创龙电子科技有限公司
SPI驱动 广州创龙电子科技有限公司 Guangzhou Tronlong Electronic Technology Co., Ltd.
第一单元 初识C程序与C程序开发平台搭建 ---观其大略
Java手机游戏设计实验指导. Java手机游戏设计实验指导 概述 实验的重要性 分析问题 解决问题 动手实践 实验要求 独立完成 开放性.
第十章 IDL访问数据库 10.1 数据库与数据库访问 1、数据库 数据库中数据的组织由低到高分为四级:字段、记录、表、数据库四种。
单元测试工具XUnit 任课老师:黄武 下午2时20分 25.
《手把手教你学STM32》 主讲人 :正点原子团队 硬件平台:正点原子STM32开发板 版权所有:广州市星翼电子科技有限公司 淘宝店铺:
PaPaPa项目架构 By:Listen 我在这.
中国科学技术大学计算机系 陈香兰(0551- ) Spring 2009
Windows 7 的系统设置.
用event class 从input的root文件中,由DmpDataBuffer::ReadObject读取数据的问题
Gzip编译及调试 曹益华
宁波市高校慕课联盟课程 与 进行交互 Linux 系统管理.
三:基于Eclipse的集成开发环境搭建与使用
Unit 11.Operating System 11.1 What’s OS 11.2 Related Courses
程序设计工具实习 Software Program Tool
录制回放工具使用说明 鲁晓宇
内容摘要 ■ 课程概述 ■ 教学安排 ■ 什么是操作系统? ■ 为什么学习操作系统? ■ 如何学习操作系统? ■ 操作系统实例
C语言程序设计 主讲教师:陆幼利.
微机系统的组成.
产品介绍 日修改版本: 去除:C+W统一认证功能:(是否支持) 小米3 外观设计 上市时间: 2014 年 2 月
Platform Builder使用介绍 WINCE系统应用开发流程说明 ACTION RDC 杨 涛 2005.Dec.3th
姚金宇 MIT SCHEME 使用说明 姚金宇
实验七 安全FTP服务器实验 2019/4/28.
工业机器人知识要点解析 (ABB机器人) 主讲人:王老师
计算机网络与网页制作 Chapter 07:Dreamweaver CS5入门
《手把手教你学STM32-STemWin》 主讲人 :正点原子团队 硬件平台:正点原子STM32开发板 版权所有:广州市星翼电子科技有限公司
本节内容 Win32 API中的宽字符 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ: QQ交流群 : 联系电话:
Thomson-252G 外观设计 上市时间:2011年1月 目标人群:普通消者,行业用户费 标准配置:一电一充\耳机\数据线\DC充电器
JSP实用教程 清华大学出版社 第2章 JSP运行环境和开发环境 教学目标 教学重点 教学过程 2019年5月7日.
华为— S7-201c 外观设计 S7-201c 建议零售价格:2588元 上市时间:2011年 10月 20 日
《手把手教你学STM32-STemWin》 主讲人 :正点原子团队 硬件平台:正点原子STM32开发板 版权所有:广州市星翼电子科技有限公司
_13简单的GDI绘图操作 本节课讲师——void* 视频提供:昆山爱达人信息技术有限公司 官网地址:
LOGIX500软件入门 西安华光信息技术有限公司 2008年7月11日.
Visual Basic程序设计 第13章 访问数据库
魏新宇 MATLAB/Simulink 与控制系统仿真 魏新宇
GIS基本功能 数据存储 与管理 数据采集 数据处理 与编辑 空间查询 空间查询 GIS能做什么? 与分析 叠加分析 缓冲区分析 网络分析
_03宽字符与Unicode编程 本节课讲师——void* 视频提供:昆山爱达人信息技术有限公司 官网地址:
Python 环境搭建 基于Anaconda和VSCode.
《手把手教你学STM32-STemWin》 主讲人 :正点原子团队 硬件平台:正点原子STM32开发板 版权所有:广州市星翼电子科技有限公司
C++语言程序设计 C++语言程序设计 第一章 C++语言概述 第十一组 C++语言程序设计.
本节内容 动态链接库 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ: QQ交流群 : 联系电话:
本节内容 进程 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ: QQ交流群 : 联系电话:
第四章 UNIX文件系统.
FVX1100介绍 法视特(上海)图像科技有限公司 施 俊.
《手把手教你学STM32-STemWin》 主讲人 :正点原子团队 硬件平台:正点原子STM32开发板 版权所有:广州市星翼电子科技有限公司
Presentation transcript:

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

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

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

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

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

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

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。

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=$PWD export 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 位的显示颜色深度

Qt/E 、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 生成应用程序以及桌面环境

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的源代码)

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(指定模拟器长、宽)

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

Qt/E 、Qtopia qte/qtopia在2410s上的移植 软件环境 配置NFS(网络文件系统) 配置minicom 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-〉交叉编译工具链 -〉源代码-〉二进制文件-〉目标板可执行

Qt/E 、Qtopia qte/qtopia在2410s上的移植 交叉编译e2fsprogs 交叉编译jpeg、libpng ./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交叉编译环境参数文件使其增加对触摸屏的支持

Qt/E 、Qtopia qte/qtopia在2410s上的移植 交叉编译Qt/Embedded 交叉编译qtopia 设定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.10 libqte.so.2.3.10: ELF 32-bit LSB shared object, ARM, version 1 (ARM),not stripped 交叉编译qtopia

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到指定目录 使用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;  驱动程序提供给上层应用程序使用的信息,用来存储触摸屏的返回值

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

项目进度 触摸屏坐标确定 实际使用过程中, 唯一的参考定位是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   }

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

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

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

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

项目进度 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

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