嵌入式开发概述

由嵌入式本身的特性所影响,嵌入式系统开发与通用系统的开发有很大的区别,嵌入式的开发分为系统总体开发,嵌入式硬件开发,嵌入式系统软件开发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. Project Euler 79:Passcode derivation

    Passcode derivation A common security method used for online banking is to ask the user for three ra ...

  2. JAVA! static什么作用?

    是静态修饰符,什么叫静态修饰符呢?大家都知道,在程序中任何变量或者代码都是在编译时由系统自动分配内存来存储的,而所谓静态就是指在编译后所分配的内存会一直存在,直到程序退出内存才会释放这个空间,也就是只 ...

  3. Android系统

    系统内核 Android 是运行于Linux kernel之上,但并不是GNU/Linux.   因为在一般GNU/Linux 里支持的功能,Android 大都没有支持,包括Cairo.X11.Al ...

  4. QT 焦点事件(4种方式的解释,还有委托焦点)

    1.setFocusPolicy(...)设置获得焦点的方式 Qt::TabFocus 通过Tab键获得焦点 Qt::ClickFocus 通过被单击获得焦点 Qt::StrongFocus 可通过上 ...

  5. java:I/O流

    I/O是input/output的缩写,即输入输出端口. 从 文件.键盘.网络 等输入到java程序,再从java程序输出到 文件.显示器.网络等 分类: 1.输入流 和 输出流2.字节流 和 字符流 ...

  6. hadoop拾遗(三)---- 多种输入

    虽然一个MapReduce作业的输入可能包含多个输入文件(由文件glob.过滤器和路径组成),但所有文件都由同一个InputFormat和同一个Mapper来解释.然而,数据格式往往会随时间而演变,所 ...

  7. [置顶] Android系统五大布局详解Layout

    我们知道Android系统应用程序一般是由多个Activity组成,而这些Activity以视图的形式展现在我们面前,视图都是由一个一个的组件构成的.组件就是我们常见的Button.TextEdit等 ...

  8. How to Determine the Version of Oracle XML Publisher for Oracle E-Business Suite 11i and Release 12 (Doc ID 362496.1)

    Modified: 29-Mar-2014 Type: HOWTO In this DocumentGoal   Solution   1. Based upon an output file gen ...

  9. new int[]和new int()的区别

    1. new int[] 是创建一个int型数组,数组大小是在[]中指定,例如:int * p = new int[10]; //p执行一个长度为10的int数组.2. new int()是创建一个i ...

  10. BZOJ_1024_[SHOI2008]_生日快乐_(dfs)

    描述 http://www.lydsy.com/JudgeOnline/problem.php?id=1024 给出一个\(x*y\)的距形,要求平行于边切,最终切成\(n\)个面积相等的小距形,求长 ...