版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第七章 文件系统与QT编程,合肥学院 电子信息与电气工程系 干开峰,目 录,7.1 制作Linux根文件系统 7.2 Qtopia Core应用程序设计,3,7.1 制作Linux根文件系统,本章介绍了Linux根文件系统的组织结构,并且分析了init进程调用文件系统脚本初始化的过程。只有掌握了文件系统的基本构成,才能自己动手定制Linux文件系统。,7.1.1 根文件系统组织结构 7.1.2 INIT系统初始化过程 7.1.3 定制文件系统,7.1.1 根文件系统组织结构,一、Linux的根文件系统至少应包括以下几项内容。 1基本的文件系统结构,包含一些必需的目录比如:/dev,/proc,
2、/bin,/etc,/lib,/usr,/tmp等。 2基本程序运行所需的库函数,如Glibc/uC-libc。,3基本的系统配置文件,比如rc,inittab等脚本文件。 4必要的设备文件支持:/dev/hd*,/dev/tty*,/dev/fd0。 5基本的应用程序,如sh,ls,cp,mv等。,二、Linux根文件系统结构,文件存放规则: 1把全局配置文件放入/etc目录下。 2将设备文件信息放入/dev目录下,设备名可以作为符号链接定位在/dev中或/dev子目录中的其他设备存在。 3操作系统核心定位在/或/boot,若操作系统核心不是作为文件系统的一个文件存在,不应用它。 4库存放的
3、目录是/lib。 5存放系统编译后的可执行文件、命令的目录是/bin,/sbin,/usr。,三、 添加系统文件 1、 添加共享链接库 在在根文件系统的/lib目录下主要包含以下4种类型的文件。 (1) 实际的共享链接库 (2)主修订版本的符号链接 (3)与版本无关的符号链接指向主修订版本的符号链接 (4)静态的链接库,为了明确应用程序需要的链接库,使用ldd命令。,=左边表示该程序所需要共享库的符号链接名称,右边表示由linux的共享库系统找到的对应的共享库在跟文件系统中的实际位置。,默认地,动态练级库的配置文件/etc/ld.so.conf中包含有默认的共享库搜索路径。,通常,开放源码的程
4、序或者函数库都会默认安装到/usr/local目录的相应位置。 添加共享链接库文件的方法: Cd /lib Cp *_*.so /rootfs/lib Cp -d *.so.*0-9 第一个CP复制实际的共享链接库 第二个CP复制主修订版本的符号链接,2、添加内核模块 在内核编译过程中自动添加内核模块 动态添加内核模块 动态加载内核模块有2种方法,以下分别叙述。 (1)采用modprobe命令加载 (2)采用insmod命令加载,3、 添加设备文件 Linux中任何对象(包括设备)都可以认为是文件。Linux将设备分为最基本的2大类:一类是字符设备(Character Device),另一类是
5、块设备(Block Device)。 1使用mknod指令来添加设备 2在/dev目录下采用MAKEDEV(符号链接/sbin/MAKEDEV)来建立设备文件,7.1.2 INIT系统初始化过程,通常,Linux内核的启动可以分为两个阶段。 1. 在第1个阶段完成硬件检测、初始化和内核的引导 2在第2个阶段就是init的初始化进程。,一、 inittab文件 Linux启动时,运行一个叫作init的程序,然后根据运行级启动后面的任务,包括多用户环境,网络等。所谓的运行级就是操作系统当前正在运行的功能级别。,二、 System V init启动过程 概括地讲,Linux Unix系统一般有两种不
6、同的初始化启动方式。 BSD system init System V system init 以下是一个大致的System V init过程。 (1)init过程执行的第一个脚本文件是/etc/rc.d/rc.sysinit, /etc/rc.d/rc.sysinit主要做在各个运行级别中进行初始化工作 (2)执行缺省的运行级模式。 (3)执行/etc/rc.d/rc.local脚本文件。 (4)执行/bin/login程序。,三、 Busybox init启动过程分析 默认的情况下,Busybox安装之后会生成一个可执行程序Busybox,在目录/_install/bin下,查看Busyb
7、ox的属性可以知道/sbin/init是其符号链接,如果使用Busybox做Ramdisk,BusyBox会在内核刚完成加载后就立即启动,此后Busybox会跳转到它的init进程开始执行,7.1.3 定制文件系统,一、定制应用程序 在定制嵌入式系统的系统应用程序时,如果把常用的应用程序的源码都下载来交叉编译,这一过程的工作量显然是很大的,而且非常繁琐。为了进一步减小所创建的根文件系统的尺寸,可以考虑使用下列工具包软件来替代某些标准的工具。 事实上使用Busubox来定制是一个不错的选择,二、 配置应用程序自动启动 在Linux下配置应用程序自动启动大致有以下的3种方法。 (1)在启动/etc
8、/init.d/下添加启动脚本,创建/etc/rc.d/./目录下的链接。 (2)直接在/etc/rc.d/rc.local脚本中添加命令,该脚本应该在启动过程中调用 (3)通过/linuxrc脚本直接启动,通常是在内核命令行参数中指定init=/program。,7.2 Qtopia Core应用程序设计,7.2.1 嵌入式GUI概述 7.2.2 Qtopia Core简介 7.2.3 Qtopia Core开发环境构建 7.2.4 Qtopia Core程序开发基础 7.2.5 Qtopia Core程序结构与实例 7.2.6 Qtopia Core交叉编译,7.2.1 嵌入式GUI概述,
9、1、什么是用户接口,用户接口是指计算机与人之间的互动接口,即输入和输出。,用户接口分为两种: 命令行(字符界面) 图形界面。,字符界面,(字符界面下的)菜单方式,图形界面,GUI 是 Graphical User Interface 的缩写,即“图形用户界面”。 它是使用图形的方式,借助菜单、按钮等标准界面元素和鼠标进行操作,帮助用户方便地向计算机系统发出指令,并将系统运行的结果同样以图形方式显示给用户。 GUI是当今计算机技术的重大成就。它的存在为使用者提供了友好便利的界面,并大大地方便了非专业用户的使用,使得人们从繁琐的命令中解脱出来,可以通过窗口、菜单方便地进行操作。,2、GUI是什么?
10、,以前,受到嵌入式硬件的限制,早期的嵌入式设备不支持GUI。随着嵌入式硬件的不断发展,再加上人们对人机界面的要求不断提高,所以现在大多数嵌入式设备要使用GUI。,3、早期的嵌入式系统为什么不用GUI?,(1)WIMP。(Windows、Icons、Menu、Pointing Devices) (2)用户模型。(Desktop桌面办公的隐喻) (3)直接操作。,4、GUI的主要特征:,(1)轻型,占用资源少。 (2)可配置。 (3)高性能。 (4)高可靠性。,5、嵌入式系统对GUI有如下的基本要求:,实验箱上的应用软件设计成GUI软件后,可以在LCD上显示出来,同时还可以通过触摸屏进行各种操作。
11、,可以设计一个软键盘,利用触摸屏来实现,思考:有些嵌入式系统没有键盘如何输入字符?,6、常用的嵌入式GUI系统有5种: (1)X Windows (2) Microwindows (3) MiniGUI (4)Qt/Embedded,X窗口系统(也常称为X11)是一种以位图方式显示的软件窗口系统。最初是1984年麻省理工学院的研究,之后变成UNIX、类UNIX。 今日知名的桌面环境GNOME和KDE也都是以X窗口系统为基础建构成的。,(1)X Windows,(2)Microwindows Microwindows是由美国CenturySoftware公司开发的开放源码的嵌入式GUI项目。,它
12、不需要其他图形系统的支持,可以充分利用Linux提供的Framebuffer机制来进行图形显示。同时在底层提供了对多种芯片的支持,并基本上用C语言实现,因此移植性很强。国内也有人参与了这个项目的开发,并编写了GB2312等字符集的支持。,(3)MiniGUI MiniGUI是我国国内自主开发、比较成熟的一个图形用户界面系统。 MiniGUI 是一款面向实时嵌入式系统或者实时系统的轻量级图形用户界面支持系统。 使用C语言编写程序。 使用消息传输机制。,MiniGUI产生的背景 MiniGUI是由魏永明(清华大学的教师)主持和开发的一个自由软件项目,现由北京飞漫软件有限公司()维护并开展后续开发。
13、,1973年出生,1998年毕业于清华大学,获工学 硕士学位。毕业后在清华大学精密仪器系 任教,负责国内第一台产品化虚拟轴机床数 控系统的研发工作,并在该项目中使用 RT- Linux 开发数控系统。为解决性能问题,在多年积累基础上开始开发专门针对实时嵌入式 Linux 系统的图形用户界面支持系统 MiniGUI。 2000 年 任蓝点软件研发中心技术主管。2001 年加入中科红旗软件有限公司从事嵌入式 Linux 关键技术的研究工作,2002 年创办北京飞漫软件技术有限公司,并担任该公司总经理。,飞漫软件成立于 2002 年 9 月。飞漫软件已成为中国地区为开源社区贡献代码最多的软件企业,总
14、体贡献代码行数超过 200 万行。 目前,MiniGUI 广泛应用于手机、可视电话、智能家居、安防监控、医疗设备、军事工业等领域。 MiniGUI用户遍及中国、美国、意大利、韩国和日本等全球主要国家和地区,典型用户及合作伙伴有:华为、中兴通讯、大唐移动、海信、联想、飞思卡尔(美国)Actinium(新加坡)、D2(美国) 等。,MiniGUI 授权模式发生重大改变 飞漫将改变 MiniGUI 的授权模式,从 MiniGUI 3.0.10 版本开始,对使用 MiniGUI 3.0.10 for Linux 版本开发非消费类终端产品(如工业控制系统、工业仪表、医疗仪器、DVR、门禁系统等年出货量低
15、于 10K 的产品)的客户,将不再按照副本个数计算 MiniGUI 的运行时授权费,而以订阅费取代。客户选择订阅方式时,可获得订阅期内的 MiniGUI 及 mStudio 缺陷修正、升级等质量保障服务,同时免收提成费。,2010年3月采用飞漫MiniGUI技术的手机联想TD30t市场热销,联想TD30t是一款全功能的千元(目前售价约700元)3G手机产品。,MiniGUI的主要特色 MiniGUI容量小、性能和效率高,非常适合于工业控制实时系统以及嵌入式系统的可定制的、小巧的图形用户界面支持系统。 它的主要特色有: (1)提供了完备的多窗口机制。 (2)消息传递机制。 (3)小巧、可配置。
16、(4)可移植性好。,程序只显示一个主窗口 窗口标题为:HelloWorld 窗口显示的内容为:Hello World!,分析helloworld程序,(4)Qt/E Qt是一个跨平台的C+图形用户界面应用程序框架。由挪威TrollTech公司出品。 1996年Qt进入商业领域,它已经成为全世界范围内数千种成功的应用程序的基础。Qt也是流行的Linux桌面环境KDE 的基础,KDE是所有主要的Linux发行版的一个标准组件。,Trolltech(奇趣科技公司)是由Haavard Nord (执行总裁) 和 Eirik Chambe-Eng (总裁)于1994年创立的,2008年6月被NOKIA收
17、购。 Trolltech拥有90多名雇员。通过直销,转售和战略合作伙伴等多种方式联合销售产品。 Trolltech是一家拥有两个主线产品(Qt和Qtopia)的软件公司。,TrollTech公司目前开发两种产品: 跨平台的图形界面设计平台,即Qt 嵌入式系统的应用程序开发平台,即Qtopia,TrollTech,Qt/embedded,Qt,Qt/X11,Qt/windows,Qt/Mac,Qtopia,Qtopia Core,7.2.2 Qtopia Core简介,1995年,Qt0.90发布,这是Qt的第一个商业版本。Qt0.90可以在Windows和UNIX两种平台上进行应用程序开发。
18、1996年Qt1.0发布,创建了KDE 组织- K桌面环境(Kool Desktop Environment)的缩写。,一、Qt发展历史,1997年4月Qt1.2发布。用Qt来搭建KDE,使Qt成为在Linux下C+ GUI开发的标准。 1999年6月25日 Qt 2.0 发布,Qt 2.0还增加了40个新类。1998年8月,Qt以“最佳的库及工具”获得了LinuxWorld的赞誉。,2000 年嵌入式Qt 发布(Qt/Embedded)。2000年年底,Trolltech 公司发布了第一个版本的Qtopia(Qtopia1.0),Qtopia是为手持设备提供的库环境。 2001年,Qt/Em
19、bedded在LinuxWorld中赢得了“Best Embedded Linux Solution”的荣誉。2001年发布了Qt3,此时Qt已经可以应用于Windows、UNIX、Linux、Mac OS 等多种平台上。,2005年夏天发布了Qt4。 2007年3月,Qtopia最后一个版本4.3.2发布,它是基于Qt 4.3。 2008年1月28诺基亚收购了Trolltech。9月Qtopia被将Qt/E并入了Qtopia,改称为Qtopia Core。 2009年12月1日, 诺基亚发布了QT 4.6最新版的跨平台应用程序和用户界面框架。,Qt泛指Qt的所有桌面版本:Qt/Windows
20、,Win32版,适用于Windows平台;Qt/X11,X11版,适合于使用了x系统的各种 linux 和 unix的平台;Qt /Mac,Mac版,适合与苹果MacOS。 Qt/Embedded是Qt的嵌入式版本,在原始Qt的基础上,做了许多出色的调整以适合嵌入式环境。,在Qt/Embedded版本4之前,Qt/Embedded和Qtopia是两套不同的程序,Qt/Embedded是基础类库;Qtopia是构建于Qt/Embedded之上的一系列应用程序,包括PDA和移动设备的常见功能:电话簿、图像浏览、日程表、影音播放器等。但从版本4开始,Trolltech将Qt/Embedded与Qto
21、pia合并,命名为Qtopia Core,并以此作为嵌入式版本的核心。,Qt优良的跨平台特性是其得以广泛应用的重要原因之一。 针对不同操作系统发布的Qt版本,提供给应用程序开发人员的API一致。 用Qt/Windows开发的应用程序移植到Linux环境,只需要将开发好的应用程序用Qt/X11版本重新编译,,二、Qt的体系结构,Qt/X11和Qt/Windows的系统架构图,Qt/X11和Qtopia Core的系统架构图,7.2.3 Qtopia Core开发环境构建,使用了两个软件包: qt-x11-opensource-src-4.2.2.tar.gz qtopia-core-openso
22、urce-src-4.2.2.tar.gz。,1、软件包介绍,(1)Qt/X11开发环境的构建 (2)Qtopia Core桌面开发的构建 (3) Qtopia Core交叉开发环境的构建,2、软件安装,a)解压软件包 tar xzvf qt-x11-opensource-src-4.2.2.tar.gz b)生成Makefile文件 #./configure c)编译 #gamke d)安装 #gmake install e)设置环境变量 在.bash_profile文件加上: PATH=/usr/local/Trolltech/QtoiaCore-4.2.2/bin/:$PATH expo
23、rt PATH,(1)QT/X11的安装,如果安装时报错,提示信息如: src/gui/kernel/qt_x11_p.h. 则可能是因为Linux没有安装系统自带的QT开发包。,a)安装Qtopia Core b) 安装qt/x11,利用它的qvfb c)后台运行qvfb -width 640 -height 480 QLabel *hello=new QLabel(Hello Qt/Embedded!”); hello-show(); return app.exec(); ,(1)生成工程文件() qmake -project (2)生成Makefile文件 qmake
24、(3)生成可执行文件(hello) make (4)运行 ./hello,Qt为专业应用提供了大量的函数,大约含有250个C+类,这里面包括窗口部件的外观类、基本的GUI窗口部件类、布局管理类、与数据库相关的类、生成和处理事件的类、图像处理类、处理日期与时间的类等等。 下面介绍一下Qt重要的三个基类:QObject、QApplication、QWidget。,二、Qt中的主要类,1QObject QObject类是所有能够处理signal、slot和事件的Qt对象的基类,它的原形如下: QObject : QObject ( QObject *parent=0, const char *nam
25、e = 0) 在QObject的原型函数中,如果 parent为0,则构造一个无父的对象,如果对象是一个组件,则它就会成为顶层的窗口。,Qt中的类如果需要采用signal和slot机制,则在类的定义体前需要加上Q_OBJECT宏。QObject类的继承树如图所示。,2Qapplication Qapplication类负责GUI应用程序的控制流和主要的设置。它包括主事件循环体,负责处理和调度所有来自窗口系统和其它资源的事件,处理应用程序的开始、结束及会话管理。对于一个应用程序来说,建立此类的对象是必须的。QApplication类是QObjetc类的子类。,QApplication类中包含的方
26、法如下: (1)系统设置:font()、setFont()、desktopSettingAware()等; (2)事件处理:exec()、exit()、quit()、postEvent()、processEvent()等; (3)图形用户界面风格:stytle()、setStyle()、polish()等; (4)颜色使用:colorSpec()、setColorSpec()、qwsSetCustomColors()等; (5)文本处理:SetDefaultCodec()、translate()等; (6)窗口部件:mainWidget()、setMainWidget()、focusWidge
27、t()等; (7)对话管理:isSeddionRestord()、sessionId()等; (8)线程相关:lock()、unlock()、wakeUpGuiThread()等。,3Qwidget Qwidget类是所有用户接口对象的基类,它继承了QObject类的属性。用户接口对象也可以称为组件,是用户界面单位组成部分,它们不仅可以把自己绘制在终端屏幕上,而且也可以对键盘、鼠标及从窗口系统发送过来的事件进行处理。 QWidget有很多成员函数,但一般不直接使用,而是通过子类继承来使用其函数功能,如QPushButton、QListBox等都是它的子类。,基本部件类,信号(signal)和槽
28、(slot)机制是Qt的一个主要特征,是Qt与其他工具包最不同的部分。,三、信号和槽,在图形界面编程中,经常会出现窗口中的一个部件发生的变化被通知给另一个部件。在许多面向对象程序设计的开发工具包中采用事件响应机制来实现对象部件之间的通信,这很容易崩溃、不够健全,同时也不是面向对象的。,在Qt中采用信号和槽来实现对象部件之间的通信,这种机制既灵活,又面向对象,并且用C+来实现,完全可以取代传统工具中的回调和消息映射机制。,MiniGUI的回调函数 DialogBoxIndirectParam (,以前,使用回调函数机制关联某段响应代码和一个按钮的动作时,需要将相应代码函数指针传递给按钮。当按钮被
29、单击时,函数被调用。对于这种方式不能保证回调函数被执行时传递的参数都有着正确的类型,很容易造成进程崩溃,并且回调方式将GUI元素与其功能紧紧地捆绑在一起,使开发独立的类变得很困难。,Qt的信号与槽机制则不同,Qt的窗口在事件发生后会激发信号。 例如,当一个按钮被单击时会激发clicked信号。程序员通过创建一个函数(称作一个槽)并调用connect()函数来连接信号,这样就可以将信号与槽连接起来。,使用函数connect() bool connect (const QObject *sender, const char *signal, const QObject *receiver, con
30、st chat *slot) 使用宏定义SIGNAL()和SLOT(),signal和slot的连接,信号与槽的连接规则,信号与槽的连接规则,1一个信号可以连接到多个槽 2多个信号可以连接到同一个槽 3一个信号可以和另一个信号相连 connect(lineEdit, SIGNAL(textChanged(const QString ,7.2.5 Qtopia Core程序结构与实例,介绍3个程序(Qt/x11),编写一个,显示如下窗口的程序(Qt/x11),#include #include int main(int argc,char *argv) QApplication app(argc
31、,argv); QLabel *hello=new QLabel(Hello Qt/Embedded!); hello-show(); return app.exec(); ,文件夹名为hel,文件名为hello.cpp (1)qmake -project (2)qmake (3)make (4)./hel,编写一个,显示如下窗口的程序,#include #include int main(int argc,char *argv) QApplication app(argc,argv); QPushButton *button=new QPushButton(Quit,0); QObject:
32、connect(button,SIGNAL(clicked(), ,文件夹名为q,文件名为quit.cpp (1)qmake -project (2)qmake (3)make (4)./q,编写一个,显示如下窗口的程序,main(int argc,char *argv) QApplication app(argc,argv); QWidget *window=new QWidget; window-setWindowTitle(“Enter Your Age”); QSpinBox *spinBox=new QSpinBox; QSlider *slider=new QSlider(Qt:H
33、orizontal); spinBox-setRange(0,130); slider-setRange(0,130); QObject:connect(spinBox,SIGNAL(valueChanged(int),slider,SLOT(setValue(int); QObject:connect(slider,SIGNAL(valueChanged(int),spinBox,SLOT(setValue(int); spinBox-setValut(50); QHBoxLayout *layout=new QHBoxLayout; layout-addWidget(spinBox); l
34、ayout-addWidget(slider); window-setLayout(layout); window-show(); return app.exec(); ,3使用Qt Designer工具设计以下界面,Qt Designer简介,QT Designer是QT的一种工具。利用QT Designer可以用一种所见既所得的方式,来产生QT程序的GUI界面的程序代码,通过增加一些功能,就可以完成一个完整的程序。,3Qt Designer的应用:显示室内温度,(1)用designer工具设计好界面 mainwindow.ui (2)将界面文件转化C+代码(使用uic工具) ui_main
35、window.h (3)编写主程序调用界面. main.cpp,main.cpp,#include #include #include ui_mainwindow.h int main(int argc,char *argv) QApplication a(argc,argv); Ui_MainWindow w; /Ui:MainWindow w; QMainWindow *window=new QMainWindow; w.setupUi(window); window-show(); return a.exec(); ,3Qt Designer的应用:显示室内温度,(1)用designer
36、工具设计好界面 mainwindow.ui (2)将界面文件转化C+代码(使用uic工具) ui_mainwindow.h (3)创建一个新类,继承前面的类和QMainWindow类 mainwindow.h (4)编写程序实现构建、析解和其它函数的功能 mainwindow.cpp (5)编写主程序调用界面. main.cpp,7.2.6 Qtopia Core交叉编译,如何开发和运行实验箱上的Qt/E程序?,Qt/X11 Qt/E Qtopia,构建QT/E的桌面开发环境,构建QT/E的桌面开发环境,qt-x11-2.3.2.tar.gz (将源程序生成头文件、库文件、qvfb 、designer、uic),qt-embedded
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 数字化赋能:地市级供电公司信息化系统的创新构建与实践
- 数字化浪潮下深圳电信宽带服务营销策略的创新与突破
- 2025 记叙文细节描写阅读理解课件
- 小学城区学校学位预警信息发布时效-基于2023年教育局官网公告时间
- 沥青原材料采购管理制度
- 泉州采购内部控制制度
- 洗浴中心物品采购制度
- 浙江医保集中采购制度
- 海底捞物资采购制度模板
- 消耗品采购管理制度
- 绿色高端定制农产品市场消费者满意度调查报告
- 汽轮机和水轮机检修工国家职业标准(征求意见稿)
- 贵州应急工程管理办法
- 光伏电站应急救援培训课件
- 人体动静脉课件
- 2025年广东省初中学业水平考试语文试卷(含答案详解)
- 2025年江苏护理职业学院单招《数学》考前冲刺练习试题附参考答案详解(培优A卷)
- 泰山学院中国地理课件第9章 东北区
- 作风建设培训课件民航
- 专项维修资金存放服务方案投标文件技术方案
- T/CAQI 96-2019产品质量鉴定程序规范总则
评论
0/150
提交评论