嵌入式系统与Qt程序开发
上QQ阅读APP看书,第一时间看更新

第1章 嵌入式系统与Qt

绝大多数Linux软件开发都是以本地方式进行的,即本机(HOST)开发、调试,本机运行的方式。这种方式通常不适合嵌入式系统的软件开发,因为对于嵌入式系统的开发,没有足够的资源在本机运行开发工具和调试工具。

通常的嵌入式系统的软件开发采用交叉编译的方式。

1.1 交叉编译简介

1.概念 简单来说,交叉编译就是在一个平台体系上生成另一个平台体系上的可执行代码。这个概念的出现和流行是和嵌入式系统的广泛发展同步的。我们常用的计算机软件都需要通过编译的方式,把使用高级计算机语言编写的代码(例如C语言代码)编译成计算机可以识别和执行的二进制代码。

例如,在Windows平台上,可使用Ⅴisual C++开发环境,编写程序并编译成可执行程序。在这种方式下,我们使用PC平台上的Windows工具开发针对Windows本身的可执行程序,这种编译过程称为“native compilation”,中文可理解为本机编译。

然而,在进行嵌入式系统的开发时,运行程序的目标平台通常具有有限的存储空间和运算能力,例如ARM平台。在这种情况下,在ARM平台上进行本机编译就不太可能了,这是因为一般的编译工具链需要很大的存储空间,并需要很强的CPU运算能力。为了解决这个问题,交叉编译工具就应运而生了。通过交叉编译工具,我们就可以在CPU能力很强、存储空间足够的主机平台上(例如PC上)编译出针对其他平台的可执行程序。

2.常见的ARM交叉编译工具链

要进行交叉编译,我们需要在主机平台上安装对应的“交叉编译工具链”,然后用这个交叉编译工具链编译我们的源代码,最终生成可在目标平台上运行的代码。常见的ARM交叉编译例子如下:

➢在Windows PC上,利用ADS开发环境,使用armcc编译器,则可编译出针对ARM CPU的可执行代码;

➢在Windows PC上,利用cygwin环境,运行arm-elf-gcc编译器,可编译出针对ARM CPU的可执行代码。这两种方式即是工程技术人员称之为“裸奔”(不带操作系统)的开发方式。

➢在Linux PC上,利用arm-linux-gcc编译器,可编译出针对Linux ARM平台的可执行代码。

如果选择使用了嵌入式Linux,显然需要使用arm-linux-gcc编译器。

3.基础知识

在做实际工作之前,应该先掌握一些关于交叉编译的基础知识,也就是理解经常会碰到的英文单词。

➢宿主机(host):编辑和编译程序的平台,一般是基于x86的PC,通常也被称为主机;

➢目标机(target):用户开发的系统,通常都是非x86平台。host通过交叉编译得到可以在target上运行的执行代码。

1.2 Linux PC与虚拟机

选择使用arm-linux-gcc就需要使用Linux PC。使用Linux PC有两个方案:

➢方案一在Windows下安装虚拟机后,之后在虚拟机中安装Linux操作系统;

➢方案二直接安装Linux操作系统。

方案一在PC硬件配置比较低的情况下会比较慢,但是目前PC的主流硬件配置运行虚拟机是绰绰有余的,甚至于可以做到同时开启若干台虚拟机。采用这种方案既可以使用Windows上的软件又可以使用到比较好的Linux环境,熟悉Windows的用户用此方案比较顺手;方案二无法使用Windows上的一些常用软件,并且不熟悉Linux操作系统的人操作起来比较困难。鉴于此,建议初学者选择方案一。

1.2.1虚拟机

1.概述

虚拟机是(Ⅴirtual Machine)是指通过软件模拟的具有完整硬件系统功能的、运行在一个完全隔离环境中的完整计算机系统。通过虚拟机软件,使用者可以在一台物理计算机上模拟出另一台或多台虚拟的计算机,这些虚拟机完全就像真正的计算机那样进行工作,例如可以安装操作系统、安装应用程序、访问网络资源等。也就是说:

➢对于使用者而言,虚拟机只是运行在物理计算机上的一个应用程序;

➢对于在虚拟机中运行的应用程序而言,它就是一台真正的计算机。

因此,当在虚拟机中进行操作时,可能系统会崩溃;但是,崩溃的只是虚拟机上的操作系统,而不是物理计算机上的操作系统。

使用虚拟机软件时有几个基本的概念需要掌握。

➢HOST:物理存在的计算机;

➢Host’s OS:HOST上运行的操作系统;

➢ⅤM(Ⅴirtual Machine):虚拟机指由虚拟机软件模拟出来的一台虚拟的计算机,也即逻辑上的一台计算机;

➢Guest OS:指运行在ⅤM上的操作系统。例如在一台安装了Windows XP操作系统的计算机上安装了虚拟机软件,那么:

➢HOST指的是安装Windows XP的这台计算机;

➢Host’s OS为Windows XP;

➢ⅤM上安装的操作系统是Linux,那么Linux即为Guest OS。

目前在Windows系列系统上流行的虚拟机软件主要有ⅤMware Workstation和ⅤirtualBox。

2.VMware Workstation简介

ⅤMware Workstation(威睿工作站)是一款商业软件,同时是一款功能强大的桌面虚拟计算机软件,提供用户可在单一的桌面上同时运行不同的操作系统,以及进行开发、测试、部署新的应用程序的最佳解决方案。ⅤMware Workstation可在一部实体机器上模拟完整的网络环境,以及可便于携带的虚拟机器,其更好的灵活性与先进的技术胜过了市面上其他的虚拟计算机软件。对于企业的IT开发人员和系统管理员而言,ⅤMware在虚拟网路、实时快照、拖曳共享文件夹和支持PXE等方面的特点使它成为必不可少的工具。

ⅤMware Workstation的开发商为ⅤMware(中文名“威睿”,ⅤMware Workstation就是以开发商ⅤMware为开头名称,Workstation的含义为“工作站”,因此ⅤMware Workstation中文名称为“威睿工作站”),ⅤMware成立于1998年,为EMC公司的子公司,总部设在美国加利福尼亚州帕罗奥多市,是全球桌面到数据中心虚拟化解决方案的领导厂商,全球虚拟化和云基础架构领导厂商,全球第一大虚拟机软件厂商,世界第四大系统软件公司。

3.VirtualBox简介

ⅤirtualBox是一款开源虚拟机软件,是由德国Innotek公司开发,由Sun Microsystems公司出品,使用Qt编写。在Sun被Oracle收购后正式更名成OracleⅤMⅤirtualBox。Innotek以GPL(GNU General Public License,GNU通用公共许可证)释出ⅤirtualBox,并提供二进制版本及OSE版本的代码。使用者可以在ⅤirtualBox上安装并且执行Solaris、Windows、DOS、Linux、OS/2Warp和BSD等系统作为客户端操作系统。

ⅤirtualBox号称是最强的免费虚拟机软件,它不仅具有丰富的特色,而且性能也很优异。它简单易用,可虚拟的系统包括Windows(从Windows 3.1到Windows 8、Windows Server 2012,所有的Windows系统都支持)、Mac OS X(32bit和64bit都支持)、Linux(2.4和2.6)、OpenBSD、Solaris、IBM OS2甚至Android 4.0系统等操作系统。使用者可以在ⅤirtualBox上安装并且运行上述的这些操作系统。

4.虚拟机的选择

从综合性能上来看,ⅤirtualBox可能略逊于ⅤMware Workstation,但是考虑到版权的问题,选用ⅤirtualBox。

1.2.2 VirtualBox的安装

1.VirtualBox的下载

ⅤirtualBox软件的现在可以从官方网站https://www.virtualbox.org/wiki/Downloads下载安装包。

2.VirtualBox的安装

ⅤirtualBox的安装比较简单,用鼠标双击ⅤirtualBox的安装文件,会出现图1-1所示的界面。

在弹出的界面上单击“Next”按钮或“Install”按钮进行ⅤirtualBox的安装。之后等待一段时间,即可完成安装。在安装的过程中可能会有驱动程序的安装提示,选择“允许安装即可”。

978-7-111-55364-9-Chapter01-1.jpg

图1-1 ⅤirtualBox初始安装界面

1.2.3 VirtualBox的使用

1.添加虚拟机

运行ⅤirtualBox,在“虚拟机”菜单中选择“添加”选项,如图1-2所示。

978-7-111-55364-9-Chapter01-2.jpg

图1-2 添加虚拟机选项

选择Ubuntu 10.10虚拟机,如图1-3所示。

978-7-111-55364-9-Chapter01-3.jpg

图1-3 选择Ubuntu 10.10虚拟机

此时,会在ⅤirtualBox左侧虚拟机管理区域出现添加完成的Ubuntu 10.10虚拟机,如图1-4所示。

978-7-111-55364-9-Chapter01-4.jpg

图1-4 添加完成的Ubuntu 10.10虚拟机

2.设置虚拟机

(1)网络设置

ⅤirtualBox在ⅤM中支持4个网络适配器。一般来说,为了兼顾与嵌入式的网络通信和访问Internet的需要设置两个网络适配器。

以编者使用的HOST为例,编者所使用的HOST有台式计算机也有笔记本式计算机,这些HOST均使用了无线网络适配器连接Internet;同时这些HOST也均有有线网络适配器。

在ⅤirtualBox的网络设置中:

➢1个网络适配器采用桥接适配器,桥接至HOST的有线网络适配器,用于与嵌入式进行网络通信,网络设置适配器如图1-5所示。

978-7-111-55364-9-Chapter01-5.jpg

图1-5 网络设置适配器1

➢1个网络适配器采用网络地址转换(NAT),留待访问Internet,网络设置适配器2如图1-6所示。

978-7-111-55364-9-Chapter01-6.jpg

图1-6 网络设置适配器2

(2)共享文件夹

由于Host’s OS与Guest OS要进行数据交换,在ⅤirtualBox中一般需要设置一下共享文件夹,如图1-7所示。

需要注意的是:在配置完成的Guset OS中也已经配置了共享,如果Host’s OS的共享设置不正确,Guset OS可能会无法启动。

978-7-111-55364-9-Chapter01-7.jpg

图1-7 共享文件夹的设置

在图1-7所示的界面中,需要注意的是:

➢文件夹路径指的是Host’s OS中准备共享的文件夹;

➢文件夹名称则是Guest OS即Ubuntu中准备挂载的设备名称。

3.启动虚拟机

选中Ubuntu 10.10,单击图1-4所示的“启动”按钮即可开启虚拟机。进入Ubuntu 10.10需要密码,其中hcit账户的密码和root账户的密码都已经设置为111111。进入Ubuntu 10.10后的桌面如图1-8所示。

978-7-111-55364-9-Chapter01-8.jpg

图1-8 Guest OS桌面(Ubuntu 10.10)

1.3 交叉编译环境

1.3.1 安装VirtualBox增强功能

单击ⅤirtualBox菜单中的“设备”中的“插入Guest Additions CD映像…”选项,如图1-9所示,此时在ⅤM中会出现图1-10所示的安装增强功能的对话框。

978-7-111-55364-9-Chapter01-9.jpg

图1-9 “插入Guest Additions CD映像”选项

978-7-111-55364-9-Chapter01-10.jpg

图1-10 “安装增强功能”对话框

根据提示进行后续操作,即可完成增强功能的安装。只有ⅤM安装了增强功能,鼠标集成、共享文件夹和共享网络等增强功能才能正常工作;同时,只有ⅤM安装了增强功能,ⅤM的显示才能与ⅤirtualBox的大小紧密贴合。

1.3.2 共享文件夹的设置与使用

在安装、配置交叉环境之前,需要将交叉编译环境的安装文件等复制到Guest OS中,此时需要使用挂载共享文件夹的方法。

1.打开Ubuntu终端

刚刚接触Linux的人也许会问,为什么Linux中有命令行呢?这个问题想必也困扰着很多Linux的爱好者。其实,大家没有详细地进行命令行的学习,当试用几次之后也许就会感叹,原来世界上还有这么神奇的东西。

目前Linux操作系统的图形化操作已经相当成熟。在Linux上可采用多种图形管理程序来改变桌面图案和菜单功能。但是相比图形界面,Linux命令行才是Linux系统的真正核心,利用命令行可以对系统进行各种配置,要熟练并成功管理Linux操作系统就必须对Linux命令行有深入的了解。

Linux下的命令行有助于初学者了解系统的运行情况和计算机的各种设备。例如:中央处理器、内存、磁盘驱动、各种输入和输出设备以及用户文件,都是在Linux系统管理命令下运行的。可以说Linux命令行对整个系统的运行以及设备与文件之间的协调都具有核心的作用。

在Ubuntu(绝大多数Linux也是如此)中,命令行的输入主要通过终端来完成,打开终端的方法有两种。

第一种方法是找到Ubuntu上方面板左侧的“应用程序”→“附件”,单击“终端”按钮,如图1-11所示,即可打开终端,如图1-12所示。

978-7-111-55364-9-Chapter01-11.jpg

图1-11 选择“终端”

第二种方法是在Ubuntu中同时按下终端的〈Ctrl〉+〈Alt〉+〈T〉组合键,也可以打开终端,终端界面如图1-12所示。

978-7-111-55364-9-Chapter01-12.jpg

图1-12 终端界面

2.在Ubuntu中新建共享文件夹的挂载目录

一般来说,在Linux中/mnt目录是让用户用于临时挂载其他的文件系统的,所以将挂载目录设置在/mnt目录中。

(1)进入/mnt目录

在Linux中切换目录使用cd命令。

功能:cd命令可以让用户在不同的目录间切换,但该用户必须拥有足够的权限进入目的目录。

参数与格式:

cd[目的目录]

978-7-111-55364-9-Chapter01-13.jpg

即可进入/mnt目录。

2)新建挂载目录

新建挂载目录需要使用mkdir命令。

功能:执行mkdir命令可以建立目录并同时设置目录的权限

参数与格式:

978-7-111-55364-9-Chapter01-14.jpg

参数说明:-m<目录属性>或--mode<目录属性>:建立目录时同时设置目录的权限;

-p或--parents:若所要建立目录的上层目录目前尚未建立,则会一并建立上层目录;

--help:显示帮助;

--verbose:执行时显示详细的信息;

--version:显示版本信息。

进入/mnt目录后,在终端中输入命令

978-7-111-55364-9-Chapter01-15.jpg

或在终端输入命令

978-7-111-55364-9-Chapter01-16.jpg

在/mnt目录中创建Downloads目录。

如果出现权限不够的提示信息,则需要使用sudo命令。

功能:sudo是Linux系统管理命令,是允许系统管理员让普通用户执行一些或者全部的root命令的工具,如halt、reboot和su等。这样不仅减少了root用户的登录和管理时间,同样也提高了安全性。

参数与格式:

978-7-111-55364-9-Chapter01-17.jpg

978-7-111-55364-9-Chapter01-18.jpg

-k:将会强迫使用者在下一次执行sudo时询问密码(不论有没有超过N分钟);

-b:将要执行的命令放在背景执行;

-p prompt:可以更改询问密码的提示语,其中%u会代换为使用者的账号名称,%h会显示主机名称;

-u username/#uid:不加此参数,代表要以root的身份执行命令,而加了此参数,可以以username的身份执行命令(#uid为该username的使用者号码);

-s:执行环境变量中的SHELL所指定的shell,或是/etc/passwd里所指定的shell;

-H:将环境变量中的HOME(家目录)指定为要变更身份的使用者家目录(如不加-u参数就是系统管理者root);

command:要以系统管理者身份(或以-u更改为其他人)执行的命令。

进入/mnt目录后,在终端中输入命令:

978-7-111-55364-9-Chapter01-19.jpg

或在终端输入命令

978-7-111-55364-9-Chapter01-20.jpg

在/mnt目录中创建Downloads目录。

同理,在终端中输入命令在/mnt目录中创建Program目录。

3)查看/mnt目录

查看目录使用ls命令。

功能:执行ls命令可列出目录的内容,包括文件和子目录的名称

参数与格式:

978-7-111-55364-9-Chapter01-21.jpg

参数说明:-1:每列仅显示一个文件或目录名称;

-a或--all:显示所有文件和目录;

-A或--almost-all:显示所有文件和目录,但不显示现行目录和上层目录;

-b或--escape:显示脱离字符;

-B或--ignore-backups:忽略备份文件和目录;

-c:以更改时间排序,显示文件和目录;

-C:以从上至下,从左到右的直行方式显示文件和目录名称;

-d或--directory:显示目录名称而非其内容;

-D或--dired:用Emacs的模式产生文件和目录列表;

-f:此参数的效果和同时指定“aU”参数相同,并关闭“lst”参数的效果;

-F或--classify:在执行文件、目录、Socket、符号连接和管道名称后面,各自加上“*”“/”“=”“@”和“|”号

-g:次参数将忽略不予处理;

-G或--no-group:不显示群组名称;

-h或--human-readable:用“K”“M”“G”来显示文件和目录的大小;

-H或--si:此参数的效果和指定"-h"参数类似,但计算单位是1000Bytes而非1024Bytes;

-i或--inode:显示文件和目录的inode编号;

-I<范本样式>或--ignore=<范本样式>:不显示符合范本样式的文件或目录名称;

-k或--kilobytes:此参数的效果和指定“block-size=1024”参数相同;

-l:使用详细格式列表;

-L或--dereference:如遇到性质为符号连接的文件或目录,直接列出该连接所指向的原始文件或目录;

-m:用“,”号区隔每个文件和目录的名称;

-n或--numeric-uid-gid:以用户识别码和群组识别码替代其名称;

-N或--literal:直接列出文件和目录名称,包括控制字符;

-o:此参数的效果和指定“-l”:参数类似,但不列出群组名称或识别码;

-p或--file-type:此参数的效果和指定“-F”参数类似,但不会在执行文件名称后面加上“*”号;

-q或--hide-control-chars:用“?”号取代控制字符,列出文件和目录名称;

-Q或--quote-name:把文件和目录名称以“”号标示起来;

-r或--reverse:反向排序;

-R或--recursive:递归处理,将指定目录下的所有文件及子目录一并处理;

-s或--size:显示文件和目录的大小,以区块为单位;

-S:用文件和目录的大小排序;

-t:用文件和目录的更改时间排序;

-T<跳格字符>或--tabsize=<跳格字数>:设置跳格字符所对应的空白字符数;

-u:以最后存取时间排序,显示文件和目录;

-U:列出文件和目录名称时不予排序;

-v:文件和目录的名称列表以版本进行排序;

-w<每列字符数>或--width=<每列字符数>:设置每列的最大字符数;

-x:以从左到右,由上至下的横列方式显示文件和目录名称;

-X:以文件和目录的最后一个扩展名排序;

--block-size=<区块大小>:指定存储放文件的区块大小;

--color=<列表格式>:培植文件和目录的列表格式;

--full-time:列出完整的日期与时间;

--help:在线帮助;

--indicator-style=<标注样式>:在文件和目录等名称后面加上标注,易于辨识该名称所属的类型;

--quoting-syte=<引号样式>:把文件和目录名称以指定的引号样式标示起来;

--show-control-chars:在文件和目录列表时,使用控制字符;

--sort=<排序方式>:配置文件和目录列表的排序方式;

--time=<时间戳记>:用指定的时间戳记取代更改时间

--version:显示版本信息。

在终端中输入命令:

978-7-111-55364-9-Chapter01-22.jpg

可以查看创建好的挂载目录如图1-13所示

978-7-111-55364-9-Chapter01-23.jpg

图1-13 挂载目录

3.挂载共享文件夹

挂载共享文件夹需要使用mount命令。

功能:mount命令用来挂载文件系统。

参数与格式:

978-7-111-55364-9-Chapter01-24.jpg

参数说明:-t vfstype:指定文件系统的类型,通常不必指定。mount会自动选择正确的类型。常用的类型有:

iso9660:光盘或光盘镜像;

msdos:DOS fat16文件系统;

vfat:Windows 9x fat32文件系统;

ntfs:Windows NT ntfs文件系统;

smbfs:Mount Windows文件网络共享;

nfs:UNIX(Linux)文件网络共享;

-o options主要用来描述设备或档案的挂接方式。常用的参数有:

loop:用来把一个文件当成硬盘分区挂接上系统;

ro:采用只读方式挂接设备;

rw:采用读写方式挂接设备;

iocharset:指定访问文件系统所用字符集。

device:要挂接(mount)的设备;

dir:设备在系统上的挂接点(mount point)。

在终端中输入命令:

978-7-111-55364-9-Chapter01-25.jpg

这个命令的含义是将文件系统类型为vboxsf、设备名为Downloads的设备挂载到/mnt/Downloads。

可以看出:第一个“Downloads”是之前创建的共享文件夹的名字。在终端中输入命令:

978-7-111-55364-9-Chapter01-26.jpg

进入/mnt/Downloads目录,在终端中输入命令。

978-7-111-55364-9-Chapter01-27.jpg

即可查看已经实现共享的文件(夹),如图1-14所示。

978-7-111-55364-9-Chapter01-28.jpg

图1-14 已经实现共享的文件(夹)

与此同时,Host’s OS共享文件夹中的内容如图1-15所示。

978-7-111-55364-9-Chapter01-29.jpg

图1-15 Host’s OS共享文件夹中的内容

对比图1-14和图1-15可以看出:在ⅤirtualBox中,Host’s OS与Guest OS的共享文件夹中目前只能识别ASCII字符即不能出现中文字符。

4.自动挂载共享文件夹

为了使用方便,一般需要实现开机自动挂载共享文件夹。此时需要编辑/etc/fstab文件。

在终端中输入命令:

978-7-111-55364-9-Chapter01-30.jpg

会出现图1-16所示的编辑/etc/fstab文件界面(gedit为Ubuntu自带的编辑器,类似于Windows中的记事本)。

978-7-111-55364-9-Chapter01-31.jpg

图1-16 编辑/etc/fstab文件

其中,已经默认添加的内容如下所示

978-7-111-55364-9-Chapter01-32.jpg

可以看出:自动安装的文件系统列表的参数可以分为6列,fstab参数的具体说明如表1-1所示。

表1-1fstab参数说明

978-7-111-55364-9-Chapter01-33.jpg

根据参数说明,在图1-16所示的界面中添加如下两项:

978-7-111-55364-9-Chapter01-34.jpg

保存文件并退出,此时重启Ubuntu之后即可实现自动挂载共享文件夹。

1.3.3 交叉编译环境的安装与配置

1.复制交叉编译工具链安装包

本教程采用的交叉编译工具链是arm-linux-gcc-4.4.3,首先将本小节同名文件夹下的arm-linux-gcc-4.4.3.tar.gz文件复制到共享文件Downloads中,紧接着使用cp命令将其复制到/opt目录中。

功能:cp命令用在复制文件或目录。如同时指定两个以上的文件或目录,且最后的目的地是一个已经存在的目录,则它会把前面指定的所有文件或目录复制到该目录中。若同时指定多个文件或目录,而最后的目的地并非是一个已存在的目录,则会出现错误信息。

参数与格式:

cp[-abdfilpPrRsuvx][-S<备份字尾字符串>][-Ⅴ<备份方式>][--help][--spares=<使用时机>][--version][源文件或目录][目标文件或目录][目的目录]

参数说明:-a或--archive:此参数的效果和同时指定“-dpR”参数相同;

-b或--backup:删除、覆盖目标文件之前的备份,备份文件会在字尾加上一个备份字 符串;

-d或--no-dereference:当复制符号连接时,把目标文件或目录也建立为符号连接,并指向与源文件或目录连接的原始文件或目录;

-f或--force:强行复制文件或目录,不论目标文件或目录是否已存在;

-i或--interactive:覆盖既有文件之前先询问用户;

-l或--link:对源文件建立硬连接,而非复制文件;

-p或--preserve:保留源文件或目录的属性;

-P或--parents:保留源文件或目录的路径;

-r:递归处理,将指定目录下的文件与子目录一并处理;

-R或--recursive:递归处理,将指定目录下的所有文件与子目录一并处理;

-s或--symbolic-link:对源文件建立符号连接,而非复制文件;

-S<备份字尾字符串>或--suffix=<备份字尾字符串>:用“-b”参数备份目标文件后,备份文件的字尾会被加上一个备份字符串,预设的备份字尾字符串是符号“~”;

-u或--update:使用这项参数后只会在源文件的更改时间较目标文件更新时或是名称相互对应的目标文件并不存在,才复制文件;

-v或--verbose:显示命令执行过程;

-Ⅴ<备份方式>或--version-control=<备份方式>:用“-b”参数备份目标文件后,备份文件的字尾会被加上一个备份字符串,这字符串不仅可用“-S”参数变更,当使用“-Ⅴ”参数指定不同备份方式时,也会产生不同字尾的备份字串;

-x或--one-file-system:复制的文件或目录存放的文件系统,必须与cp命令执行时所处的文件系统相同,否则不予复制;

--help:在线帮助;

--sparse=<使用时机>:设置保存稀疏文件的时机;

--version:显示版本信息

在终端中输入命令:

978-7-111-55364-9-Chapter01-35.jpg

将arm-linux-gcc-4.4.3.tar.gz文件复制到/opt目录中。进入/opt目录,在终端中输入命令:

978-7-111-55364-9-Chapter01-36.jpg

查看/opt目录,复制交叉编译工具链安装包如图1-17所示

978-7-111-55364-9-Chapter01-37.jpg

图1-17 复制交叉编译工具链安装包

2.解压交叉编译工具链安装包

以.tar.gz为扩展名的是一种压缩文件,即所谓的tarball文件。tarball文件其实就是将软件的所有原始码档案先以tar打包,然后再以压缩技术来压缩,通常最常见的就是以gzip来压缩了。因为利用了tar与gzip的功能,所以tarball档案一般的附档名就会写成.tar.gz或者是简写为.tgz。操作这类文件需要使用tar命令。

功能:tar是用来建立、还原备份文件的工具程序,它可以加入、解开备份文件内的文件。

参数与格式:

978-7-111-55364-9-Chapter01-38.jpg

参数说明:-A或--catenate:新增温暖件到已存在的备份文件。

-b<区块数目>或--blocking-factor=<区块数目>:设置每笔记录的区块数目每个区块大小为12Bytes;

-B或--read-full-records:读取数据时重设区块大小;

-c或--create:建立新的备份文件;

-C<目的目录>或--directory=<目的目录>:切换到指定的目录;

-d或--diff或--compare:对比备份文件内和文件系统上的文件的差异;

-f<备份文件>或--file=<备份文件>:指定备份文件;

-F<Script文件>或--info-script=<Script文件>:每次更换磁带时,就执行指定的Script文件;

-g或--listed-incremental:处理GNU格式的大量备份;

-G或--incremental:处理旧的GNU格式的大量备份;

-h或--dereference:不建立符号连接,直接复制该连接所指向的原始文件;

-i或--ignore-zeros:忽略备份文件中的0:Byte区块,也就是EOF;

-k或--keep-old-files:解开备份文件时,不覆盖已有的文件;

-K<文件>或--starting-file=<文件>:从指定的文件开始还原;

-l或--one-file-system:复制的文件或目录存储的文件系统,必须与tar命令执行时所处的文件系统相同,否则不予复制;

-L<媒体容量>或-tape-length=<媒体容量>:设置存放媒体的容量,单位以1024:Bytes计算;

-m或--modification-time:还原文件时,不变更文件的更改时间;

-M或--multi-volume:在建立,还原备份文件或列出其中的内容时,采用多卷册模式;

-N<日期格式>或--newer=<日期时间>:只将较指定日期更新的文件保存到备份文件里;

-o或--old-archive或--portability:将资料写入备份文件时使用Ⅴ7格式;

-O或--stdout:把从备份文件里还原的文件输出到标准输出设备;

-p或--same-permissions:用原来的文件权限还原文件;

-P或--absolute-names:文件名使用绝对名称,不移除文件名称前的“/”号;

-r或--append:新增文件到已存在的备份文件的结尾部分;

-R或--block-number:列出每个信息在备份文件中的区块编号;

-s或--same-order:还原文件的顺序和备份文件内的存储顺序相同;

-S或--sparse:倘若一个文件内含大量的连续0字节,则将此文件存储成稀疏文件;

-t或--list:列出备份文件的内容;

-T<范本文件>或--files-from=<范本文件>:指定范本文件,其内含有一个或多个范本样式,让tar解开或建立符合设置条件的文件;

-u或--update:仅置换较备份文件内的文件更新的文件;

-U或--unlink-first:解开压缩文件还原文件之前,先解除文件的连接;

-v或--verbose:显示命令执行过程;

-Ⅴ<卷册名称>或--label=<卷册名称>:建立使用指定的卷册名称的备份文件;

-w或--interactive:遭遇问题时先询问用户;

-W或--verify:写入备份文件后,确认文件正确无误;

-x或--extract或--get:从备份文件中还原文件;

-X<范本文件>或--exclude-from=<范本文件>:指定范本文件,其内含有一个或多个范本样式,让ar排除符合设置条件的文件;

-z或--gzip或--ungzip:通过gzip命令处理备份文件;

-Z或--compress或--uncompress:通过compress命令处理备份文件;

-<设备编号><存储密度>:设置备份用的外围设备编号及存储数据的密度;

--after-date=<日期时间>:此参数的效果和指定“-N”参数相同;

--atime-preserve:不变更文件的存取时间;

--backup=<备份方式>或--backup:移除文件前先进行备份;

--checkpoint:读取备份文件时列出目录名称;

--concatenate:此参数的效果和指定“-A”参数相同;

--confirmation:此参数的效果和指定“-w”参数相同;

--delete:从备份文件中删除指定的文件;

--exclude=<范本样式>:排除符合范本样式的文件;

--group=<群组名称>:把加入设备文件中的文件的所属群组设成指定的群组;

--help:在线帮助;

--ignore-failed-read:忽略数据读取错误,不中断程序的执行;

--new-volume-script=<Script文件>:此参数的效果和指定“-F”参数相同;

--newer-mtime:只保存更改过的文件;

--no-recursion:不做递归处理,也就是指定目录下的所有文件及子目录不予处理;

--null:从null设备读取文件名称;

--numeric-owner:以用户识别码及群组识别码取代用户名称和群组名称;

--owner=<用户名称>:把加入备份文件中的文件的拥有者设成指定的用户;

--posix:将数据写入备份文件时使用POSIX格式;

--preserve:此参数的效果和指定“-ps”参数相同;

--preserve-order:此参数的效果和指定“-A”参数相同;

--preserve-permissions:此参数的效果和指定“-p”参数相同;

--record-size=<区块数目>:此参数的效果和指定“-b”参数相同;

--recursive-unlink:解开压缩文件还原目录之前,先解除整个目录下所有文件的连接;

--remove-files:文件加入备份文件后,就将其删除;

--rsh-command=<执行命令>:设置要在远端主机上执行的命令,以取代rsh命令;

--same-owner:尝试以相同的文件拥有者还原;

--suffix=<备份字尾字符串>:移除文件前先行备份;

--totals:备份文件建立后,列出文件大小;

--use-compress-program=<执行命令>:通过指定的命令处理备份文件;

--version:显示版本信息;

--volno-file=<编号文件>:使用指定文件内的编号取代预设的卷册编号。

进入/opt目录,在终端中输入命令:

978-7-111-55364-9-Chapter01-39.jpg

进行解压。解压完成后,在终端中输入命令:

978-7-111-55364-9-Chapter01-40.jpg

查看/opt目录,解压交叉编译工具链安装包如图1-18所示。

978-7-111-55364-9-Chapter01-41.jpg

图1-18 解压交叉编译工具链安装包

为了节省空间,可以使用rm命令将压缩文件删除。

功能:执行rm命令可删除文件或目录,如欲删除目录必须加上参数“-r”,否则预设仅会删除文件。

参数与格式:

978-7-111-55364-9-Chapter01-42.jpg

参数说明:-d或--directory:直接把欲删除的目录的硬连接数据删成0,删除该目录;

-f或--force:强制删除文件或目录;

-i或--interactive:删除既有文件或目录之前先询问用户;

-r或-R或--recursive:递归处理,将指定目录下的所有文件及子目录一并处理

-v或--verbose:显示命令执行过程;

--help:在线帮助;

--version:显示版本信息。在终端中输入命令:

978-7-111-55364-9-Chapter01-43.jpg

可以删除交叉编译工具链安装包。

3.配置交叉编译工具链

在Linux文件中,/etc/profile文件为登录或启动时bourne或cshells执行的文件,这允许系统管理员为所有用户建立全局默认环境。所以配置交叉编译工具工具链,就需要编辑

/etc/profile文件。

在终端中输入命令

978-7-111-55364-9-Chapter01-44.jpg

会出现图1-19所示的编辑/etc/profile文件界面。

978-7-111-55364-9-Chapter01-45.jpg

图1-19 编辑/etc/profile文件

在最后一行添加

978-7-111-55364-9-Chapter01-46.jpg

保存文件并退出,此时注销并重新登录后在终端中输入命令:

978-7-111-55364-9-Chapter01-47.jpg

出现图1-20所示的交叉编译环境配置成信息。

978-7-111-55364-9-Chapter01-48.jpg

图1-20 交叉编译环境配置成功

1.4 Qt简介

Qt是一个1991年由Trolltech(奇趣科技)开发的跨平台C++图形用户界面应用程序开发框架。它既可以开发GUI程序,也可用于开发非GUI程序,例如控制台工具和服务器。Qt是面向对象的框架,使用特殊的代码生成扩展(称为元对象编译器(Meta Object Compiler,MOC))以及一些宏,易于扩展,允许组件编程。

2008年,Trolltech被Nokia公司收购,Qt也因此成为Nokia旗下的编程语言工具。2012年,Qt被Digia收购。

2014年4月,跨平台集成开发环境Qt Creator 3.1.0正式发布,实现了对于iOS的完全支持,新增WinRT、Beautifier等插件,废弃了无Python接口的GDB调试支持,集成了基于Clang的C/C++代码模块,并对Android支持做出了调整,至此实现了全面支持iOS、Android和Windows Phone。

Qt提供给应用程序开发者建立艺术级的图形用户界面所需要的所有功能。Qt很容易扩展,并且允许真正地组件编程。基本上,Qt同X Window上的Motif、GTK等图形界面库和Windows平台上的MFC、OWL、ⅤCL、ATL是同类型的。每个单词或缩写的含义如表1-2所示。

1-2 单词或缩写的含义

978-7-111-55364-9-Chapter01-49.jpg

1.Qt的发行版本

Qt的第一个商业版本于1995年推出。

2008年1月31日,Nokia公司宣布通过公开竞购的方式收购TrollTech公司,旗下包括Qt在内的技术都归入Nokia旗下。并且Nokia针对自己的移动设备平台规划的需要,将Qt按不同的版本发行。

➢Qt商业版:提供给商业软件开发。它们提供传统商业软件发行版并且提供在协议有效期内的免费升级和技术支持服务;

➢Qt开源版:仅仅为了开发自由和开放源码软件,提供了和商业版本同样的功能,GNU通用公共许可证下,它是免费的;

➢Qt专业版和企业版是Qt的商业版本;

➢只有购买了专业版或企业版,才能够编写商业的、私人的或收费的软件。如果购买了这些商业版本,也可以获得技术支持和升级服务。

2009年3月发布的Qt 4.5起,诺基亚为Qt增添开源LGPL授权选择。

2009年5月11日起,Nokia基亚Qt Software宣布Qt源代码库面向公众开放,Qt开发人员可以通过为Qt以及与Qt相关的项目贡献代码、翻译、示例以及其他内容,协助引导和塑造Qt未来的发展。为了便于这些内容的管理,Qt Software启用了基于Git和Gitorious开源项目的Web源代码管理系统。

2.Qt Creator

Qt Creator是一个用于Qt开发的轻量级跨平台集成开发环境。Qt Creator可带来两大关键益处:

➢提供首个专为支持跨平台开发而设计的IDE(集成开发环境);

➢确保首次接触Qt框架的开发人员能迅速上手和操作。

即使不开发Qt应用程序,Qt Creator也是一个简单易用且功能强大的IDE。Qt Creator包含了一套用于创建和测试基于Qt应用程序的高效工具,包括:

➢一个高级的C++代码编辑器;

➢上下文感知帮助系统;

➢可视化调试器;

➢源代码管理;

➢项目和构建管理工具。

Qt Creator在LGPL 2.1版本授权下有效,并且接受代码贡献。

3.Qt Linguist

Qt Linguist被称为Qt语言家。它的主要任务只是读取翻译文件、为翻译人员提供友好的翻译界面,它是用于界面国际化的重要工具。

Linguist工具从4.5开始可以支持Gettext的PO文件格式。

4.Qt开发的知名应用程序

Qt开发的部分知名应用程序如下所示。

➢Autodesk MotionBuilder:三维角色动画软件;

➢Autodesk Maya:3D建模和动画软件;

➢Battle.net:暴雪公司开发的游戏对战平台;

➢Bitcoin:比特币;

➢Google地球(Google Earth):三维虚拟地图软件;

➢Qt Creator:用于Qt开发的轻量级跨平台集成开发环境;

➢Skype:一个使用人数众多的基于P2P的ⅤOIP聊天软件;

➢ⅤirtualBox:虚拟机软件;

➢ⅤLC多媒体播放器:一个体积小巧、功能强大的开源媒体播放器;

➢Xconfig:Linux的Kernel配置工具;

➢咪咕音乐:咪咕音乐是中国移动倾力打造的正版音乐播放器;

➢WPS Office:金山软件公司推出的办公软件;

➢极品飞车:EA公司出品的著名赛车类游戏。

1.5 Qt的安装与配置

1.5.1 g++的安装

在1.4节中介绍Qt是一个C++图形用户界面应用程序开发框架;但是在Ubuntu中并没有默认安装C++编译器,所以需要安装C++编译器。

在Linux中,需要安装的是g++,g++是GNU中的C++编译器。

在Ubuntu中,更新软件使用apt-get命令。

功能:apt-get命令适用于deb包管理式的操作系统,主要用于自动从互联网的软件仓库中搜索、安装、升级、卸载软件或操作系统。apt-get命令一般需要root权限执行,所以一般跟在sudo命令之后使用。

参数与格式:

978-7-111-55364-9-Chapter01-50.jpg

参数说明:apt-get update:更新软件包列表数据库;

apt-get install packagename:安装一个新软件包;

apt-get remove packagename:卸载一个已安装的软件包(保留配置文档);

apt-get remove--purge packagename:卸载一个已安装的软件包(删除配置文档);

apt-get autoremove packagename:删除包及其依赖的软件包;

apt-get autoremove--purge packagname:删除包及其依赖的软件包+配置文件,比上面要删除得彻底一点;

apt-get autoclean:apt-get会把已装或已卸的软件都备份在硬盘上,所以假如需要空间的话,能够让这个命令来删除已删掉的软件;

apt-get clean:这个命令会把安装的软件的备份也删除,但是这样不会影响软件的使用;

apt-get upgrade:可以使用这条命令更新软件包,apt-get upgrade不仅可以从相同版本号的发布版中更新软件包,也可以从新版本号的发布版中更新软件包。注意在运行该命令前应先运行apt-get update更新数据库;

apt-get dist-upgrade:将系统升级到新版本。

在终端中输入命令:

978-7-111-55364-9-Chapter01-51.jpg

此时会在图1-21所示的界面中出现安装提示。选择输入“Y”开始下载g++安装包,当下载完成后,会自动安装g++。

安装完成后在终端中输入命令:

978-7-111-55364-9-Chapter01-52.jpg

出现图1-22所示的g++安装与测试信息,这说明g++已经成功

978-7-111-55364-9-Chapter01-53.jpg

图1-21 g++安装提示

978-7-111-55364-9-Chapter01-54.jpg

图1-22 g++安装与测试

1.5.2 Qt Opensource的安装

1.安装依赖包

如在安装Linux系统时,不是选择安装所有的软件包。在安装完Linux系统后,若再进行软件安装的话,就可能会遇到一些依赖关系的问题,如在安装PHP软件包时,系统就可能会提示一些错误信息,说需要其他的一些软件包的支持。

其实类似的情况在Windows中也会遇到。如有时候安装一些应用软件可能对浏览器的版本会有要求或者要求操作系统的补丁达到SP3以上等。不过在微软操作系统上这种软件依赖关系要比在Linux系统中少见得多,而且处理起来也方便一些。

1)依赖包关系问题的原因。

一是在操作系统安装的时候,没有选择全部的软件包。大部分时候出于安全或者其他方面的原因,Linux系统管理员往往不会选择安装全部的软件包,而只是安装一些运行相关服务所必要的软件包。但是有时候系统管理员可能并不清楚哪些软件包是必须要装的,否则后续的一些服务将无法启动;而那些软件包则是可选的。由于在系统安装的时候很难一下子弄清楚这些内容,故在Linux系统安装完毕后,再部署其他一些软件包的时候,就容易出现这个问题。

二是在Linux服务器上追加其他的一些应用服务时,容易出现类似的问题。不少的软件包其实在Linux安装盘中还没有,需要自己到网上去下。所以,如果要在原先已经部署好的Linux服务器中追加一些应用服务时,很容易出现这个软件包的依赖问题。

2)依赖包关系问题的解决方法。

解决这个软件包的依赖问题的方法有如下几种。

➢根据错误提示信息在安装光盘中寻找;

➢参考官方的文档;

➢从专业网络上查询。

2.Opensource所需的依赖包

根据实际操作和总结,在安装Qt Opensource之前需要安装libX11-dev、libXext-dev、libXtst-dev和libxrender-dev这4个依赖包。

(1)安装libX11-dev依赖包

在终端中输入命令:

978-7-111-55364-9-Chapter01-55.jpg

此时会在图1-23所示的界面中出现安装提示。选择输入“Y”开始下载libX11-dev安装包,当下载完成后,会自动安装libX11-dev,安装完成后的界面如图1-24所示。

978-7-111-55364-9-Chapter01-56.jpg

图1-23 libX11-dev安装提示

978-7-111-55364-9-Chapter01-57.jpg

图1-24 libX11-dev安装完成

2)安装libXext-dev依赖包

在终端中输入命令:

978-7-111-55364-9-Chapter01-58.jpg

此时会在图1-25所示的界面中出现安装提示。选择输入“Y”开始下载libXext-dev安装包,当下载完成后,会自动安装libXext-dev,安装完成后的界面如图1-26所示。

978-7-111-55364-9-Chapter01-59.jpg

图1-25 libXext-dev安装提示

978-7-111-55364-9-Chapter01-60.jpg

图1-26 libXext-dev安装完成

3)安装libXtst-dev依赖包

在终端中输入命令:

978-7-111-55364-9-Chapter01-61.jpg

此时会在图1-27所示的界面中出现安装提示。选择输入“Y”开始下载libXtst-dev安装包,当下载完成后,会自动安装libXtst-dev,安装完成后的界面如图1-28所示。

978-7-111-55364-9-Chapter01-62.jpg

图1-27 libXtst-dev安装提示

978-7-111-55364-9-Chapter01-63.jpg

图1-28 libXtst-dev安装完成

4)安装libxrender-dev依赖包

在终端中输入命令:

978-7-111-55364-9-Chapter01-64.jpg

此时会在图1-29所示的界面中出现安装提示。选择输入“Y”开始下载libxrender-dev安装包,当下载完成后,会自动安装libxrender-dev,安装完成后的界面如图1-30所示。

978-7-111-55364-9-Chapter01-65.jpg

图1-29 libxrender-dev安装提示

978-7-111-55364-9-Chapter01-66.jpg

图1-30 libxrender-dev安装完成

3.安装与配置qt-everywhere-opensource-src-4.8.3

1)复制安装包

在终端中输入命令:

978-7-111-55364-9-Chapter01-67.jpg

将qt-everywhere-opensource-src-4.8.3.tar.gz文件复制到/opt目录中。进入/opt目录,在终端中输入命令:

978-7-111-55364-9-Chapter01-68.jpg

查看/opt目录,复制qt-everywhere-opensource-src-4.8.3安装包如图1-31所示。

978-7-111-55364-9-Chapter01-69.jpg

图1-31 复制qt-everywhere-opensource-src-4.8.3安装包

2)解压缩安装包

进入/opt目录,在终端中输入命令:

978-7-111-55364-9-Chapter01-70.jpg

进行解压。解压完成后,在终端中输入命令:

978-7-111-55364-9-Chapter01-71.jpg

查看/opt目录,qt-everywhere-opensource-4.8.3安装包如图1-32所示。

978-7-111-55364-9-Chapter01-72.jpg

图1-32 解压qt-everywhere-opensource-src-4.8.3安装包

3)配置安装信息

进入/opt/qt-everywhere-opensource-src-4.8.3目录,在终端中输入命令:

978-7-111-55364-9-Chapter01-73.jpg

配置qt-everywhere-opensource-src-4.8.3安装信息,如图1-33所示。

978-7-111-55364-9-Chapter01-74.jpg

图1-33 配置qt-everywhere-opensource-src-4.8.3安装信息

从图1-33中可以看出:qt-everywhere-opensource-src-4.8.3请使用者选择该软件是用于商业版本还是开源版本。

在键盘输入字母“o”选择使用开源版本后会出现是否同意使用GPL,GPL协议如图1-34所示。

978-7-111-55364-9-Chapter01-75.jpg

图1-34 GPL协议

在键盘输入单词“yes”同意GPL后将开始配置安装信息,如图1-35所示。

978-7-111-55364-9-Chapter01-76.jpg

图1-35 配置安装信息

配置安装信息需要5~10min,当配置安装信息完成后,会出现图1-36所示的提示。

978-7-111-55364-9-Chapter01-77.jpg

图1-36 配置安装信息完成

(4)编译

当安装信息配置完成后,就要开始进行编译qt-everywhere-opensource-src-4.8.3了,在终端中输入命令:

978-7-111-55364-9-Chapter01-78.jpg

即可开始编译qt-everywhere-opensource-src-4.8.3,如图1-37所示。

978-7-111-55364-9-Chapter01-79.jpg

图1-37 编译qt-everywhere-opensource-src-4.8.3

编译的过程需要2~6h不等,取决于PC性能。当编译完成后,会出现图1-38所示的提示。

978-7-111-55364-9-Chapter01-80.jpg

图1-38 qt-everywhere-opensource-src-4.8.3编译完成

(5)安装

当编译完成后,就要开始安装qt-everywhere-opensource-src-4.8.3了,在终端中输入命令:

978-7-111-55364-9-Chapter01-81.jpg

即可开始安装qt-everywhere-opensource-src-4.8.3,如图1-39所示。

978-7-111-55364-9-Chapter01-82.jpg

图1-39 安装qt-everywhere-opensource-src-4.8.3

安装的过程需要30~60min,安装完成的界面如图1-40所示。

978-7-111-55364-9-Chapter01-83.jpg

图1-40 qt-everywhere-opensource-src-4.8.3安装完成

(6)配置全局环境

qt-everywhere-opensource-src-4.8.3安装完成后需要配置一下全局环境,其方法和1.3.3小节中介绍的一致。

在/etc/profile文件的最后添加如下代码,如图1-41所示。

978-7-111-55364-9-Chapter01-84.jpg

图1-41 编辑/etc/profile文件

978-7-111-55364-9-Chapter01-85.jpg

保存文件并退出,此时注销并重新登录后在终端中输入命令。

978-7-111-55364-9-Chapter01-86.jpg

出现图1-42所示的信息,这说明qt-everywhere-opensource-src-4.8.3环境信息已经配置成功。

978-7-111-55364-9-Chapter01-87.jpg

图1-42 qt-everywhere-opensource-src-4.8.3环境信息配置成功

1.5.3 嵌入式Qt工具链的安装

1.复制安装包

在终端中输入命令

978-7-111-55364-9-Chapter01-88.jpg

将Qt4.7-arm-4.7.tgz文件复制到/opt目录中。进入/opt目录,在终端中输入命令:

978-7-111-55364-9-Chapter01-89.jpg

查看/opt目录,复制Qt4.7-arm-4.7.tgz安装包如图1-43所示。

978-7-111-55364-9-Chapter01-90.jpg

图1-43 复制Qt4.7-arm-4.7.tgz安装包

2.解压缩安装包

进入/opt目录,在终端中输入命令:

978-7-111-55364-9-Chapter01-91.jpg

进行解压。解压完成后,在终端中输入命令:

978-7-111-55364-9-Chapter01-92.jpg

查看/opt目录,解压Qt4.7-arm-4.7.tgz安装包如图1-44所示。

978-7-111-55364-9-Chapter01-93.jpg

图1-44 解压Qt4.7-arm-4.7.tgz安装包

1.5.4 Qt Creator的安装

1.复制安装文件

在终端中输入命令

978-7-111-55364-9-Chapter01-94.jpg

将qt-creator-linux-x86-opensource-2.5.2.bin安装文件复制到/opt目录中。进入/opt目录在终端中输入命令:

978-7-111-55364-9-Chapter01-95.jpg

查看/opt目录,复制qt-creator-x86-opensource-2.5.2.bin安装文件如图1-45所示。

仔细观察图1-45可以看出:终端中显示的文件(夹)有不同的颜色,一般来说,Linux默认的颜色代表不同的文件(夹)类型:

➢绿色代表的是可执行文件;

➢红色代表的是压缩文件;

➢浅蓝色代表链接文件;

➢蓝色代表的是目录;

➢灰色代表其他文件;

➢其他颜色基本都是权限的提示。

可以看出:qt-creator-linux-x86-opensource-2.5.2.bin是没有可执行权限的。

978-7-111-55364-9-Chapter01-96.jpg

图1-45 复制qt-creator-linux-x86-opensource-2.5.2.bin安装文件

2.添加可执行权限

在Linux中修改文件的可执行权限使用chmod命令。

功能:chmod命令可以变更文件或目录的权限。

参数与格式:

978-7-111-55364-9-Chapter01-97.jpg

参数说明:-c或—changes:效果类似“-v”参数,但仅回报更改的部分;

-f或--quiet或—silent:不显示错误信息;

-R或—recursive:递归处理,将指定目录下的所有文件及子目录一并处理;

-v或—verbose:显示命令执行过程;

--help:在线帮助;

--reference=<参考文件或目录>:把指定文件或目录的权限全部设成和参考文件或目录的权限相同;

--version显示版本信息;

<权限范围>+<权限设置>:开启权限范围的文件或目录的该项权限设置;

<权限范围>-<权限设置>:关闭权限范围的文件或目录的该项权限设置;

<权限范围>=<权限设置>:指定权限范围的文件或目录的该项权限设置。

补充说明:在UNIX系统家族里,文件或目录权限的控制分别以读取、写入和执行3种一般权限来区分,另有3种特殊权限可供运用,再搭配拥有者与所属群组管理权限范围。可以使用chmod命令去变更文件与目录的权限,设置方式采用文字或数字代号皆可。符号连接的权限无法变更,如果您对符号连接修改权限,其改变会作用在被连接的原始文件。权限范围的表示法如下。

➢u:User,即文件或目录的拥有者;

➢g:Group,即文件或目录的所属群组;

➢o:Other,除了文件或目录拥有者或所属群组之外,其他用户皆属于这个范围;

➢a:All,即全部的用户,包含拥有者,所属群组以及其他用户。

有关权限代号的部分说明如下。

➢r:读取权限,数字代号为“4”;

➢w:写入权限,数字代号为“2”;

➢x:执行或切换权限,数字代号为“1”;

➢-:不具任何权限,数字代号为“0”。

此外还可设置第四位,它位于三位权限序列的前面,第四位数字取值是4,2,1,代表意思如下。

➢4:执行时设置用户ID,用于授权给基于文件拥有者的进程,而不是给创建此进程的用户;

➢2:执行时设置用户组ID,用于授权给基于文件所在组的进程,而不是基于创建此进程的用户;

➢1:设置粘着位。

有关chmod的使用举例如下。

➢chmod u+x file:给file的拥有者(u)增加(+)执行(x)的权限;

➢chmod 751 file:给file的拥有者分配读、写、执行(4+2+1)的权限,给file的所在组分配读、执行(4+1)的权限,给其他用户分配执行(1)的权限;

➢chmod u=rwx,g=rx,o=x file:给file的拥有者(u)分配读、写、执行(rwx)的权限,给file的所在组(g)分配读、执行(rx)的权限,给其他用户(o)分配执行(x)的权限;

➢chmod=r file:为所有用户分配读(r)的权限;

➢chmod 444 file:给file的拥有者分配读(4)的权限,给file的所在组分配读(4)的权限,给其他用户分配读(4)的权限,即为所有用户分配读权限;

➢chmod a-wx,a+r file:为所有用户(a)关闭(-)写、执行(wx)的权限,为所有用户(a)添加(+)读(r)的权限;

➢chmod-R u+r directory:递归地给directory目录下所有文件和子目录的拥有者(u)添加(+)读(r)的权限。

在终端中输入命令:

978-7-111-55364-9-Chapter01-98.jpg

给qt-creator-linux-x86-opensource-2.5.2.bin的拥有者分配读、写、执行(4+2+1)的权限,给qt-creator-linux-x86-opensource-2.5.2.bin的所在组分配读、写、执行(4+2+1)的权限,给其他用户分配读、写、执行(4+2+1)的权限。

此时在终端中输入命令:

978-7-111-55364-9-Chapter01-99.jpg

进行查看,可以看出:此时qt-creator-linux-x86-opensource-2.5.2.bin已经是一个可执行文件了,更改权限后的/opt文件夹中的文件如图1-46所示。

978-7-111-55364-9-Chapter01-100.jpg

图1-46 更改权限后的/opt文件夹中的文件

3.安装Qt Creator

进入/opt目录,在终端中输入命令:

978-7-111-55364-9-Chapter01-101.jpg

开始安装Qt Creator,如图1-47所示。

978-7-111-55364-9-Chapter01-102.jpg

图1-47 Qt Creator初始安装界面

单击“Next”按钮,会出现图1-48所示的Licence界面。

978-7-111-55364-9-Chapter01-103.jpg

图1-48 Licence界面

单击“Next”按钮,会出现图1-49所示的安装路径选择界面。

978-7-111-55364-9-Chapter01-104.jpg

图1-49 安装路径选择界面

之后,在弹出界面上单击“Next”按钮,即可完成Qt Creator的安装。

1.5.5 Qt的配置

Qt最重要的配置是构建和运行的配置。

1.设置项目目录

为了便于使用,可以在概要选项卡中将项目目录修改为自定义目录。

在图1-50所示的概要选项卡中单击“浏览…”按钮选择自定义项目路径,如图1-51所示,设置完成的路径如图1-52所示。

978-7-111-55364-9-Chapter01-105.jpg

图1-50 概要选项卡

978-7-111-55364-9-Chapter01-106.jpg

图1-51 选择自定义项目路径

978-7-111-55364-9-Chapter01-107.jpg

图1-52 概要选项卡(设置自定义项目路径)

2.设置Qt版本和工具链

单击打开Qt版本选项卡,如图1-53所示。

从图1-53中可以看出:此时需要手工添加qmake。

978-7-111-55364-9-Chapter01-108.jpg

图1-53 Qt版本选项卡

单击“添加…”按钮,开始添加qmake,其所在路径为/usr/local/Trolltech/Qt-4.8.3/bin如图1-54所示。

978-7-111-55364-9-Chapter01-109.jpg

图1-54 添加qmake

此时添加的是基于x86 Linux版本,因此将其命名为“Qt x86 Linux”,Qt x86 Linux qmake如图1-55所示。

978-7-111-55364-9-Chapter01-110.jpg

图1-55 Qt x86 Linux qmake

再次单击“添加…”按钮,开始添加qmake,此时添加的是基于Embedded Linux版本,因此将其命名为“Qt Embedded Linux”,Qt Embedded Linux qmake如图1-56所示。

978-7-111-55364-9-Chapter01-111.jpg

图1-56 Qt Embedded Linux qmake

对比图1-55和1-56可以看出:Embedded Linux版本的前面有一个红色警告。这是因为x86 Linux版本的qmake已经自动设置了工具链,如图1-57所示。

978-7-111-55364-9-Chapter01-112.jpg

图1-57 Qt x86 Linux版本的工具链

在图1-57所示的界面中单击“Add”下拉框,开始添加Embedded Linux的工具链GCGE,如图1-58所示。

978-7-111-55364-9-Chapter01-113.jpg

图1-58 添加GCGE工具链

此时还需要选取具体的调试工具,单击“浏览…”按钮开始添加GCGE工具链调试工具,其所在路径为:/opt/arm-linux-gcc-4.4.3/bin,如图1-59所示。

978-7-111-55364-9-Chapter01-114.jpg

图1-59 添加GCGE工具链调试工具

当GCGE的工具链设置完成后,Qt也基本设置完成了。

1.6 实训

1.常见的虚拟机软件除了书上介绍的两种外,还有一种,请自行查阅资料。并对这3种虚拟机做一个比较。

2.独立在PC中安装ⅤirtualBox。

3.独立在ⅤirtualBox中安装Ubuntu,并完成共享文件夹的设置。

4.独立在Ubuntu中安装交叉编译工具链arm-linux-gcc-4.4.3,并完成设置工作。

5.请查看你的PC上所安装的软件,列举出采用Qt开发的软件,并查看其是否符合Qt版本要求。

6.独立的在Ubuntu中安装Qt Creator,并完成针对x86 Linux和Embedded Linux编译的配置。

1.7 习题

1.什么是交叉编译?为什么要使用交叉编译?

2.常见的交叉编译工具链有几种?其特点分别是什么

3.宿主机的含义是什么?

4.目标机的含义是什么?

5.谈谈你对Linux中命令行的认识。

6.简述Qt的发展历史。