linux交叉环境的搭建以及嵌入式开发概述
嵌入式开发概述
由嵌入式本身的特性所影响,嵌入式系统开发与通用系统的开发有很大的区别,嵌入式的开发分为系统总体开发,嵌入式硬件开发,嵌入式系统软件开发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交叉环境的搭建以及嵌入式开发概述的更多相关文章
- 【Linux编译环境的搭建】Linux都没有,怎么学Linux编程?
本文准备从0开始,一步步搭建一套属于自己的多节点Linux系统环境,这将是后续学Linux.用Linux.Linux环境编程.应用和项目部署.工具实验等一系列学习和实践的基石,希望对小伙伴们有帮助. ...
- linux虚拟机环境快速搭建redis5.x版本的主从集群总结
文/朱季谦 我在阿里云服务器上曾参与过公司redis集群的搭建,但时间久了,都快忘记当时的搭建过程了,故而决定在虚拟机centOS 7的环境,自行搭建一套redis5.x版本的集群,该版本集群的搭建比 ...
- 【Linux】JDK+Eclipse 搭建C/C++开发环境
注:本文所提供的参考示例是在CentOS Linux环境下的安装,不保证适用于其他版本的Linux系统. · 安装前的注意事项 编译源代码是需要对应的代码编译工具的,本文中安装的Eclipse只 ...
- Window环境下搭建Vue.js开发环境
原文链接:http://blog.csdn.net/solo95/article/details/72084907 笔者最近在进行前端的学习,在点完了HTML5.CSS3.JavaScript等技能树 ...
- Vue开发环境的搭建及基本开发流程
1.下载并安装node,下载地址. 2.命令行运行以下命令安装npm淘宝镜像; npm install -g cnpm --registry=https://registry.npm.taobao.o ...
- Windows环境下面搭建Object C开发环境[转]
1.安装编译器 Objective-C的编译器有很多,其中LLVM属于从GCC发展出来的,主要使用在苹果的平台中,GNU可以使用GnuStep,网址是http://wwwmain.gnustep.or ...
- 申港集中运营平台Linux测试环境架构搭建
架构图 服务一览 ESB安装 ESB全称为Enterprise Service Bus,即企业服务总线.ESB提供了网络中最基本的连接中枢,是构筑企业神经系统的必要元素.ESB的出现改变了传统的软件架 ...
- Window环境下搭建android NDK开发环境
1.下载ndk和cygwin NDK 下载地址:http://developer.android.com/tools/sdk/ndk/index.html Cygwin 下载地址:http://cyg ...
- 二、linux编译环境的搭建
1.linux编译工具安装 vim安装:apt-get install vim 注意:使用C语言源代码语法加亮功能,需要配置文件/etc/vim/vimrc,加入代码syntaxon.文件后缀必须为. ...
随机推荐
- jsp片段
转载自:http://blog.csdn.net/lovejavaydj/article/details/7293145 使用jspf 在开发中写jsp页面时,通常都要通过如下方式在jsp文件头部引入 ...
- JAX-RS入门
JAX-RS入门 一 :基础 博客分类: JAX-RS 简介 JAX-RS是一套用java实现REST服务的规范,提供了一些标注将一个资源类,一个POJOJava类,封装为Web资源.标注包括: ...
- [Linux 命令]df -h
查看目前磁盘空间和使用情况 以更易读的方式显示
- Maven中心仓库
当你使用Maven构建一个项目,Maven会检查你的pom.xml文件,找出需要下载的依赖包.首先它会到本地仓库查找所需的文件,如果没找到,就到默认的中心仓库(这是新的http://search.ma ...
- Flex 国际化(flex Localize)
先说编译到主程序中去的方法: 1.创建资源文件夹 譬如可以在src文件夹下创建Locale文件夹,然后在此文件夹再次创建每个地区的资源文件夹,譬如de_DE,zh_CN. 然后分别创建后缀名为.pro ...
- php获取apk包信息的方法
/*解析安卓apk包中的压缩XML文件,还原和读取XML内容 依赖功能:需要PHP的ZIP包函数支持.*/ include('./Apkparser.php'); $appObj = new Apkp ...
- android开发中如何结束所有的activity
每一个activity都有自己的生命周期,被打开了最终就要被关闭. 四种结束当前的activity方法 //关闭当前activity方法一 finish(); //关闭当前界面方法二 android. ...
- BootStrap基本样式
文本对齐风格:.text-left:左对齐.text-center:居中对齐.text-right:右对齐.text-justify:两端对齐 取消列表符号:.list-unstyled内联列表:.l ...
- 基于XMPP的即时通信系统的建立(五)— openfire
现决定使用Openfire作为服务端,Openfire采用Java开发,基于XMPP的实时开源协作服务器.单台可支持上万并发用户. Openfire体系结构 Openfire体系由其提供的服务器端.客 ...
- UVa 11732 (Tire树) "strcmp()" Anyone?
这道题也是卡了挺久的. 给出一个字符串比较的算法,有n个字符串两两比较一次,问一共会有多少次比较. 因为节点会很多,所以Tire树采用了左儿子右兄弟的表示法来节省空间. 假设两个不相等的字符串的最长公 ...