logo资料库

《嵌入式Linux应用程序开发标准教程》下载12章.pdf

第1页 / 共407页
第2页 / 共407页
第3页 / 共407页
第4页 / 共407页
第5页 / 共407页
第6页 / 共407页
第7页 / 共407页
第8页 / 共407页
资料共407页,剩余部分请下载后查看
《嵌入式Linux应用程序开发标准教程》 完整版PDF(12章全)
第1章 Linux快速入门
第2章 Linux基础命令
第3章 Linux下C编程基础
第4章 嵌入式系统基础
第5章 嵌入式Linux开发环境的搭建
第6章 文件IO编程
第7章 进程控制开发
第8章 进程间通信
第9章 多线程编程
第10章 嵌入式Linux网络编程
第11章 嵌入式Linux设备驱动开发
第12章 Qt图形编程基础
● 华清远见嵌入式(linux+android)长期就业课程介绍
嵌入式长期就业课程
了解真实的华清远见
了解嵌入式课程大纲
高薪就业信息
联系我们
《嵌入式 Linux 应用程序开发标准教程》 作者:华清远见 第 1 章 Linux 快速入门 本章目标 嵌入式 Linux 是以 Linux 为基础的操作系统,只有熟练使用 Linux 系统之后, 才能在嵌入式 Linux 开发领域得心应手。通过本章的学习,读者能够掌握如下内容。 能够独立安装 Linux 操作系统 能够熟练使用 Linux 系统的基本命令 认识 Linux 系统启动过程 能够独立在 Linux 系统中安装软件 能够独立设置 Linux 环境变量 能够独立定制 Linux 服务 1.1 嵌入式 Linux 基础
专业始于专注 卓识源于远见 自由开源软件在嵌入式应用上,受到青睐,Linux 日益成为主流的嵌入式操作系统之一。随着摩托罗拉手 机 A760、IBM 智能型手表 WatchPad、夏普 PDA Zaurus 等一款款高性能“智能数码产品”的出现,以及 Motolola、三星、MontaVista、飞利浦、Nokia、IBM、SUN 等众多国际顶级巨头的加入,嵌入式 Linux 的 队伍越来越庞大了。目前,国外不少大学、研究机构和知名公司都加入了嵌入式 Linux 的开发工作,成熟 的嵌入式 Linux 产品不断涌现。 2004 年全球嵌入式 Linux 市场规模已达 9150 万美元,2005 年有 1.336 亿美元,2006 年有 1.653 亿美元, 2007 年达到 2.011 亿美元,每年平均增长 30%。 究竟是什么原因让嵌入式 Linux 系统发展如此迅速。业界归纳为三大原因︰第一,Linux 在嵌入式系统所 需的实时性、电源管理等核心技术不断发展;第二,国际标准组织(如 OSDL、CELF 等)持续建立嵌入 式 Linux 相关标准,有效解决版本分歧与兼容性问题;第三,业界主导组织、开发厂商等不断推出嵌入式 Linux 相关开发工具、维护系统。 嵌入式 Linux 以年费订阅方式为主,与其他的以产品利润为收入方式的嵌入式系统不同,弹性的捆绑销售 策略,助其成功地逐年提高市场占有率,从 2004 年的 46.8%扩大到 2007 年的 56.4%。 国际有名的嵌入式 Linux 操作系统提供商 Montavista,收购了 PalmSource 的爱可信和奇趣科技等,加强了 对中国市场的投入,并在整个嵌入式操作系统市场中,占据了重要地位。而嵌入式操作系统的领先厂商, 也改变了原来的单一产品路线,开始推出自己的 Linux 软件产品,实现“两条腿走路”。国内的嵌入式软件 厂商也以 Linux 为突破口,纷纷开发各种基于 Linux 的操作系统产品。这些嵌入式 Linux 厂商已经形成了 一个不容忽视的群体。 以下就从 Linux 开始,一层层揭开嵌入式 Linux 的面纱。 1.1.1 Linux 发展概述 简单地说,Linux 是指一套免费使用和自由传播的类 UNIX 操作系统。人们通常所说的 Linux 是 Linus Torvalds 所写的 Linux 操作系统内核。 当时的 Linus 还是芬兰赫尔辛基大学的一名学生,他主修的课程中有一门课是操作系统,而且这门课是专 门研究程序的设计和执行。最后这门课程提供了一种称为 Minix 的初期 UNIX 系统。Minix 是一款仅为教 学而设计的操作系统,而且功能有限。因此,和 Minix 的众多使用者一样,Linus 也希望能给它添加一些 功能。 在之后的几个月里,Linus 根据实际的需要编写了磁盘驱动程序以便下载访问新闻组的文件,又编写了个 文件系统以便能够阅读 Minix 文件系统中的文件。这样,“当你有了任务切换,有了文件系统和设备驱动 程序后,这就是 UNIX,或者至少是其内核。”。于是,0.0.1 版本的 Linux 就诞生了。 Linus 从一开始就决定自由传播 Linux,他把源代码发布在网上,于是,众多的爱好者和程序员也都通过互 联网加入到 Linux 的内核开发工作中。这个思想与 FSF(Free Software Foundation)资助发起的 GNU(GNU’s Not UNIX)的自由软件精神不谋而合。 GNU 是为了推广自由软件的精神以实现一个自由的操作系统,然后从应用程序开始,实现其内核。 而当时 Linux 的优良性能备受 GNU 的赏识,于是 GNU 就决定采用 Linus 及其开发者的内核。在他 们的共同努力下,Linux 这个完整的操作系统诞生了。其中的程序开发共同遵守 General Public License (GPL)协议,这是最开放也是最严格的许可协议方式,这个协议规定了源码必须可以无偿的获取并 且修改。因此,从严格意义上说,Linux 应该叫做 GNU/Linux,其中许多重要的工具如 gcc、gdb、 make、emacs 等都是 GNU 贡献的。 这个“婴儿版”的操作系统以平均两星期更新一次的速度迅速成长,如今的 Linux 已经有超过 250 种发行 版本,且可以支持所有体系结构的处理器,如 X86、PowerPC、ARM、Xscale 等,也可以支持带 MMU 或 不带 MMU 的处理器。到目前为止,它的内核版本也已经从原先的 0.0.1 发展到现在的 2.6.xx。 小 知 自由软件(free software)中的 free 并不是指免费,而是指自由。它赋予使用 者 4 种自由。  自由之 1:有使用软件的自由。 ‐ 2 ‐
专业始于专注 卓识源于远见 识  自由之 2:有研究该软件如何运作的自由,并且得以改写该软件来满足使用 者自身的需求。取得该软件的源码是达成此目的前提。  自由之 3:有重新散布该软件的自由,所以每个人都可以藉由散布自由软件 来敦亲睦邻。  自由之 4:有改善再利用该软件的自由,并且可以发表改写版供公众使用, 如此一来,整个社群都可以受惠。取得该软件的源码是达成此目的前提。 GPL:GPL 协议是 GNU 组织、维护的一种版权协议,遵守这个协议的软件 可以自由地获取、查看、使用其源代码。GPL 协议是整个开源世界的精神 基础。 Linux 的内核版本号: Linux 内核版本号格式是 x.y.zz-www,数字 x 代表版本类型,数字 y 为偶数时 是稳定版本,为奇数时是开发版本,如 2.0.40 为稳定版本,2.3.41 为开发版本, 测试版本为 3 个数字加上测试号,如 2.4.12-rc1。最新的 Linux 内核版本可从 http://www.kernel.org 上获得。 1.1.2 Linux 作为嵌入式操作系统的优势 从 Linux 系统的发展过程可以看出,Linux 从最开始就是一个开放的系统,并且它始终遵循着源代码开放 的原则,它是一个成熟而稳定的网络操作系统,作为嵌入式操作系统有如下优势。 1.低成本开发系统 Linux 的源码开放性允许任何人获取并修改 Linux 的源码。这样一方面大大降低了开发的成本,另一方面 又可以提高开发产品的效率。并且还可以在 Linux 社区中获得支持,用户只需向邮件列表发一封邮件,即 可获得作者的支持。 2.可应用于多种硬件平台 Linux 可支持 X86、PowerPC、ARM、Xscale、MIPS、SH、68K、Alpha、Sparc 等多种体系结构,并且已 经被移植到多种硬件平台。这对于经费、时间受限制的研究与开发项目是很有吸引力的。Linux 采用一个 统一的框架对硬件进行管理,同时从一个硬件平台到另一个硬件平台的改动与上层应用无关。 3.可定制的内核 Linux 具有独特的内核模块机制,它可以根据用户的需要,实时地将某些模块插入到内核中或者从内 核中移走,并能根据嵌入式设备的个性需要量体裁衣。经裁减的 Linux 内核最小可达到 150KB 以下, 尤其适合嵌入式领域中资源受限的实际情况。当前的 2.6 内核加入了许多嵌入式友好特性。 4.性能优异 ‐ 3 ‐
专业始于专注 卓识源于远见 Linux 系统内核精简、高效并且稳定,能够充分发挥硬件的功能,因此它比其他操作系统的运行效率 更高。在个人计算机上使用 Linux,可以将它作为工作站。它也非常适合在嵌入式领域中应用,对比 其他操作系统,它占用的资源更少,运行更稳定,速度更快。 5.良好的网络支持 Linux 是首先实现 TCP/IP 协议栈的操作系统,它的内核结构在网络方面是非常完整的,并提供了对包括十 兆位、百兆位及千兆位的以太网,还有无线网络、Token ring(令牌环)和光纤甚至卫星的支持,这对现在 依赖于网络的嵌入式设备来说无疑是很好的选择。 1.1.3 Linux 发行版本 由于 Linux 属于 GNU 系统,而这个系统采用 GPL 协议,并保证了源代码的公开,于是众多组织或公司在 Linux 内核源代码的基础上进行了一些必要的修改加工,然后再开发一些配套的软件,并把它整合成一个 自己的发布版 Linux。除去非商业组织 Debian 开发的 Debian GNU/Linux 外,美国的 Red Hat 公司发行了 Red Hat Linux,法国的 Mandrake 公司发行了 Mandrake Linux,德国的 SUSE 公司发行了 SUSE Linux,国 内众多公司也发行了中文版的 Linux,如著名的红旗 Linux。Linux 目前已经有超过 250 个发行版本。 下面仅对 Red Hat、Debian、Mandrake 等具有代表性的 Linux 发行版本进行介绍。 1.Red Hat 国内,乃至是全世界的 Linux 用户最熟悉的发行版想必就是 Red Hat 了。Red Hat 最早是由 Bob Young 和 Marc Ewing 在 1995 年创建的。目前 Red Hat 分为两个系列:由 Red Hat 公司提供收费技术支持和更新的 Red Hat Enterprise Linux(RHEL,Red Hat 的企业版),以及由社区开发的免费的桌面版 Fedora Core。 Red Hat 企业版有 3 个版本——AS、ES 和 WS。AS 是其中功能最为强大和完善的版本。而正统的桌面版 Red Hat 版本更新早已停止,最后一版是 Red Hat 9.0。本书就以稳定性高的 RHEL AS 作为安装实例进行讲 解。 官方主页:http://www.redhat.com/。 2.Debian 之所以把 Debian 单独列出,是因为 Debian GNU/Linux 是一个非常特殊的版本。在 1993 年,伊恩·默多克 (Ian Murdock)发起 Debian 计划,它的开发模式和 Linux 及其他开放性源代码操作系统的精神一样,都 是由超过 800 位志愿者通过互联网合作开发而成的。一直以来,Debian GNU/Linux 被认为是最正宗的 Linux 发行版本,而且它是一个完全免费、高质量的且与 UNIX 兼容的操作系统。 Debian 系统分为 3 个版本,分别为稳定版(Stable)、测试版(Testing)和不稳定版(Unstable)。每次发布 的版本都是稳定版,而测试版在经过一段时间的测试证明没有问题后会成为新的稳定版。Debian 拥有超过 8710 种不同的软件,每一种软件都是自由的,而且有非常方便的升级安装指令,基本囊括了用户的所有需 要。Debian 也是最受欢迎的嵌入式 Linux 之一。 官方主页:http://www.debian.org/。 3.国内的发行版本及其他 ‐ 4 ‐
专业始于专注 卓识源于远见 目前国内的红旗、新华等都发行了自己的 Linux 版本。 除了前面所提到的这些版本外,业界还存在着诸如 gentoo、LFS 等适合专业人士使用的版本。在此不做介 绍,有兴趣的读者可以自行查找相关的资料做进一步的了解。 1.1.4 如何学习 Linux 正如人们常说的“实践出真知”,学习 Linux 的过程也一样。只有通过大量的动手实践才能真正地领会 Linux 的精髓,才能迅速掌握在 Linux 上的应用开发,相信有编程语言经验的读者一定会认同这一点。因此,在 本书中笔者安排了大量的实验环节和课后实践环节,希望读者尽可能多参与。 另外要指出的是,互联网也是一个很好的学习工具,一定要充分地加以利用。正如编程一样,实践的过程中总 会出现多种多样的问题,笔者在写作的过程当中会尽可能地考虑可能出现的问题,但限于篇幅和读者的实际情 况,不可能考虑到所有可能出现的问题,所以希望读者能充分利用互联网这一共享的天空,在其中寻找答案。 以下列出了国内的一些 Linux 论坛: http://www.linuxfans.org http://www.linuxforum.net/ http://www.linuxeden.com/forum/ http://www.newsmth.net 1.2 Linux 安装 有了一个初步的了解后,读者是否想亲自试一下?其实安装 Linux 是一件很容易的事情,不过在开始安装 之前,还需要了解一下在 Linux 安装过程中可能遇到的一些基本知识以及它与 Windows 的区别。 1.2.1 基础概念 1.文件系统、分区和挂载 文件系统是指操作系统中与管理文件有关的软件和数据。Linux 的文件系统和 Windows 中的文件系统有很 大的区别,Windows 文件系统是以驱动器的盘符为基础的,而且每一个目录与相应的分区对应,例如 “E:\workplace”是指此文件在 E 盘这个分区下。而 Linux 恰好相反,文件系统是一棵文件树,且它的所有 文件和外部设备(如硬盘、光驱等)都是以文件的形式挂在这个文件树上,例如“/usr/local”。对于 Windows 而言,就是指所有分区都是在一些目录下。总之,在 Windows 下,目录结构属于分区;Linux 下,分区属 于目录结构。其关系如图 1.1 和图 1.2 所示。 图 1.1 Linux 下目录与分区关系 图 1.2 Windows 下目录与分区关系图 因此,在 Linux 中把每一个分区和某一个目录对应,以后再对这个目录的操作就是对这个分区的操作,这 样就实现了硬件管理手段和软件目录管理手段的统一。这个把分区和目录对应的过程叫做挂载(Mount), 而这个挂载在文件树中的位置就是挂载点。这种对应关系可以由用户随时中断和改变。 想一想 Linux 文件系统的挂载特性给用户能带来怎样的好处呢? ‐ 5 ‐
专业始于专注 卓识源于远见 2.主分区、扩展分区和逻辑分区 硬盘分区是针对一个硬盘进行操作的,它可以分为:主分区、扩展分区、逻辑分区。其中主分区就是包含 操作系统启动所必需的文件和数据的硬盘分区,要在硬盘上安装操作系统,则该硬盘必须要有一个主分区, 而且其主分区的数量可以是 1~3 个;扩展分区也就是除主分区外的分区,但它不能直接使用,必须再将 它划分为若干个逻辑分区才可使用,其数量可以有 0 或 1 个;而逻辑分区则在数量上没有什么限制。它们 的关系如图 1.3 所示。 一般而言,对于先装了 Windows 的用户,Windows 的 C 盘是装在主分区上的,可以把 Linux 安装在另一个 主分区或者扩展分区上。为了安装方便安全起见,一般采用把 Linux 装在多余的逻辑分区上,如图 1.4 所 示。 图 1.3 Linux 下主分区、扩展分区、逻辑分区示意图 图 1.4 Linux 安装的分区示意图 通常,在 Windows 下的盘符和 Linux 设备文件的对应关系如下: C 盘—/dev/hda1(主分区) D 盘—/dev/hda5(逻辑分区) E 盘—/dev/hda6(逻辑分区) 小知识 3.SWAP 交换分区 在硬件条件有限的情况下,为了运行大型的程序,Linux 在硬盘上划出一个区域来当作临时的内存, 而 Windows 操作系统把这个区域叫做虚拟内存,Linux 把它叫做交换分区 swap。在安装 Linux 建立 交换分区时,一般将其设为内存大小的 2 倍,当然也可以设为更大。 4.分区格式 不同的操作系统选择了不同的格式,同一种操作系统也可能支持多种格式。微软公司的 Windows 就选择了 FAT32、NTFS 两种格式,但是 Windows 不支持 Linux 上常见的分区格式。Linux 是一个开放的操作系统, 它最初使用 EXT2 格式,后来使用 EXT3 格式,但是它同时支持非常多的分区格式,包括很多大型机上 UNIX 使用的 XFS 格式,也包括微软公司的 FAT 以及 NTFS 格式。 5.GRUB GRUB 是一种引导装入器(类似在嵌入式中非常重要的 bootloader),它负责装入内核并引导 Linux 系统, 位于硬盘的起始部分。由于 GRUB 多方面的优越性,如今的 Linux 一般都默认采用 GRUB 来引导 Linux 操作系统。但事实上它还可以引导 Windows 等多种操作系统。 ‐ 6 ‐
专业始于专注 卓识源于远见 在安装了 Windows 和 Linux 双系统后,系统是以 Linux 的 GRUB 作为引导装入器 来选择启动 Windows 或 Linux 的,因此,若此时直接在 Windows 下把 Linux 的分 区删除,会导致系统因没有引导装入器而无法启动 Windows,这点要格外小心。 小知识 6.root 权限 Linux 也是一个多用户的系统(在这一点上类似 Windows XP),不同的用户和用户组会有不同的权限,其中 把具有超级权限的用户称为 root 用户。root 的默认主目录在“/root”下,而其他普通用户的目录则在“/home” 下。root 的权限极高,它甚至可以修改 Linux 的内核,因此建议初学者要慎用 root 权限,不然一个小小的参 数设置错误很有可能导致系统的严重问题。 1.2.2 硬件需求 Linux 对硬件的需求非常低。如果要是只想在字符方式下运行,那么一台 386 的计算机已经可以用来安装 Linux 了;如果想运行 X-Windows,那也只需要一台 16MB 内存、600MB 硬盘的 486 计算机即可。这听起 来比那些需要 256MB 内存、2.0GBHz 的操作系统要好得多,事实上也正是如此。 现在软件和硬件行业的趋势是让用户购买更快的计算机,不断扩充内存和硬盘,而 Linux 却不受这个趋势的影 响。随着 Linux 的发展,由于在其上运行的软件越来越多,因此它所需要的配置越来越高,但是用户可以有选 择地安装软件,从而节省资源。既可以运行在 Pentium 4 处理器上,也可以运行在 400MHz 的 Pentium II 上, 甚至如果用户需要,也可以在只有文本界面的更低配置的机器上运行。由此可见 Linux 非常适合需求各异的嵌 入式硬件平台。而且 Linux 可以很好地支持标准配件。如果用户的计算机是采用标准配件,那么运行 Linux 应 该没有任何问题。 1.2.3 安装准备 在开始安装之前,首先需要了解一下机器的硬件配置,包括以下几个问题。 (1)有几个硬盘,每个硬盘的大小,如果有两个以上的硬盘哪个是主盘。 (2)内存有多大。 (3)显卡的厂家和型号,有多大的显存。 (4)显示器的厂家和型号。 (5)鼠标的类型。 如果用户的计算机需要联网,那么还需要注意以下问题。 (1)计算机的 IP 地址、子网掩码、网关、DNS 的地址、主机名。 (2)有的时候还需要搞清楚网卡的型号和厂商。 如果不确定系统对硬件的兼容性,或者想了解 Linux 是否支持一些比较新或不常见的硬件,用户可以到 http://hardware.redhat.com 和 http://xfree86.org 进行查询。 其次,用户可以选择从网络安装(如果带宽够大,笔者推荐从商家手中购买 Linux 的安装盘,一般会获得 相应的产品手册、售后服务和众多附赠的商业软件),也可以从他人那里复制,放心,这是合法的,因为 Linux 是 免费 的 。 如 果 用 户 需 要 获 得 最 新 的 , 或 需 要 一 个 不 易 于 购 买 到 的 版 本 , 那 么 用 户 可 以 从 http://www.Linuxiso.org 下载一个需要的 Linux 版本。 最后,应在安装前确认磁盘上是否有足够的空间,一般的发行版本全部安装需要 3GB 左右,最小安装可以 到数十兆字节,当然还需要给未来的使用留下足够的空间。如果用户拥有的是一个已经分区的空闲空间, 那么可以选择在安装前在 Windows 下删除相应分区,也可以选择在安装时删除。 1.3 Linux 文件及文件系统 ‐ 7 ‐
专业始于专注 卓识源于远见 在安装完 Linux 之后,下面先对 Linux 中一些非常重要的概念做一些介绍,以便进一步学习使用 Linux。 1.3.1 文件类型及文件属性 1.文件类型 Linux 中的文件类型与 Windows 有显著的区别,其中最显著的区别在于 Linux 对目录和设备都当作文件来 进行处理,这样就简化了对各种不同类型设备的处理,提高了效率。Linux 中主要的文件类型分为 4 种: 普通文件、目录文件、链接文件和设备文件。 (1)普通文件。 普通文件同 Windows 中的文件一样,是用户日常使用最多的文件。它包括文本文件、shell 脚本(shell 的 概念在第 2 章会进行讲解)、二进制的可执行程序和各种类型的数据。 (2)目录文件。 在 Linux 中,目录也是文件,它们包含文件名和子目录名以及指向那些文件和子目录的指针。目录文件是 Linux 中存储文件名的惟一地方,当把文件和目录相对应起来时,也就是用指针将其链接起来之后,就构 成了目录文件。因此,在对目录文件进行操作时,一般不涉及对文件内容的操作,而只是对目录名和文件 名的对应关系进行操作。 另外,Linux 系统中的每个文件都被赋予惟一的数值,而这个数值被称作索引节点。索引节点存储在一个 称作索引节点表(Inode Table)中,该表在磁盘格式化时被分配。每个实际的磁盘或分区都有自己的索引 节点表。一个索引节点包含文件的所有信息,包括磁盘上数据的地址和文件类型。 Linux 文件系统把索引节点号 1 赋予根目录,这也就是 Linux 的根目录文件在磁盘上的地址。根目录文件 包括文件名、目录名及它们各自的索引节点号的列表,Linux 可以通过查找从根目录开始的一个目录链来 找到系统中的任何文件。 Linux 通过目录链接来实现对整个文件系统的操作。比如,把文件从一个磁盘目录移到另一实际磁盘的目录 时(实际上是通过读取索引节点表来检测这种动作的),这时,原先文件的磁盘索引号被删除,在新磁盘上 建立相应的索引节点。它们之间的相应关系如图 1.5 所示。 图 1.5 目录文件与索引节点关系 (3)链接文件。 链接文件有些类似于 Windows 中的“快捷方式”,但是它的功能更为强大。它可以实现对不同的目录、文 件系统甚至是不同的机器上的文件直接访问,并且不必重新占用磁盘空间。 (4)设备文件。 Linux 把设备都当作文件一样来进行操作,这样就大大方便了用户的使用(在后面的 Linux 编程中可以更 为明显地看出)。在 Linux 下与设备相关的文件一般都在/dev 目录下,它包括两种,一种是块设备文件,另 一种是字符设备文件。  块设备文件是指数据的读写,它们是以块(如由柱面和扇区编址的块)为单位的设备,最简单的 如硬盘(/dev/hda1)等。  字符设备主要是指串行端口的接口设备。 2.文件属性 ‐ 8 ‐
分享到:
收藏