嵌入式开发概述

由嵌入式本身的特性所影响,嵌入式系统开发与通用系统的开发有很大的区别,嵌入式的开发分为系统总体开发,嵌入式硬件开发,嵌入式系统软件开发3大部分

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

在系统总体开发,由于嵌入式系统与硬件依赖非常紧密,往往某些需求只能够通过特定的硬件才能实现,需要进行处理器选型,以满足产品的需求

开发环境的选择对于嵌入式系统的开发也有很大的影响,这里的开发环境包括嵌入式操作系统的选择以及开发工具的选择

对开发成本和进度箱子比较大的产品可以选择嵌入式linux系统,对实时性要求比较高的产品可以选择Vxworks

嵌入式开发分为  嵌入式硬件开发 和嵌入式软件开发,这里主要介绍软件开发流程

嵌入式软件开发概述

嵌入式软件开发概述:软件开发流程,它同计算机软件开发流程一样,分为需求分析,软件概要设计,软件详细设计,软件实现,软件测试,其中嵌入式软件需求分析和硬件的需求分析合二为一,故没有分开画出

嵌入式开发工具简介:

需求分析阶段:IBM的Rational Rose

程序开发阶段:Codewarrior

调试阶段:Multi-ICE

交叉编译:嵌入式软件开发采用的编译时交叉编译,所谓交叉编译就是在一个平台上生成可以在另一个平台上执行的代码,编译的最主要的工作就是将程序转化成运行该程序的cpu能够是别的机器码,由于不同的体系结果给有不同的指令系统,因此,不同的cpu需要有相应的编译器

交叉编译就像翻译一样,把相同的程序代码翻译成不同cpu的对应可执行的二进制文件,要注意的是,编译器本身也是程序,也要在与之相对应的某个cpu平台上运行

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

由于编译的过程包括编译链接几个阶段,因此,嵌入式的交叉编译也包括交叉编译和交叉链接等过程,通常ARM的交叉编译器为arm-elf-gcc ,arm-linux-gcc等,交叉链接器为arm-elf-ld,arm-linux-ld等

交叉调试

嵌入式软件经过编译和连接后即可进入调试阶段,调试是软件开发过程中一个必不可少的一个环节,嵌入式软件开发过程中的交叉调试与通用软件开发的调试有很大的区别,在常见的软件开发过程中,调试器和被调试的程序往往运行在同一台计算机上,调试器是一个单独运行的进程,他通过操作系统提供的调试接口来控制被调试的进程。

而在嵌入式的软件开发中,调试时采用的事在宿主机和目标机上进行交叉调试,调试器仍然运行在宿主机的通用操作系统上,但被调试的进程确实运行在基于特定硬件平台的嵌入式系统中,调试器和被调试的进程通过串口或者是网络进行通信,调试器可以控制,范围被调试的进程,读取北条司的进程的当前状态,并能够改变被调试进程的运行状态

嵌入式系统的交叉调试有很多种方法,可以分为软件方式 和 硬件方式

特点;1:调试器和被调试的进程运行在不同的机器上,调试器运行在pc机(宿主机),被调试的进程则运行在各种专业的目标板上

   2:调试器通过某种通信方式(串口,并口你,网络,JTAG等)控制被调试的进程

   3:在目标机上一般会具备某些形式的调试代理,他负责与调试器共同配合完成对目标机上运行者的进程的调试,这种调试代理可能是某些支持调试功能的硬件设备,也可能是某些专门的调试软件(gdbserver)

   4:目标机可能是某种形式的系统仿真器,通过在宿主机上运行目标机的仿真软件,整个调试过程可以在一台计算机上运行,此时,物理上虽然只有一台计算机,但是逻辑上仍然存在着宿主机和目标机的区别

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

gdb的交叉调试器分为gdbserver,和gdbclient,其中gdbserver就作为调试桩安装在目标板上,gdbclient就是驻于本地的gdb调试器,他们的调试原理如同所示

gdb 调试的工作流程

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

  2:然后,在目标机上开启gdbserver进程,并监听对应端口

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

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

  5:gdbserver把目标操作系统的所有的异常处理转向为通信模块,并告知宿主机上gdb当前有异常

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

小结:

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

硬件调试

  相对于软件调试而言,使用硬件调试器可以获得更强大的调试功能和更优调试性能,硬件调试器的基本原理是通过仿真硬件的执行过程,让开发者在调试时可以随时了解到系统的当前执行状态,目前,嵌入式系统开发中最常用到的硬件调试器是ROMmonitor,ROmEmulator ,In-CircuitEmulator,In-CircuitDebugger

几种常见的硬件调试方式简介

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

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

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

《调试这一块还没有用到,以后再来完善,毕竟硬件调试对于学生来说,设备没有,经验没有,要到专门的工厂才能完成》

版权所有,转载请标明链接地址http://www.cnblogs.com/fengdashen

linux交叉环境的搭建以及嵌入式开发概述的更多相关文章

  1. 【Linux编译环境的搭建】Linux都没有,怎么学Linux编程?

    本文准备从0开始,一步步搭建一套属于自己的多节点Linux系统环境,这将是后续学Linux.用Linux.Linux环境编程.应用和项目部署.工具实验等一系列学习和实践的基石,希望对小伙伴们有帮助. ...

  2. linux虚拟机环境快速搭建redis5.x版本的主从集群总结

    文/朱季谦 我在阿里云服务器上曾参与过公司redis集群的搭建,但时间久了,都快忘记当时的搭建过程了,故而决定在虚拟机centOS 7的环境,自行搭建一套redis5.x版本的集群,该版本集群的搭建比 ...

  3. 【Linux】JDK+Eclipse 搭建C/C++开发环境

    注:本文所提供的参考示例是在CentOS Linux环境下的安装,不保证适用于其他版本的Linux系统. ·    安装前的注意事项 编译源代码是需要对应的代码编译工具的,本文中安装的Eclipse只 ...

  4. Window环境下搭建Vue.js开发环境

    原文链接:http://blog.csdn.net/solo95/article/details/72084907 笔者最近在进行前端的学习,在点完了HTML5.CSS3.JavaScript等技能树 ...

  5. Vue开发环境的搭建及基本开发流程

    1.下载并安装node,下载地址. 2.命令行运行以下命令安装npm淘宝镜像; npm install -g cnpm --registry=https://registry.npm.taobao.o ...

  6. Windows环境下面搭建Object C开发环境[转]

    1.安装编译器 Objective-C的编译器有很多,其中LLVM属于从GCC发展出来的,主要使用在苹果的平台中,GNU可以使用GnuStep,网址是http://wwwmain.gnustep.or ...

  7. 申港集中运营平台Linux测试环境架构搭建

    架构图 服务一览 ESB安装 ESB全称为Enterprise Service Bus,即企业服务总线.ESB提供了网络中最基本的连接中枢,是构筑企业神经系统的必要元素.ESB的出现改变了传统的软件架 ...

  8. Window环境下搭建android NDK开发环境

    1.下载ndk和cygwin NDK 下载地址:http://developer.android.com/tools/sdk/ndk/index.html Cygwin 下载地址:http://cyg ...

  9. 二、linux编译环境的搭建

    1.linux编译工具安装 vim安装:apt-get install vim 注意:使用C语言源代码语法加亮功能,需要配置文件/etc/vim/vimrc,加入代码syntaxon.文件后缀必须为. ...

随机推荐

  1. cojs 简单的最近公共祖先 解题报告

    我曾经自己想过每考试一次就从考试题中找找idea来出题 这次又找到了一个,先不管原来的考试题是什么 考试题中其中的一部分就是今天的这道题目啦 当时考场上自己比较傻,没有注意到有用的性质,套用了之前黑白 ...

  2. XCODE 出现 The operation couldn't be completed.(LaunchServicesError error 0.)错误修复

    XCODE 出现 The operation couldn't be completed.(LaunchServicesError error 0.)错误修复   XCODE 出现 The opera ...

  3. LR_问题_无法打开IE浏览器、监视服务器资源

    无法打开IE浏览器 使用web(http)协议录制时,无法打开IE浏览器,且生成的日志信息为 ****** Start Log Message ****** Web Recorder version ...

  4. QTP之delphi试用感想一(自动化测试)

    这两天一直在琢磨自动化测试,自动化测试,其实与单元测试有一些相同之处,单元测试的目的也是可以一次写,多次运行,对于测试驱动及后期维护真是有非常多的好处,用自动化测试工具也是如何,主要目的是为了回归测试 ...

  5. Android Studio Gradle

    http://blog.zhaiyifan.cn/2016/03/14/android-new-project-from-0-p2/

  6. [Codeforces137C]History(排序,水题)

    题目链接:http://codeforces.com/contest/137/problem/C 题意:给n对数,分别是一个事件的起始和终止时间.问被有几个事件被其他事件包含. 思路:先排序,按照起始 ...

  7. 转 intent常用功能

    1.从google搜索内容Intent intent = new Intent();intent.setAction(Intent.ACTION_WEB_SEARCH);intent.putExtra ...

  8. sdut 2819 比赛排名(边表 拓扑排序)

    题目:http://acm.sdut.edu.cn/sdutoj/problem.php?action=showproblem&problemid=2819 #include <iost ...

  9. Android之界面刷新(invalidate和postInvalidate使用)

    Android中实现view的更新有两组方法,一组是invalidate,另一组是postInvalidate,其中前者是在UI线程自身中使用,而后者在非UI线程中使用. Android提供了Inva ...

  10. HDU 4870 Rating (2014 Multi-University Training Contest 1)

    Rating Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Sub ...