嵌入式Linux C语言应用开发教程(移动学习版 第2版)(txt+pdf+epub+mobi电子书下载)


发布时间:2020-08-08 03:18:19

点击下载

作者:华清远见嵌入式学院 刘洪涛 苗德行 高明旭 刘宗鑫

出版社:人民邮电出版社

格式: AZW3, DOCX, EPUB, MOBI, PDF, TXT

嵌入式Linux C语言应用开发教程(移动学习版 第2版)

嵌入式Linux C语言应用开发教程(移动学习版 第2版)试读:

前言

在社会日益信息化的今天,计算机和网络的应用已经全面渗透到日常生活中。应用嵌入式系统的电子产品随处可见,如人们平常使用的手机、摄像机、医疗仪器、汽车。在发达国家,每个家庭平均拥有255个嵌入式系统,如每辆汽车平均装有35个嵌入式系统。嵌入式系统的应用广泛进入工业、军事、宇宙、通信、运输、金融、医疗、气象、农业等众多领域。

本书以ARM Cortex-A9处理器作为硬件平台,以嵌入式Linux为软件平台、以C语言为开发语言,介绍了嵌入式系统开发的主要环节。本书重点讲解了嵌入式Linux应用开发的基本概念和核心理论,同时结合大量代码实例帮助读者理解和应用相关的概念和理论。突出理论重点,重视实践应用是贯穿本书的理念。

本书三大特色如下。(1)提供丰富案例,搭配优质实验内容。(2)赠送全套教学辅助资源,包括PPT课件、源代码、相关文档等。读者可登录人邮教育社区(www.ryjiaoyu.com)免费下载。(3)全新升级移动学习版,读者可扫描书中二维码,观看微课视频。

本书共10章,下表为本书教学建议学时表:

本书的出版要感谢华清远见嵌入式培训中心的无私帮助。本书的前期组织和后期审校工作都凝聚了培训中心多位老师的心血,他们认真阅读了书稿,提出了大量中肯的建议,并帮助纠正了书稿中的很多错误。

本书由刘洪涛审定写作提纲,苗德行、高明旭和刘宗鑫编写。另外本书的编写得到了华清远见房烨明、董鹏杰等多名员工的帮助,是他们的帮助使本书得以出版,我们向他们致以诚挚的谢意。由于作者水平所限,书中不妥之处在所难免,恳请读者批评指正。编者2017年10月平台支撑

创客学院(www.makeru.com.cn)是一家IT职业在线教育平台,由国内高端IT培训领导品牌华清远见教育集团鼎力打造。学院依托于华清远见教育集团在高端IT培训行业积累的十多年教学及研发经验,以及上百位优秀讲师资源,专注为用户提供高端、前沿的IT开发技术培训课程。以就业为导向,以提高开发能力为目标,努力让每一位用户在这里学到真本领,为用户成为嵌入式、物联网、智能硬件时代的技术专家助力!

一、我们致力于这样的发展理念

我们有一种情怀:为中国、为世界智能化变革的发展培养更多的优秀人才。

我们有一种坚持:坚持做专业教育、做良心教育、做受人尊敬的职业教育。

我们有一种变革:在互联网高速发展的时代,打造“互联网+教育”模式下的IT人才终身学习教学体系。

二、我们致力于提供这样的学习方式

1.多元化的课程学习体系(1)学习模式的多元化。您可以根据自身的实际情况选择3种学习模式,即在线学习、线下报班学习、线上线下结合式学习。每一种模式都有专业的学习路线指导,并有辅导老师悉心答疑,对于学完整套课程的同学有高薪就业职位推荐。(2)学习内容的多元化。我们提供基础知识课程、会员提升课程、流行技术精品套餐课程、就业直通车课程、职业成长课程等丰富的课程体系。不管您是职场“小白”,还是IT从业人员,都可以在这里找到您的学习路线。(3)直播课程的多元化。包括基础类、技术问答类、IT人的职业素养类、IT企业的面试技巧类、IT人的职业发展规划类、智能硬件产品解析类。

2.大数据支撑下的过程化学习模式(1)自主学习课程。我们提供习题练习模式支持您的学习,每章学习完成后都有配套的练习题助您检验学习成果,整个课程学习完成后,系统会自动根据您的答题情况,分析出您对课程的整体掌握程度,帮助您随时掌握自身学习情况。(2)报班模式下的学习课程。系统会根据您选取的班级,为您制定详细的阶段化学习路线,学习路线采用游戏通关模式,课程章节有考核测验、课程有综合检验、每阶段有项目开发任务。学习过程全程通过大数据进行数据分析,帮助您与班主任随时了解您的课程学习掌握程度,班主任会定期根据您的学习情况开放直播课程,为您的薄弱环节进行细致讲解,考核不合格则无法通过关卡进入下一个环节。

三、我们致力于提供这样的服务保障

1.与企业岗位的无缝对接(1)在线课程经过企业实体培训检验。华清远见是国内最早的高端IT定制培训服务机构,在业界享有盛誉。每年我们都会为不同的企业“量身订制”满足企业需求的高端企业内训课程,曾先后为Intel、松下、通用电器、摩托罗拉、ST意法半导体、三星、华为、大唐电信等众多知名企业进行员工内训。(2)拥有独立的自主研发中心。研发中心为开发和培训提供技术和产品支持,已经研发多款智能硬件产品、实验平台、实验箱等设备,并与中南大学、中国科学技术大学等高校共建嵌入式、物联网实验室。目前已经公开出版80多本教材,深受读者的欢迎。(3)平台提供企业招聘通道。学员可在线将自己的学习成果全部展现给企业HR,增加进入大型企业的机会。众多合作企业定期发布人才需求,还有企业上门招聘,全国11大城市就业推荐。

2.丰富的课程资源

创客学院紧跟市场需求,全新录制高质量课程,深入讲解当下热门的开发技术,包括8大IT职业课程:嵌入式、物联网、Java EE、WEB全栈、VR/AR、Android、iOS、UI设计;希望我们的课程能帮您抓住智能硬件时代的发展机遇,打开更广阔的职业发展空间。

3.强大的师资团队

由华清远见金牌讲师团队+技术开发“大牛”组成的上百人讲师团队,有着丰富的开发与培训经验,其中不乏行业专家和企业项目核心开发者。

4.便捷的学习方式

下载学院APP学习,不论您是在学校、家里还是外面,都可以随时随地学习。与教材配套使用,利用碎片时间学习,提升求职就业竞争力!

5.超值的会员福利

会员可免费观看学院70%的课程,还可优先参加直播课程、新课程上线抢先试学、学习积分翻倍等活动,并有机会免费参加线下体验课。

四、我们期待您的加入

欢迎关注创客学院官网www.makeru.com.cn,见证我们的成长。期待您的加入,愿与您一起打造未来IT人的终身化学习体系。加入创客学院读者QQ群201030910,获得更多资源与服务。

本书配套课程视频观看方法:注册创客学院,手机扫描二维码即可观看课程视频;或在计算机上搜索书名,查找配套课程视频。使用说明

第一步:注册创客学院学习账号

使用微信扫描如下二维码,注册(登录)创客学院账号。

第二步:“教、学、练”一体化

注册(登录)账号后,即可开始学习。用户可享受10000+海量视频,VIP精品课,配套视频教程观看等服务。还可以下载课程相关资料辅助学习,在评论区提问互动,讲师会为你7×12小时答疑解惑。在线视频资料下载讲师答疑

第三步:课后习题训练

每个小章节的最后都配备了丰富的课后练习题让读者进行自测,以验证学习效果。自测完成后可扫码加入学习群查看习题答案,还能与其他同学交流沟通,预约讲师1对1辅导。第1章嵌入式系统基础

本章主要介绍嵌入式系统开发的基本知识,学习完本章内容,读者会对嵌入式系统的基础知识、软硬件开发平台以及嵌入式系统开发有一个整体性的理解。本章主要内容:

● 嵌入式系统概述;

● ARM处理器开发平台;

● 嵌入式软件开发流程。1.1 嵌入式系统概述1.1.1 嵌入式系统的基本概念

在社会日益信息化的今天,计算机和网络的应用已经全面渗透到日常生活中。应用嵌入式系统的电子产品随处可见,如日常使用的手机、摄像机、医疗仪器、汽车,乃至工业控制、航天、航空等设备都要用到嵌入式系统。在一些发达国家,平均每个家庭拥有255个嵌入式系统,如每辆汽车平均装有35个嵌入式系统。嵌入式系统的应用已涉及工业、军事、宇宙、通信、运输、金融、医疗、气象、农业等众多领域。

在嵌入式系统行业内有一个被普遍接受的定义:嵌入式系统是以应用为中心,以计算机控制系统为基础,并且软硬件可裁剪,适用于应用系统对功能、可靠性、成本、体积、功耗有严格要求的专用计算机系统。笔者认为,将一套计算机控制系统嵌入已具有某种完整的特定功能的系统内,以实现对原有系统的计算机控制,此时将这个计算机控制系统叫作嵌入式系统。简单地说,嵌入式系统就是被嵌入电子设备中的专用计算系统。

嵌入式系统通常由特定功能模块和计算机控制模块组成,主要由嵌入式微处理器、外围硬件设备、嵌入式操作系统以及用户应用软件等部分组成。它具有“嵌入性”“专用性”与“计算机系统”三个基本要素。嵌入式系统的特点如下。(1)面向特定应用。嵌入式系统与通用型系统的最大区别就在于嵌入式系统大多工作在为特定用户群设计的系统中,因此它通常都具有功耗低、体积小、集成度高等特点,并且可以满足不同应用的特定需求。(2)嵌入式系统的硬件和软件都必须进行高效的设计,量体裁衣、去除冗余,力争在同样的硅片面积上实现更高的性能,这样才能在具体应用中对处理器的选择更具有竞争力。(3)嵌入式系统是将先进的计算机技术、半导体技术和电子技术与各个行业的具体应用相结合后的产物。这一点就决定了它必然是一个技术密集、资金密集、不断创新的知识集成系统,从事嵌入式系统开发的人才也必须是复合型人才。(4)为了提高执行速度和系统可靠性,嵌入式系统中的软件一般都固化在存储器芯片中或单片机本身,而不是存储于磁盘中。(5)嵌入式开发的软件代码尤其要求高质量、高可靠性,由于嵌入式设备往往是处在无人值守或条件恶劣的环境中,因此,对其代码必须有更高的要求。(6)嵌入式系统本身不具备二次开发功能,即设计完成后,用户通常不能在该平台上直接修改程序,必须有一套开发工具和环境才能进行再次开发。1.1.2 嵌入式系统的体系结构

嵌入式系统是一类特殊的计算机系统,一般包括硬件设备、嵌入式操作系统和应用软件。它们之间的关系如图1.1所示。

硬件设备包括嵌入式处理器和外围设备。其中的嵌入式处理器(CPU)是嵌入式系统的核心部分,它与通用处理器最大的区别在于,嵌入式处理器大多工作在为特定用户群专门设计的系统中,它将通用处理器中许多由板卡完成的任务集成到芯片内部,从而有利于嵌入式系统在设计时趋于小型化,同时还具有很高的效率和可靠性。如今,全世界的嵌入式处理器已经超过1 000多种,流行的体系结构有30多个系列,其中以ARM、Power PC、MC 68000、MIPS等使用得最为广泛。图1.1 嵌入式系统的组成

外围设备是指嵌入式系统中用于完成存储、通信、调试、显示等辅助功能的其他部件。目前常用的嵌入式外围设备按功能可以分为存储设备(如RAM、SRAM、Flash等)、通信设备(如RS-232接口、SPI接口、以太网接口、USB接口、无线通信等)和显示设备(如显示屏等)3类。

嵌入式操作系统不仅具有通用操作系统的一般功能,如向上提供对用户的接口(如图形界面、库函数API等),向下提供与硬件设备交互的接口(硬件驱动程序等),管理复杂的系统资源,同时,它还在系统实时性、硬件依赖性、软件固化性以及应用专用性等方面,具有更加鲜明的特点。

应用软件是针对特定应用领域,基于某一固定的硬件平台,用来达到用户预期目标的计算机软件。嵌入式系统自身的特点,决定了嵌入式应用软件不仅要求满足准确性、实时性、安全性和稳定性等方面需要,而且要尽可能地优化代码,以减少对系统资源的消耗,降低硬件成本。1.1.3 几种常用的嵌入式操作系统

1.嵌入式Linux

嵌入式Linux(Embedded Linux)是指对标准Linux经过小型化裁剪处理之后,能够固化在容量只有几KB或者几MB的存储器芯片或者单片机中,适合于特定嵌入式应用场合的专用Linux操作系统。在目前已经开发成功的嵌入式系统中,大约有一半使用Linux。这与它自身的优良特性是分不开的。

嵌入式Linux同Linux一样,具有低成本、多种硬件平台支持、优异的性能和良好的网络支持等优点。另外,为了更好地适应嵌入式领域的开发,嵌入式Linux还在Linux基础上做了部分改进,介绍如下。(1)改善内核结构

Linux内核采用的是整体式结构(Monolithic),整个内核是一个单独的、非常大的程序,这样虽然能够使系统的各个部分直接沟通,提高系统响应速度,但与嵌入式系统存储容量小、资源有限的特点不相符。因此,嵌入式系统经常采用的是另一种称为微内核(Microkernel)的体系结构,即内核本身只提供一些最基本的操作系统功能,如任务调度、内存管理、中断处理等,而类似于设备驱动、文件系统和网络协议等附加功能则可以根据实际需要进行取舍。这样就大大减小了内核的体积,便于维护和移植。(2)提高系统实时性

由于现有的Linux是一个通用的操作系统,虽然它也采用了许多技术来加快系统的运行和响应速度,但从本质上来说并不是一个嵌入式实时操作系统。因此,利用Linux作为底层操作系统,在其上进行实时化改造,从而构建出一个具有实时处理能力的嵌入式系统,如RT-Linux已经成功地应用于航天飞机的空间数据采集、科学仪器测控和电影特技图像处理等各种领域。

嵌入式Linux同Linux一样,也有众多的版本,其中不同的版本分别针对不同的需要在内核等方面加入了特定的机制。嵌入式Linux的主要版本如表1.1所示。表1.1 嵌入式Linux的主要版本

为了不失一般性,本书所用的嵌入式Linux是标准内核裁减的Linux,而不是表1.1中的任何一种。

2.μC/OS-II

μC/OS-II是一种免费公开源代码、结构小巧、基于优先级的可抢先的硬实时内核。自从1992年问世以来,在世界各地应用广泛,它是一种专门为嵌入式设备设计的内核,目前已经被移植到40多种不同结构的CPU上,运行在8~64位的各种系统之上。尤其值得一提的是,该系统自从2.51版本之后,就通过了美国FAA认证,可以运行在诸如航天器等对安全要求极为苛刻的系统之上。鉴于μC/OS-II可以免费获得代码,对于嵌入式RTOS而言,选择μC/OS无疑是最经济的。

μC/OS-II主要适合小型实时控制系统,具有执行效率高、占用空间小、实时性能优良和可扩展性强等优点。最小内核可编译至2KB,如果包含内核的全部功能,编译之后的μC/OS-II内核仅有6KB~10KB。

μC/OS-II的源代码结构合理、清晰易读,不仅成功应用在众多的商业项目中,而且被很多大学采纳,作为教学的范例,同时也是嵌入式工程师学习和提高的绝好材料。

3.Vx Works

Vx Works操作系统是美国Wind River公司于1983年设计开发的一种嵌入式实时操作系统(RTOS),它是当前市场占有率很高的嵌入式操作系统之一。Vx Works的实时性做得非常好,其系统本身的开销很小,进程调度、进程间通信、中断处理等系统公用程序精练而有效,这使得它们造成的延迟很短。另外Vx Works提供的多任务机制,对任务的控制采用了优先级抢占(Linux 2.6内核也采用了优先级抢占的机制)和轮转调度机制,这充分保证了可靠的实时性,并使同样的硬件配置能满足更强的实时性要求。另外Vx Works具有高度的可靠性,从而保证了用户工作环境的稳定。同时,Vx Works还有完备强大的集成开发环境,这也大大方便了用户的使用。

但是,Vx Works的开发和使用都需要交纳高额的专利费,大大增加了用户的开发成本。同时, Vx Works的源码不公开造成它部分功能的更新(如网络功能模块)滞后。

4.Windows CE

Windows CE是微软开发的一个开放的、可升级的32位嵌入式操作系统,是基于掌上型计算机类的电子设备操作系统。Windows CE的图形用户界面相当出色。Windows CE具有模块化、结构化和基于Win32应用程序接口以及与处理器无关等特点。它不仅继承了传统的Windows图形界面,并且用户在Windows CE平台上可以使用Windows上的编程工具(如Visual Studio等),也可以使用同样的函数和同样的界面风格,这使大多数Windows上的应用软件只需简单地修改和移植,就可以在Windows CE平台上继续使用。1.1.4 嵌入式系统发展趋势

1.提供强大的网络服务

为适应嵌入式分布处理结构和应用上网需求,面向21世纪的嵌入式系统要求配备标准的一种或多种网络通信接口。针对外部联网要求,嵌入设备必须配有通信接口,相应需要TCP/IP协议簇软件支持;为满足家用电器相互关联(如防盗报警、灯光能源控制、影视设备和信息终端交换信息等)及实验现场仪器的协调工作等要求,新一代嵌入式设备还需具备IEEE 1394、USB、CAN、Bluetooth或Ir DA通信接口,同时也需要提供相应的通信组网协议软件和物理层驱动软件。为了支持应用软件的特定编程模式,如Web或无线Web编程模式,还需要相应的浏览器,如HTML浏览器、WML浏览器等。

2.小型化、低成本、低功耗

为满足这种特性,要求嵌入式产品设计者相应降低处理器的性能,限制内存容量和复用接口芯片。这就相应提高了对嵌入式软件设计技术的要求,如选用最佳的编程模型和不断改进算法,采用Java编程模式,优化编译器性能等。因此,既需要软件人员具有丰富的开发经验,也需要发展先进的嵌入式软件技术,如Java、Web和WAP等。

3.人性化的人机界面

用户之所以乐于接受嵌入式设备,其重要因素之一是它们与使用者之间的亲和力。它具有自然的人机交互界面,如司机操纵高度自动化的汽车主要还是通过已使用习惯的方向盘、脚踏板和操纵杆。人们与信息终端交互要求以GUI屏幕为主的多媒体界面。手写文字输入、语音拨号上网、收发电子邮件及彩色图形、图像已取得成效。目前一些PDA在显示屏幕上已实现汉字写入、短消息语音发布,但离掌式语言同声翻译还有很大距离。

4.完善的开发平台

随着Internet技术的成熟、带宽的提高,互联网内容提供商(Internet Content Provider,ICP)和应用服务提供商(Application Service Provider,ASP)在网上提供的信息内容日趋丰富、应用项目多种多样,像移动电话、固定电话及电冰箱、微波炉等嵌入式电子设备的功能不再单一,电气结构也更为复杂。为了满足应用功能的升级,设计者一方面采用更强大的嵌入式处理器,如32位、64位RISC芯片或数字信号处理器(Digital Signal Processer,DSP)增强处理能力;同时还采用实时多任务编程技术和交叉开发工具技术来控制功能复杂性,简化应用程序设计、保障软件质量和缩短开发周期。1.2 ARM处理器硬件开发平台1.2.1 嵌入式处理器简介嵌入式处理器简介

嵌入式系统的核心部件是各种类型的嵌入式处理器,据不完全统计,全世界的嵌入式处理器已经超过1 000种,流行的体系结构有30多个系列,数据总线宽度从8位到32位,处理速度从0.1到2 000MIPS(MIPS指每秒执行的百万条指令数)。按功能和内部结构等因素,嵌入式系统硬件平台可以分成如下两类。

1.嵌入式RISC微处理器

精简指令集计算机(Reduced Instruction Set Computer,RISC)把着眼点放在如何使计算机的结构更加简单和如何使计算机的处理速度更加快速上。RISC选取了使用频率最高的简单指令,抛弃复杂指令,固定指令长度,减少指令格式和寻址方式,不用或少用微码控制。这些特点使得RISC非常适合嵌入式处理器。嵌入式微控制器将整个计算机系统或者一部分集成到一块芯片中。嵌入式微控制器一般以某一种微处理器内核为核心,比如以MIPS或ARM核为核心,在芯片内部集成ROM、RAM、内部总线、定时/计数器、看门狗、I/O端口、串行端口等各种必要的功能和外设。与嵌入式微处理器相比,嵌入式微控制器的最大特点是单片化,实现同样功能时系统的体积大大减小。嵌入式微控制器的品种和数量较多,比较有代表性的通用系列包括Atmel公司的AT91系列、Samsung公司的S3C系列、Marvell公司的PXA系列等。

2.嵌入式CISC微处理器

CISC是指复杂指令系统计算机(Complex Instruction Set Computer),早期的CPU全部是CISC架构,它的设计目的是要用最少的机器语言指令来完成所需的计算任务。嵌入式CISC微处理器是指通用计算机中的CPU在不同应用中,将微处理器装配在专门设计的电路板上,只保留和嵌入式应用有关的功能的装置,这种装置可以大幅度减小系统体积和功耗。微处理器(CPU)厂商一直在走CISC的发展道路,包括Intel、AMD,还有其他一些现在已经更名的厂商,如T1(德州仪器)、Cyrix以及VIA(威盛)等。桌面计算机流行的x86体系结构即使用的CISC。RISC和CISC之间的主要区别如表1.2所示。表1.2 RISC和CISC的主要区别1.2.2 ARM处理器简介

ARM(Advanced RISC Machines)有3种含义,它是一个公司的名称,是一类微处理器的通称,还是一种技术的名称。

ARM公司是微处理器行业的一家知名企业,其设计了大量高性能、廉价、低耗能的RISC芯片,并开发了相关技术和软件。ARM处理器具有高性能、低成本和低功耗的特点,适用于嵌入式控制、消费/教育类多媒体、DSP和移动式应用等领域。

ARM公司本身不生产芯片,它转让设计许可,由合作伙伴公司来生产各具特色的芯片。ARM这种商业模式的强大之处在于其价格合理,它在全世界范围的合作伙伴超过100个,其中包括许多著名的半导体公司。ARM公司专注于设计,设计的芯片内核耗电少、成本低、功能强,特有16/32位双指令集。ARM已成为移动通信、手持计算和多媒体数字消费等嵌入式解决方案的RISC实际标准。

ARM处理器的产品分为多个系列,包括ARM7、ARM9、ARM9E、ARM10E、ARM11和Secur Core、Cortex等。每个系列提供一套特定的性能来满足设计者对功耗、性能、体积的需求。Secur Core是独立的一个产品系列,是专门为安全设备而设计的。下面简单介绍ARM各个系列处理器的特点。

1.ARM9系列处理器

ARM9系列于1997年问世。由于采用了5级指令流水线,ARM9处理器能够运行在比ARM7更高的时钟频率上,改善了处理器的整体性能;存储器系统根据哈佛体系结构(程序和数据空间独立的体系结构)重新设计,区分了数据总线和指令总线。

ARM9系列的第一个处理器是ARM920T,它包含独立的数据指令Cache和MMU(Memory Management Unit,存储器管理单元)。此处理器能够被用在要求有虚拟存储器支持的操作系统上。该系列中的ARM922T是ARM920T的变种,只有一半大小的数据指令Cache。

ARM940T包含一个更小的数据指令Cache和一个MPU(Micro Processor Unit,微处理器)。它是针对不要求运行操作系统的应用而设计的。ARM920T、ARM940T都执行v4T架构指令。

ARM9系列处理器主要有以下应用。(1)下一代无线设备,包括视频电话和PDA等。(2)数字消费品,包括机顶盒、家庭网关、MP3播放器和MPEG-4播放器。(3)成像设备,包括打印机、数码照相机和数码摄像机。(4)汽车、通信和信息系统。

2.ARM10系列处理器

ARM10发布于1999年,具有高性能、低功耗的特点。它所采用的新体系使其在所有ARM产品中具有最高的MIPS/MHz。它将ARM9的流水线扩展到6级,也支持可选的向量浮点(Vector Float Point)单元,对ARM10的流水线加入了第7段。VFP明显增强了浮点运算性能并与IEEE 754.1985浮点标准兼容。

3.ARM11系列处理器

ARM1136J-S发布于2003年,是针对高性能和高能效应而设计的。ARM1136J-S是第一个执行ARMv6架构指令的处理器。它集成了一条具有独立的Load/Store和算术流水线的8级流水线。ARMv6指令包含了针对媒体处理的单指令流多数据流扩展,采用特殊的设计改善视频处理能力。

4.Secur Core系列处理器

Secur Core系列处理器提供了基于高性能的32位RISC技术的安全解决方案。Secur Core系列处理器除了具有体积小、功耗低、代码密度高等特点外,还具有特别优势,即提供了安全解决方案支持。下面总结了Secur Core系列的主要特点。(1)支持ARM指令集和Thumb指令集,以提高代码密度和系统性能。(2)采用软内核技术以提供最大限度的灵活性,可以防止外部对其进行扫描探测。(3)提供了安全特性,可以抵制攻击。(4)提供面向智能卡和低成本的存储保护单元MPU。(5)可以集成用户自己的安全特性和其他的协处理器。

Secur Core系列包含SC100、SC110、SC200和SC210四种类型。

Secur Core系列处理器主要应用于一些安全产品及应用系统,包括电子商务、电子银行业务、网络、移动媒体和认证系统等。

5.Strong ARM和Xscale系列处理器

Strong ARM处理器最初是ARM公司与Digital Semiconductor公司合作开发的,现在由Intel公司单独许可,在低功耗、高性能的产品中应用很广泛。它采用哈佛架构,具有独立的数据和指令Cache,有MMU。Strong ARM是第一个包含5级流水线的高性能ARM处理器,但它不支持Thumb指令集。

Intel公司的Xscale是Strong ARM的后续产品,在性能上有显著改善。它执行v5TE架构指令,也采用哈佛结构,类似于Strong ARM也包含一个MMU。前面说过,Xscale已于2006年被Intel卖给了Marvell公司。

6.Cortex系列处理器

为了适应市场的需要,ARM推出了一系列新的处理器:Cortex-A系列、Cortex-M系列、Cortex-R系列,如表1.3所示。表1.3 ARM系列处理器属性比较

Cortex-A系列处理器适用于具有高计算要求、运行丰富操作系统以及提供交互媒体和图形体验的应用领域。Cortex-A系列处理器支持ARM、Thumb和Thumb 2指令集。典型的处理器有A5、A7、A8、A9、A15、A53、A72等。

Cortex-M主要针对微控制器市场,Cortex-M系列改进了代码密度,减少了中断延时并有更低的功耗。其中Cortex-M3中实现了最新的Thumb-2指令集。

Cortex-R系列针对于实时系统,其中Cortex-R7处理器是性能最高的Cortex-R系列处理器。它是高性能实时So C的标准。Cortex-R7处理器是为基于28nm~65nm的高级芯片工艺的实现而设计的,此外其设计重点在于提升能效、实时响应性、高级功能和简化系统设计。1.2.3 Exynos4412处理器简介

本书采用的目标板是基于Samsung公司的Exynos4412处理器的FS4412开发板。Exynos4412是使用Cortex-A9核,采用32nm工艺CMOS标准宏单元和存储编译器开发而成的。

由于采用了由ARM公司设计的16/32位Cortex-A9 RISC处理器,Exynos4412实现了MMU和独立的16KB指令和16KB数据哈佛结构的缓存,每个缓存均为8字节长度的流水线。它的低功耗、精简的全静态设计特别适用于对成本和功耗敏感的领域。

Exynos4412提供全面的、通用的片上外设,大大降低系统的成本,下面列举了Exynos4412的主要片上功能。(1)1.8V Cortex-A9内核供电,1.8V/2.5V/3.3V存储器供电。(2)32KB指令和32KB数据缓存的MMU内存管理单元。(3)外部存储器控制(DRAM控制和芯片选择逻辑)。(4)提供LCD控制器(最大支持4K色的STN或256K色TFT的LCD),并带有1个通道的LCD专用DMA控制器。(5)提供4通道DMA,具有外部请求引脚。(6)提供4通道UART(支持Ir DA1.0、16字节发送FIFO及16字节接收FIFO)、3通道SPI接口。2(7)提供1个通道多主IC总线控制器和2通道IIS总线控制器。(8)兼容SD主机接口1.0版及MMC卡协议2.11版。(9)提供两个主机接口的USB口、1个设备USB口(1.1版本)。(10)4通道PWM定时器、1通道内部计时器。(11)提供看门狗定时器。(12)提供117个通用I/O口。(13)提供电源控制不同模式:正常、慢速、空闲及电源关闭模式。(14)提供带触摸屏接口的8通道10位ADC。(15)提供带日历功能的实时时钟控制器(RTC)。(16)具有PLL的片上时钟发生器。

图1.2所示为Exynos4412系统结构图。

下面依次对Exynos4412的系统管理器、NAND Flash引导装载器、缓冲存储器、时钟和电源管理及中断控制进行讲解,其中所有模式的选择都是通过设定相关寄存器的特定值来实现的,因此,当读者需要对此进行修改时,请参阅Samsung公司提供的Exynos4412用户手册。图1.2 Exynos4412系统结构图

1.系统管理器

Exynos4412系统管理器具有以下功能。(1)支持小/大端模式。(2)寻址空间:每个bank有128MB。(3)支持可编程的每个bank 8/16/32位数据总线宽度。(4)bank0~bank6都采用固定的bank起始寻址。(5)bank7具有可编程的bank起始地址和大小。(6)8个存储器bank(6个适用于ROM、SRAM,另两个适用于ROM、SRAM和同步)。(7)所有的bank都具有可编程的操作周期。(8)支持外部等待信号延长总线。

2.Flash引导装载器

Exynos4412 EMMC存储器启动特性如下。(1)支持EMMC存储器启动。(2)采用4KB内部缓冲器进行启动引导。(3)支持启动之后,EMMC存储器仍然作为外部存储器使用。

同时,Exynos4412也支持从外部n GCS0片选的NOR Flash启动,如在优龙的开发板上将JP1跳线去掉就可从NOR Flash启动(默认从NAND Flash启动)。在这两种启动模式下,各片选的存储空间分配是不同的,如图1.3所示。

3.Cache存储器

Exynos4412 Cache存储器特性如下。(1)64项全相连模式,采用I-Cache(16KB)和D-Cache(16KB)。图1.3 Exynos4412两种启动模式的地址映射(2)每行8字节长度,其中每行带有一个有效位和dirty位。(3)伪随机数或轮转循环替换算法。(4)采用写穿式(write-throught)和写回式(write-back)Cache操作来更新主存储器。(5)写缓冲器可以保存16字节的数据和4个地址。

4.时钟和电源管理

Exynos4412采用独特的时钟管理模式。(1)采用片上MPLL和UPLL,其中UPLL产生操作USB主机/设备的时钟,而MPLL产生最大266MHz(在2.0V内核电压下)的时钟。(2)通过软件可以有选择性地为每个功能模块提供时钟。(3)Exynos4412的电源模式分为正常、慢速、空闲和掉电模式。

①正常模式:正常运行模式。

②慢速模式:不加PLL的低时钟频率模式。

③空闲模式:只停止CPU的时钟。

④掉电模式:所有外设和内核的电源都切断了。

5.中断控制

Exynos4412的中断处理器有如下特点。(1)160个中断源。(2)电平/边沿触发模式的外部中断源。(3)可编程的边沿/电平触发极性。(4)支持为紧急中断请求提供快速中断服务。1.3 嵌入式软件开发流程1.3.1 嵌入式系统开发概述

由于受嵌入式系统本身的特性影响,嵌入式系统开发与通用系统的开发有很大的区别。嵌入式系统的开发主要分为系统总体开发、嵌入式硬件开发和嵌入式软件开发三大部分,其总体流程图如图1.4所示。图1.4 嵌入式系统开发流程图

在系统总体开发中,由于嵌入式系统对硬件依赖度非常高,往往某些需求只能通过特定的硬件才能实现,因此需要进行处理器选型,以更好地满足产品的需求。另外,对于有些硬件和软件都可以实现的功能,就需要在成本和性能上做出抉择。往往通过硬件实现会增加产品的成本,但能大大提高产品的性能和可靠性。

再次,开发环境的选择对于嵌入式系统的开发也有很大的影响。这里的开发环境包括嵌入式操作系统的选择以及开发工具的选择等。例如,对开发成本和进度限制较大的产品可以选择嵌入式Linux系统,对实时性要求非常高的产品可以选择Vx Works系统等。

由于本书主要讨论嵌入式软件的应用开发,因此对硬件开发不做详细讲解,主要讨论嵌入式软件开发的流程。1.3.2 嵌入式软件开发概述

嵌入式软件开发总体流程同通用计算机软件开发一样,分为需求分析、软件概要设计、软件详细设计、软件实现和软件测试。其中嵌入式软件需求分析与硬件的需求分析合二为一,故没有分开。

由于嵌入式软件开发的工具非常多,为了更好地帮助读者选择开发工具,下面首先简单介绍嵌入式软件开发过程中使用的工具。

嵌入式软件的开发工具根据不同的开发过程划分,如在需求分析阶段,可以选择IBM Rational Rose等软件,在程序开发阶段可以采用Code Warrior(下面要介绍的ADS的一个工具)等,在调试阶段可以采用Multi-ICE等。同时,不同的嵌入式操作系统往往会有配套的开发工具,如Vx Works有集成开发环境Tornado,Windows CE的集成开发环境Windows CE Platform等。此外,不同的处理器可能还有对应的开发工具,比如ARM的常用集成开发工具ADS、IAR和Real View等。在这里,大多数软件都有比较高的使用费用,但也可以大大加快产品的开发进度,用户可以根据需求自行选择。图1.5所示为嵌入式开发不同阶段的常用软件。图1.5 嵌入式开发不同阶段的常用软件

嵌入式系统的软件开发与通常软件开发的区别主要在于软件实现部分,软件实现又可以分为编译和调试两部分,下面分别对这两部分进行讲解。

1.交叉编译

嵌入式软件开发采用的编译为交叉编译。所谓交叉编译,就是在一个平台上生成可以在另一个平台上执行的代码。编译最主要的工作是将程序转化成运行该程序的CPU所能识别的机器代码,由于不同的体系结构有不同的指令系统,因此,不同的CPU需要有相应的编译器,而交叉编译就如同翻译一样,把相同的程序代码翻译成不同CPU的对应可执行二进制文件。要注意的是,编译器本身也是程序,也要在与之对应的某一个CPU平台上运行。嵌入式系统交叉编译环境如图1.6所示。

这里一般将进行交叉编译的主机称为宿主机,也就是普通的通用计算机,而将程序实际的运行环境称为目标机,也就是嵌入式系统环境。由于一般通用计算机拥有非常丰富的系统资源、使用方便的集成开发环境和调试工具等,而嵌入式系统的系统资源非常紧缺,无法在其上运行相关的编译工具,因此,嵌入式系统的开发需要借助宿主机(通用计算机)来编译出目标机的可执行代码。

由于编译的过程包括编译、链接等几个阶段,因此,嵌入式的交叉编译也包括交叉编译、交叉链接等过程,通常ARM的交叉编译器为arm-elf-gcc、arm-linux-gcc等,交叉链接器为arm-elf-ld、arm-linux-ld等。交叉编译过程如图1.7所示。图1.6 交叉编译环境图1.7 嵌入式交叉编译过程

2.交叉调试

嵌入式软件经过编译和链接后即进入调试阶段,调试是软件开发过程中必不可少的环节,嵌入式软件开发过程中的交叉调试与通用软件开发过程中的调试方式有很大的差别。在常见软件开发中,调试器与被调试的程序往往运行在同一台计算机上,调试器是一个单独运行着的进程,它通过操作系统提供的调试接口来控制被调试的进程。而在嵌入式软件开发中,调试时采用的是在宿主机和目标机之间进行的交叉调试,调试器仍然运行在宿主机的通用操作系统之上,但被调试的进程却是运行在基于特定硬件平台的嵌入式操作系统中,调试器和被调试进程通过串口或者网络进行通信,调试器可以控制、访问被调试进程,读取被调试进程的当前状态,并能够改变被调试进程的运行状态。

嵌入式系统的交叉调试有多种方法,主要分为软件方式和硬件方式两种。它们一般都具有如下一些典型特点。(1)调试器和被调试进程运行在不同的机器上,调试器运行在计算机(宿主机),而被调试的进程则运行在各种专业调试板上(目标板)。(2)调试器通过某种通信方式(串口、并口、网络、JTAG等)控制被调试进程。(3)在目标机上一般会具备某种形式的调试代理,它负责与调试器共同配合完成对目标机上运行着的进程的调试。这种调试代理可能是某些支持调试功能的硬件设备,也可能是某些专门的调试软件(如gdbserver)。(4)目标机可能是某种形式的系统仿真器,通过在宿主机上运行目标机的仿真软件,整个调试过程可以在一台计算机上运行。此时物理上虽然只有一台计算机,但逻辑上仍然存在宿主机和目标机的区别。

下面分别介绍软件调试桩方式和硬件片上调试两种方式。(1)软件方式

软件调试主要通过插入调试桩的方式来进行。调试桩方式进行调试是通过目标操作系统和调试器内分别加入某些功能模块,二者互通信息来进行调试。该方式的典型调试器有gdb调试器。

gdb的交叉调试器分为Gdb Server和Gdb Client,其中的Gdb Server作为调试桩安装在目标板上的gdbserver程序中,Gdb Client就是驻于本地的gdb交叉调试器(arm-linux-gdb等)。它们的调试原理如图1.8所示。第2章详细介绍在Linux平台下远程调试的方法。

gdb远程调试的工作流程如下。图1.8 gdb远程调试原理

①建立调试器(本地gdb交叉调试)与目标操作系统的通信连接,可通过串口、网卡、并口等多种方式。

②在目标机上开启gdbserver进程,并监听对应端口。

③在宿主机上运行交叉调试器,这时,gdb交叉调试器会自动寻找远端的通信进程,也就是gdbserver的所在进程。

④在宿主机上的gdb通过gdbserver请求对目标机上的程序发出控制命令。这时,gdbserver将请求转化为程序的地址空间或目标平台的某些寄存器的访问,这对于没有虚拟存储器的简单嵌入式操作系统而言,是十分容易的。

⑤ gdbserver把目标操作系统的所有异常处理转向通信模块,并告知宿主机上gdb交叉调试器当前有异常。

⑥宿主机上的gdb向用户显示被调试程序产生了哪一类异常。

这样就完成了调试的整个过程。这个方案的实质是用软件接管目标机的全部异常处理及部分中断处理,并在其中插入调试端口通信模块,与主机的调试器进行交互。但是它只能在目标机系统初始化完毕、调试通信端口初始化完成后才能起作用,因此,一般只能用于调试运行于目标操作系统之上的应用程序,而不宜用来调试目标操作系统的内核代码及启动代码,而且它必须改变目标操作系统,因此,也就多了一个不用于正式发布的调试版。(2)硬件调试

相对于软件调试而言,使用硬件调试器可以获得更强大的调试功能和更优秀的调试性能。硬件调试器的基本原理是通过仿真硬件的执行过程,让开发者在调试时可以随时了解系统的当前执行情况。目前嵌入式系统开发中最常用到的硬件调试器是 ROMMonitor、ROMEmulator、In-Circuit Emulator和In-Circuit Debugger。

①采用ROMMonitor方式进行交叉调试需要在宿主机上运行调试器,在宿主机上运行ROM监视器(ROMMonitor)和被调试程序,宿主机通过调试器与目标机上的ROM监视器遵循远程调试协议建立通信连接。ROM监视器可以是一段运行在目标机ROM上的可执行程序,也可以是一个专门的硬件调试设备,它负责监控目标机上被调试程序的运行情况,能够与宿主机端的调试器一同完成对应用程序的调试。

在使用这种调试方式时,被调试程序首先通过ROM监视器下载到目标机,然后在ROM监视器的监控下完成调试。

优点:ROM监视器功能强大,能够完成设置断点、单步执行、查看寄存器、修改内存空间等各项调试功能。

缺点:同软件调试一样,使用ROM监视器时,目标机和宿主机必须建立通信连接。

ROMMonitor调试方式的原理如图1.9所示。

②采用ROMEmulator方式进行交叉调试时需要使用ROM仿真器,并且它通常被插入目标机上的ROM插槽中,专门用于仿真目标机上的ROM芯片。

在使用这种调试方式时,被调试程序首先下载到ROM仿真器中,因此等效于下载到目标机的ROM芯片上,然后在ROM仿真器中完成对目标程序的调试。

优点:避免了每次修改程序后都必须重新烧写到目标机的ROM中。

缺点:ROM仿真器本身比较昂贵,功能相对来讲又比较单一,只适应于某些特定场合。

ROMEmulator调试方式的原理如图1.10所示。图1.9 ROMMonitor调试方式图1.10 ROMEmulator调试方式

③ 采用In-Circuit Emulator(ICE)方式进行交叉调试时需要使用在线仿真器,它是目前最为有效的嵌入式系统的调试手段。它是仿照目标机上的CPU而专门设计的硬件,可以完全仿真处理器芯片的行为。仿真器与目标板可以通过仿真头连接,与宿主机可以通过串口、并口、网线或USB口等方式连接。由于仿真器自成体系,所以调试时,既可以连接目标板,也可以不连接目标板。

在线仿真器提供了非常丰富的调试功能。在使用在线仿真器进行调试的过程中,可以按顺序单步执行,也可以倒退执行,还可以实时查看所有需要的数据,从而给调试过程带来很多的便利。嵌入式系统应用的一个显著特点是与现实世界中的硬件直接相关,并存在各种异变和事先未知的变化,从而给微处理器的指令执行带来各种不确定因素,这种不确定性在目前情况下只有通过在线仿真器才有可能发现。

优点:功能强大,软硬件都可做到完全实时在线调试。

缺点:价格昂贵。

ICE调试方式的原理如图1.11所示。图1.11 ICE调试方式

④ 采用In-Circuit Debugger(ICD)方式进行交叉调试时,需要使用在线调试器。由于ICE的价格非常昂贵,并且每种CPU都需要一种与之对应的ICE,使得开发成本非常高。一个比较好的解决办法是让CPU直接在其内部实现调试功能,并通过在开发板上引出的调试端口发送调试命令和接收调试信息,完成调试过程。例如,使用非常广泛的ARM处理器的JTAG端口技术就是因此而诞生的。

JTAG是1985年指定的用于检测PCB和IC芯片的一个标准。1990年被修改成为IEEE的一个标准,即IEEE 1149.1。JTAG标准采用的主要技术为边界扫描技术,它的基本思想就是在靠近芯片的输入/输出管脚上增加一个移位寄存器单元。因为这些移位寄存器单元都分布在芯片的边界上(周围),所以被称为边界扫描寄存器单元(Boundary-Scan Register Cell)。

当芯片处于调试状态时,这些边界扫描寄存器可以将芯片和外围的输入/输出隔离开来。通过这些边界扫描寄存器单元,可以实现对芯片输入/输出信号的观察和控制。对于芯片的输入管脚,可通过与之相连的边界扫描寄存器单元把信号(数据)加载到该管脚中;对于芯片的输出管脚,可以通过与之相连的边界扫描寄存器单元“捕获”(CAPTURE)该管脚的输出信号。这样,边界扫描寄存器单元提供了一个便捷的方式用于观测和控制所需调试的芯片。

现在较为高档的微处理器都带有JTAG接口,包括ARM系列处理器、Strong ARM、DSP等,通过JTAG接口可以方便地对目标系统进行测试,还可以实现Flash编程,这是非常受欢迎的。

优点:连接简单,成本低。

缺点:特性受制于芯片厂商。

JTAG调试方式的原理如图1.12所示。图1.12 JTAG调试方式1.4 实验内容:使用SD-CARD烧写EMMC

使用SD-CARD烧写EMMC

1.实验目的

通过烧写EMMC的实验,了解嵌入式硬件环境,为今后的进一步学习打下良好的基础(本书以华清远见fs4412及Flash烧写工具为例进行讲解,不同厂商的开发板都会提供相应的Flash烧写工具,并有相应的说明文档,请读者在了解基本原理之后查阅相关手册)。

2.实验内容(1)熟悉开发板的硬件布局。(2)熟悉U-BOOT启动流程。(3)熟悉SD-CARD启动盘的制作。(4)打开u-boot-fs4412.bin(Flash烧写程序)进行烧写。

3.实验步骤(1)熟悉开发板硬件设备。(2)制作SD-CARD启动盘。

①使用网络下载sdfuse_q启动盘制作工作到Linux。

②将SD卡插入计算机并让Linux识别——挂在SD卡。

③进入sdfuse_q执行下列操作。

$ sudo ./mkuboot.sh /dev/sdb

④在 SD 卡中创建目录 sdupdate 并把u-boot-fs4412.bin 拷贝到这个目录下。(3)U-BOOT的烧写。

①连接串口和板子,运行串口通信程序PUTTY,选择右上角的“Serial”,然后单击左下角的“Serial”,如图1.13所示。图1.13 PUTTY连接

②设置相应的属性,如图1.14所示。图1.14 PUTTY属性设置

③单击Open按钮打开串口,如图1.15所示。图1.15 PUTTY串口界面

试读结束[说明:试读内容隐藏了图片]

下载完整电子书


相关推荐

最新文章


© 2020 txtepub下载