基于ARM的视频采集系统的设计与实现

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

基于ARM的视频采集系统的设计与实现
摘要
本文根据家庭视频采集系统的要求,提出一种基于ARM的网络视频采集方案.方案要求视频的实时传输、实时监控。

本系统以Intel Xscale 芯片和嵌入式Linux系统为平台,在平台中搭建网络视频服务器,并以它为中介,负责将USB摄像头采集到得视频数据传输到网络服务器中,最后发送到申请监控的远程PC机中,远程PC只需在网页中便能实时的看到监控端的视频图像。

论文首先阐述了嵌入式网络视频采集技术的发展、现状和前景,然后介绍了嵌入式硬件系统结构和嵌入式Linux操作系统的特点,阐述了嵌入式硬件整体结构,使大家大体的完整的对系统硬件有详细的了解,实际记录了嵌入式操作系统内核的编译和移植,介绍了Bootloader的基本原理和启动过程,实现了视频采集程序的编译和移植,研究了嵌入式一般驱动程序的使用。

随后,本文详细描述了视频采集程序的整体结构框图和具体功能代码块、网络通信编程技术、图像编解码、嵌入式视频服。

关键词:ARM;嵌入式;Linux;视频采集
目录
摘要 (I)
第1章引言 (1)
1。

1课题的背景和来源 (1)
1。

2本文的内容及主要工作 (1)
第2章嵌入式ARM系统硬件结构简介 (3)
2。

1视频监控系统结构简介 (3)
2。

2ARM处理器简介 (3)
2.3XS CALE体系结构 (4)
2。

4主要硬件电路说明 (7)
第3章嵌入式ARM系统软件结构 (9)
3.1L INUX操作系统简介 (9)
3.2交叉编译环境的建立 (10)
3。

3嵌入式L INUX操作系统移植 (11)
3.3.1 BootLorder移植 (11)
3.3。

2 Linux 内核移植 (12)
3.3。

3 嵌入式文件系统 (13)
3。

4L INUX下的程序调试 (14)
第4章USB设备驱动程序设计 (15)
4.1设备驱动程序简介 (15)
4。

2L INUX下驱动程序的实现 (18)
4。

3USB摄像头驱动程序设计 (20)
第5章视频采集功能的设计 (23)
5.1基于V4L的编程 (24)
5。

1.1 摄像头相关数据结构 (24)
5.1。

2 摄像头基本功能实现 (25)
5。

1。

3 视频数据采集 (29)
5。

2图像编解码 (32)
5.2。

1 编解码介绍 (32)
5。

2.2 系统压缩技术 (33)
第1章引言
1.1 课题的背景和来源
二十一世纪的网络化、数字化让人们的生活每天都发生着翻天覆地的变化,获取信息的方便和快捷可以使人们在信息化的今天领先一步创造出巨大的利益,而获取信息的重要途径就是眼睛。

据统计,人类采集信息的80%来自视觉。

图像和视频是对客观事物生动、形象的描述,是一种最直观的表现方式。

而视频监控技术因为它方便快捷、生动形象、信息丰富等特点日益受到人们的青睐,并在各行各业得到广泛的应用.与此同时,现代网络和数字技术的快速发展也为视频监控技术的发展奠定了坚实的基础。

二十一世纪,嵌入式技术、多媒体处理技术进一步发展,为视频监控系统的发展提供了新的出路——嵌入式视频监控系统.嵌入式系统是以应用为中心,软硬件可以剪裁,具有高稳定、低成本、功耗低、速度快、实时好的专用计算机系统,它由嵌入式微处理器,配以周边硬件设备,接口电路组成。

嵌入式系统内部使用嵌入式操作系统,安装专用的功能软件。

嵌入式技术把硬件和软件集于一体,独立工作。

嵌入式视频监控系统比其他视频采集系统在布局区域范围上要广泛;由于使用IP技术,嵌入式视频监控技术比其他视频采集系统更具紧密的结合度,能够充分利用现代网络技术的成果,并能构成复杂的视频监控网络;性能上,嵌入式视频采集系统继承了嵌入式技术的优点,非常适合自动化的环境。

因此,嵌入式视频采集技术正在我国快速的发展,积极的研究会加强我们在这方面技术的学习,也会为视频监控技术的发展贡献力量。

1.2 本文的内容及主要工作
根据毕业设计的初衷,我们需要设计基于ARM的网络视频采集系统。

在监控系统中,视频采集、传输、播放的功能不是由专门视频处理芯片完成,而是由软件实现。

论文首先介绍了嵌入式ARM系统的硬件结构和软件结构,方便大家熟悉
ARM和Linux系统,包括嵌入式设备的硬件结构,逻辑框图和Linux的基本操作、安装方法;第二,研究了嵌入式的一些驱动程序,主要是摄像头驱动程序V4L,系统中选用的摄像头芯片—-中星微301;第三,研究了视频监控的具体流程和实现方式,让大家在总体上对整个系统有一个大概的认知。

本次设计的目的只有一个,就是实现视频的实时监控。

围绕它,不管是硬件结构还是软件流程,都需要学习和研究,不断调试,决不放弃.
总之,论文的内容都是围绕如何建立一个视频采集系统。

无论是从哪个方面,我们都是为这个目标而努力。

第2章嵌入式ARM系统硬件结构简介2.1 视频监控系统结构简介
网络视频监控系统是基于嵌入式技术设计的.嵌入式并没有统一的定义,但目前有一个广泛而又被认可的规范:将软件产品固化到硬件平台上,完成应有的功能既是嵌入式。

基于嵌入式ARM技术的视频监控系统服务器端采用摄像头不断的采集图像,压缩成视频流,然后通过网络发送到申请监控的客户端.监控系统的使用者可以在远程实现网页上的实时监控和一些简单的功能操作。

系统整体结构如图2.1所示[1].
图2。

1 系统整体结构图
该系统中CPU采用基于ARM的PXA270微处理器,通过在其上运行Linux 操作系统,执行Boa视频服务器,接受并处理来自摄像头的图像信号,通过以太网控制器发送至远端,实现视频数据的远程传输和接受,达到视频监控的目的[2]。

2.2 ARM处理器简介
ARM,既是一个公司的名字,也是对一类微处理器的通称。

ARM嵌入式微处理器是全球领先的16/32位RISK处理器芯片知识产权设计供应商ARM (AdvancedRISKMachines)公司的产品。

ARM公司本身不直接从事芯片生产,而
是依靠转让设计许可,由合作公司生产各具特色的芯片.
ARM处理器以其完整的体系结构,极小的体积、极低的功耗、极低的成本、极高的性能,及时根据嵌入对象的不同进行功能上的扩展的优势,在众多种类的嵌入式微处理器中脱颖而出。

基于ARM技术的微处理器应用占据了32位RISC 微处理器75%以上的市场份额,ARM技术正在逐步渗入到我们生活的各个方面。

采用RISC架构的ARM微处理器一般具有如下特点:
(1) 采用固定长度的指令格式,指令规整、简单、基本寻址方式有2~3种;
(2)使用单周期指令,便于流水线操作执行;
(3) 大量使用寄存器,数据处理指令只对寄存器进行操作,以提高指令的执行效率;
(4)所有的指令都可根据前面的执行结果决定是否被执行,从而提高指令的执行效率;
(5)可用加载/存储指令批量传输数据,以提高数据的传输效率;
(6)可在一条数据处理指令中同时完成逻辑处理和移位处理;
(7)在循环处理中使用地址的自动增减来提高运行效率。

目前,ARM处理器有ARM7、ARM9、ARM9E、ARM10、ARM10E、SecurCore、StrongARM和XScale等系列。

每个系列除了具有ARM体系结构的共同特点以外,都有各自的特点和应用领域。

2.3 XScale体系结构
Xscale核是采用ARM V5TE架构的处理器,是Intel公司的StrongARM的升级换代产品,它具有高性能、低功耗等特点,并在流水线设计、DSP处理和指令设计中有很大改进[3]。

ARM的体系结构是基于RISK的,XScale是ARM处理器的一种,所以XScale具有RISK的基本特性。

而且针对嵌入式系统,XScale 构架还引入了Pentium处理器工艺和系统结构技术,实现了Pentium微处理器体系结构的一系列高性能技术,达到了高性能、低功耗和小体积等嵌入式系统要求的特性。

它的特点有:超流水线、高主频、存储体系、分支预测和指令集体系结构.
本设计采用的就是基于英特尔Xscale构架的一种32位嵌入式处理器,它除了应用于掌上电脑之中外,还可以应用于智能手机、网络存储设备、骨干网路由器等电子设备.
PXA27x系列处理器是英特尔当前最新推出的嵌入式处理器.它的时钟频率从312到624MHz不等,并内建64MB的堆栈型Intel StrataFlash内存。

内置了英特尔的无线MMX技术,能够显著提升多媒体性能。

OURS—PXA270—EP是一款基于INTEL XSCALE PXA270处理器,针对高效嵌入式系统教学和实验科研的平台。

这款设备主要包括核心板与底版两个部分,核心板主要集成了高速的PXA270 CPU,配套的存储器,网卡等设备;底版主要是各种类型的接口与扩展口.
核心板(8层PCB电路)系统包括:
CPU:INTEL PXA270(520M),支持GDB调试;
SDRAM:64M 工作在104M外频上;
FLASH: 32M INTEL Nor FLASH;
Net:10/100M Ethernet controller (LAN91C111);
SUPERIO: WINBOND 83977;
CPLD: XILINX 95144 (117USER IO);
总线驱动器:若干;核心板正面如图2。

2所示,核心板背面如图2.3所示。

图2。

2 核心板正面图
图2.3 核心板背面图
底版(4层PCB电路)如图2.4所示.包括:Ethernet:10/100接口1个
UART: 6个(包括RS232,RS485,IRDA,全功能串口)USB1。

1:2个(1个host 一个device)
PS2:2个(KEYBOARD&MOUSE)
标准并口:1个
PCMCIA: 1个
IDE:1个
SD/MMC: 1个
SMC:1个
CAMERA:1个
96PIN功能扩展口:2个
4X5 小键盘
CPU_JTAG CPLD_JTAG
LED SHARP LQ080V3DG01 8寸真彩LCD640X480
VGA 640X480
LED 8X8点阵
一组7段LED数码管4个
图2.4 底版图
2.4 主要硬件电路说明
嵌入式设备除了以ARM芯片为主要控制单元,也有很多周边电路和外围设备,它们有的帮助ARM处理信号、有的负责存储数据、有的进行网络连接、有的用来数据通信,这些周边设备缺一不可,不能替代.
首先介绍CPU核心总线[4],总线是CPU和其他设备的桥梁。

CPU是通过总线信号来控制SDRAM ,FLASH,网卡,SUPERIO等外部设备的,无论是低速还是高速,只要是与总线相关的芯片,都要和CPU总线信号有关。

其次,研究嵌入式系统内存—-SDRAM.SDRAM是嵌入式系统的内存,具有单位空间存储容量大和价格便宜的优点,已广泛应用在各种嵌入式系统中。

当系统启动时,CPU首先从复位地址0x0处读取启动代码,在完成系统的初始化后,程序代码一般应调入
SDRAM中运行,以提高系统的运行速度.同时,系统及用户堆栈、运行数据也都放在SDRAM中.SDRAM的存储单元可以理解为一个电容,总是倾向于放电,为避免数据丢失,必须定时刷新(充电)。

因此,要在系统中使用SDRAM,就要求微处理器具有刷新控制逻辑,或在系统中另外加入刷新控制逻辑电路.PXA270芯片在片内具有独立的SDRAM刷新控制逻辑,可方便地与SDRAM接口。

除了SDRAM,FLASH也是一种存储媒介。

FLASH一般具有NOR型和NAND型。

NAND型FLASH单元密度高,写入和擦除速度非常快,而且一般NAND型FLASH 的存储容量很大。

NOR型FLASH的优点是芯片内执行命令,这样应用程序可以直接在FLASH内运行,不用进入内存,使得它的传输效率很高。

嵌入式设备最大的优点就是网络功能强大,它能像PC一样方便地连接到互联网上,这些功能都是网络控制器的作用。

也就是Ethernet Controller,本系统采用SMSC公司的单芯片的网络控制器,LAN91C111。

它可以工作在两种速度下,10M以太网或者100M以太网。

LAN91C111的工作流程是,驱动程序将要发送的数据包按指定格式写入芯片并启动发送命令,LAN91C111会自动把数据包转换成物理帧格式在物理信道上传输;反之芯片收到物理信号后自动将其还原成数据,并按指定格式存放在芯片RAM中以便主机程序取用。

就是LAN91C111完成数据包和电信号之间的相互转换。

最后,说明一下串口电路,在嵌入式视频监控系统中,串口起到了很重要地作用,嵌入式系统启动的信息都可以通过串口传到PC上,极大地方便了系统的移植和软件的调试。

大多数情况下,嵌入式CPU的串口0会作为CPU 的一个终端,为用户与CPU交互提供基本的输出输入信息。

当CPU运行BOOT 代码时,通常只有这个终端;运行LINUX内核时,如果有LCD显示,串口0与LCD终端会同时有效。

串口0终端的交互方式是命令行的模式,在BOOT阶段,支持简单的BOOT命令。

第3章嵌入式ARM系统软件结构
3.1 Linux操作系统简介
Linux是一个类似Unix的操作系统,它起源于芬兰一个名为LinusTorvaldS 的业余爱好者,现已成为最流行的一款开放源代码的操作系统。

Linux从问世至今,短短时间内已发展成为一个功能强大、设计完善的操作系统.Linux系统不仅能够运行于PC平台,还在嵌入式系统方面大放光芒。

由于Linux的源码开放,内核精简且性能强悍,不依赖于具体厂商,能广泛适用于各种硬件设备,系统二次开发成本极低,因此在IT业界已经达成共识,即采用嵌入式Linux作为嵌入式操作系统是大势所趋[5]。

嵌入式Linux是目前嵌入式系统领域中发展势头非常迅猛的系统。

嵌入式Linux是指对Linux经过小型化裁剪后,能够固化在容量只有几百K字节或几M 字节的存储器芯片或单片机中,应用于特定嵌入式场合的专用操作系统。

目前正在开发的嵌入式系统中,49%的项目选择嵌入式Linux作为操作系统.嵌入式Linux现已成为嵌入式操作系统的理想选择[6]。

目前基于嵌入式Linux的应用已经遍布很多领域,比如移动多媒体设备、手持设备、车载导航系统、机械控制等。

嵌入式Linux分为两种类型:在没有使用MMU的平台上(无内存虚实地址转换和映射)的一般为uCLinux;而在有MMU平台上,则使用原本地嵌入式Linux 版本。

由于在目前的主流嵌入式ARM中大多不具有MMU,因此只用IM左右的内核就能实现网络功能和任务调度的Linux系统就可以适用于从高端服务器到嵌入式应用的各级平台.ARM技术和Linux成功地结合,应用于数以千计的商业产品中。

从便携式消费品、网络和无线设备,到自动化设备、医疗设备和存储产品,这一应用列表与日俱增。

ARM和Linux的结合充分满足了各类应用对嵌入式平台高性能、低功耗和低价格的要求,通过开发环境、开源社区和ARM的商业伙伴的优势为嵌入式开发提供了更灵活的选择。

本次设计的开发环境为redhat9。

0系统,在Windows XP 下安装虚拟机,在虚拟机中安装Linux系统,这样可以屏蔽底层差别,避免硬件驱动带来的麻烦,而且还能方便的使用串口、并口、USB接口,快速的进入实验环境。

图3。

1为虚拟机下Linux系统启动后的情况。

图3。

1 虚拟机下Linux操作系统
3.2 交叉编译环境的建立
通常嵌入式系统的软件编译和执行是在两个不同平台上进行的.编译是在宿主机,一般为装有Linux的pc;执行是在目标机,即嵌入式系统的硬件平台.一般是在宿主机上通过跨平台交叉编译器把源文件编译成目标平台上可执行的文件,再通过串口、并口或者网络下载至目标平台上的FLASH或者其它存储介质,然后由目标机来运行这些软件。

这里所说的跨平台编译器和一般的编译器功能类似,都是把源代码通过编译器编译成目标文件,然后通过链接器、可重定位器程序和定位器把目标文件重新定位成可执行文件。

和通用的编译器之间最大的差别就在于跨平台编译器编译出来的可执行程序通常只能在特定CPU所属平台上运行.所以一般来说每种CPU都对应有不同的跨平台编译器.
本系统采用基于XScale的PXA270,可以使用常用的ARM—LINUX—GCC 交叉编译器.要成功构建完整的交叉编译环境需要在宿主机上创建一系列的工具包括C/C++编译器、汇编器、链接器、嵌入式系统的标准C库和GDB代码级调试器。

成功建立好开发环境后便可以运用这些工具进行嵌入式系统开发[7]。

3.3 嵌入式Linux操作系统移植
3.3.1 BootLorder移植
BootLoader是系统加电后运行的第一段代码.一般只是在启动时运行很短的时间,然而对一个嵌入式系统来说,这一部分却是整个系统的一个无比重要的组成部分,不可缺少。

在一般嵌入式系统中,系统复位或者加电后通常从地址0x00000000处开始执行,而这个地址一般正是存放的BootLoader启动代码。

通过这段程序,可以初始化硬件设备、建立内存空间的映射图,从而将系统的软硬件环境带到一个合适的状态,以便为最终加载操作系统内核准备好正确的环境。

BootLoader一般情况下需要包含以下几个必备的功能:
(l)初始化处理器。

这个动作都是用汇编语言完成的,称为重置码(resetcode)或者称为bootcode,而且对于每个CPU都不一样的,当电源接通后就会执行这个动作,通常只有两三个汇编指令,目的是将CPU的控制权转给硬件初始化的程序.
(2)初始化一些必要的硬件。

这个动作也大都由汇编语言来完成,主要是初始化CPU、SDRAM等,其他的硬件,例如串口,可以由c语言等比较高级的程序语言来完成后续动作。

(3)设置处理器的寄存器以及内存,关掉所有的输入管脚(包括中断管脚),以防止突然有信号进入妨碍接下来的硬件初始化动作。

然后初始化串口,以便后续运行的程序能够同HOST端进行通信,便于调试。

(4)从特定的位置把操作系统和文件系统调入内存,并设置一些操作系统所必需的参数,然后把CPU控制权交给操作系统.有的BootLoader会先从串口或者网络等其他途径得到内核的映像文件,然后把这些文件写入目标系统的FLASH或者其它存储介质,最后再把内核载入RAM执行,交出控制权.
一般BootLoader都包含两种不同的操作模式:“启动加载”模式和“下载”模式,这种区别仅对于开发人员才有意义。

从最终用户的角度看,BootLoader的作用就是用来加载操作系统,而并不存在所谓的启动加载模式与下载模式的区别。

(l)启动加载(Bootloading)模式:这种模式也称为“自主"(Autonomous)模式,即BootLoader从目标机上的某个固态存储设备上将操作系统加载到RAM中运
行,
整个过程并没有用户的介入。

这种模式是BootLoader的正常工作模式,因此在嵌入式产品发布的时候,BootLoader显然必须工作在这种模式下。

(2)下载(Downloading)模式:在这种模式下,目标机上的BootLoader将通过串口连接或者网络连接等通信手段从主机(HOST)下载文件,比如下载内核映像和根文件系统映像等。

从主机下载的文件通常首先被BootL0ader保存到目标机的RAM中,然后再被BootLoader写到目标机上的FLASH类固态存储设备中.BootLoader的这种模式通常在第一次安装内核与根文件系统时被使用,此外,以后的系统更新也会使用BootLoader的这种工作模式.工作于这种模式下的BootLoader通常都会向它的终端用户提供一个简单的命令行接口。

BootLoader的实现依赖于CPU的体系结构,一般来说启动过程分为两个阶段。

第一阶段依赖于CPU体系结构的代码,比如设备初始化代码等,通常都放在第一阶段中,而且通常都用汇编语言来实现,运行效率比较高。

这个阶段完成的任务一般如下:
(l) 硬件设备初始化(屏蔽所有的中断、关闭处理器内部的指令/数据cache);
(2) 为第二阶段准备RA.M空间;
(3) 复制BootLoader的第二阶段代码到RAM空间中;
(4)设置好堆栈并跳转到第二阶段的C程序入口点。

第二阶段则通常用C语言来实现,这样可以实现复杂的功能,而且代码会具有更好的可读性和可移植性。

这个阶段主要任务有:
(l)初始化本阶段要使用的硬件设备;
(2)检测系统内存映射;
(3)将内核映像和根文件系统从FLASH读到RAM中;
(4)为内核设置启动参数;
(5)调用内核文件运行。

本设计中的Bootloader采用Blob,Blob是Boot Loader Object的缩写,是一款功能强大的Bootloader。

Blob最初是由Jan-Derk Bakker和Erik Mouw两人为一块名为LART(Linux Advanced Radio Terminal)的开发板写的,该板使用的处理器是StrongARM SA—1100,现在Blob已经被成功移植到许多基于ARM的CPU上了。

本设计中的Intel Xcale就是采用Blob作为Bootloader[8].
3.3.2 Linux 内核移植
选用嵌入式Linux作为目标机操作系统,一方面由于Linux是一款免费的操作系统,能很好的降低成本,同时Linux的开发应用现在已经成为热门,有大量的资源可用于学习与重复应用,并且Linux系统具有良好的可移植性和可裁剪性,能自动支持多任务管理。

一般常用的GUI如QT/E,MiniGUI等都支持Linux.Linux 的开发工具也都可以很方便的免费获得。

系统采用的嵌入式Linux内核为随实验平台光盘中的Linux内核,它是针对这套实验平台所配置的Linux内核,内核版本为Linux2.4.20[9].在实验过程中,只需要在这个内核的基础上进行添加和删减所需要和不需要的功能,编译后就可以使用了。

在编译内核之前,需要对内核进行必要的配置,通过虚拟机进入/pxa270_linux/linux/目录后在终端执行make menuconfig[10]命令,就可以可视化的配置内核需要的功能和要求,本次试验,主要是针对视频方面,选择了对V4L的静态加载、对spca5xx摄像头驱动的动态加载,这样就结束了对内核的配置。

编译内核需要创建内核依赖关系、创建内核镜像文件和创建内核模块。

首先执行makedep命令,读取配置过程生成的配置文件,来创建对应于配置的依赖关系树,从而决定哪些需要编译而哪些不需要;接着需要makeclean删除前面步骤留下的文件,以避免出现一些错误;然后便可以生成所需要的内核文件了,用make zlmage 来实现得到可移植的内核。

内核文件通过并口下载线烧写入开发板中,便可以通过BootLoader加载运行。

3.3.3 嵌入式文件系统
嵌入式Linux操作系统一般采用FLASH作为存储介质。

FLASH具有独特的物理特性,所以必须使用专门的嵌入式文件系统。

嵌入式系统对文件的操作是通过层次结构实现的。

对于用户程序来说,文件是有结构的文件,用户程序通过对
文件IO函数操作文件。

嵌入式文件系统是嵌入式操作系统的一部分,它的任务是对逻辑文件进行管理,其工作包括提供对逻辑文件的操作(复制、删除、修改等)接口,方便用户操作文件和目录。

在文件系统内部,根据存储设备的特点,使用不同的文件组织模式来实现文件的逻辑结构。

此外,文件系统要对管理文件的安全性负责.文件系统不能直接控制物理设备,它是通过FLASH驱动实现控制的[11]。

目前FLASH支持的文件系统技术主要有JFFS2,YAFFS2,TrueFFS,FTL/NTFL,
RAMFS,CRAMFS和ROMFS等等。

本系统采用的是JFFS2文件系统。

JFFS2文件系统是专门为NAND闪存设计的嵌入式文件系统,根据NAND 闪存以页面为单位存取的特点,将文件组织成固定大小的数据段。

利用NAND闪存提供的每个页面16B的备用空间来存放ECC(ErrorCorrectionCode)和文件系统的组织信息、,不仅能够实现错误检测和坏块处理,也能够提高文件系统的加载速度。

JFFS2采用一种多策略混合的垃圾回收算法,结合了贪心策略的高效性和随机选择的平均性,达到了兼顾损耗平均和系统开销的目的。

它是日志结构的文件系统,提供了损耗平衡和掉电保护,可以有效地避免意外掉电对文件系统一致性和完整性的影响.JFFS2文件系统是按层次结构设计的,分为文件系统管理层接口、JFFS2内部实现层和NAND接口层,这样就简化了其与系统的接口设计,可以方便地集成到系统中去。

与YAFFS相比,它增加了一些功能,因此功能更强。

3.4Linux下的程序调试
调试是程序开发过程中必不可少的一个重要环节,通用PC机的程序调试与嵌入式操作系统的调试环境上有着明显的区别,前者调试器和被调试的程序往往是运行在同一台机器上,是相同操作系统下的两个不同的进程,调试器通过操作系统专用调用接口控制被调试进程,后者通常为远程调试,调试器一般运行于桌面操作系统上,而被调试的程序则运行在嵌入式系统之上,因此需要协调这两个程序之间的通信.Linux下的调试工具非常的少,gdb是Linux下最著名的调试工具,它是GNUC自带的调试工具,它可以使开发人员了解程序运行的详细细节,从而消除程序的错误,达到调试的目的,gdb还具有远程调试功能,可以满足嵌入式系统调试的要求,在调试过程中PC机也称为宿主机和嵌入式系统通过串口协议或者TCP/IP协议连接起来,远程主机上运行被gdb规范断点改造过的内核,。

相关文档
最新文档