《嵌入式开发环境》PPT课件.ppt

上传人:tia****nde 文档编号:12726500 上传时间:2020-05-19 格式:PPT 页数:53 大小:850KB
返回 下载 相关 举报
《嵌入式开发环境》PPT课件.ppt_第1页
第1页 / 共53页
《嵌入式开发环境》PPT课件.ppt_第2页
第2页 / 共53页
《嵌入式开发环境》PPT课件.ppt_第3页
第3页 / 共53页
点击查看更多>>
资源描述
第4章嵌入式开发环境,本章主要内容:,1.嵌入式系统软件开发环境的建立2.嵌入式程序调试烧写工具3.Linux操作系统移植4.ARM开发工具ADS等,4.1建立嵌入式系统的软件开发环境,本节主要介绍Linux操作系统。Linux操作系统和引导程序的编译,根文件系统的制作等都要在Linux环境下进行。因此,需要一台安装有Linux操作系统的PC作为软件开发的机器。如果现在使用的是安装了Windows的计算机,那么最好的办法就是在Windows里安装一个虚拟机,然后再在虚拟机里安装Linux操作系统,这样既不影响原来的工作环境,又可建立新的开发环境。,4.1.1在虚拟机上运行Linux操作系统,PC上常用的虚拟机软件有VMWare和VirtualPC两种。根据实际需求,选择分配给虚拟机的硬盘空间。RedhatLinux典型的安装一般是2GB左右,因此选择8GB的空间就足够用了。通过共享文件夹的方式,在虚拟机中还可以访问到Windows下的文件。,在虚拟机中可以通过挂起系统的方式,保存当前的工作环境,当重新启动虚拟机时,再恢复到前一次的工作环境,继续没有完成的工作。这样启动的速度比重新启动系统要快得多。在虚拟机上运行Linux如图4-1所示。,图4-1在虚拟机上云新Linux,4.1.2常用辅助工具,嵌入式Linux一般使用ARM处理器的第一个串口做为默认的控制台设备,启动过程中,Linux利用printk向串口输出启动信息。在进行引导程序或操作系统移植等工作时,经常利用串口输出的信息进行调试。常用的串口工具有secureCRT、Windows自带的超级终端和网上可以下载的免费串口工具(如串口助手和丁丁串口工具等)。,图4-2嵌入式系统调试用的串口工具secureCRT的窗口,4.2程序调试烧写工具,学习嵌入式开发的第一个问题通常是想了解程序是怎么烧写到闪存的。烧写的方式有两种,一种方法是用编程器进行烧写,这通常是在生产中进行的;另一种方法是用通常芯片的JTAG口进行烧写,在研发调试过程中一般采用这种方法。,4.2.1JTAG烧写线的制作,JTAG下载线非常简单,就是利用PC并行端口的输出带锁存的特点,使用软件通过并口引脚产生JTAG时序。计算机并行口引脚的定义如表4-1所列。,表4-1并行口引脚,使用D0D3作为JTAG接口的TCK、TDI和TMS,用PIN11(BUSY)作为TDO。JTAG接口的另一个信号线TRST(复位信号线)并没有使用。电路图如图4-3所示。,图4-3JTAG下载线电路图,4.2.2烧写程序Jflash简介,有了前面的下载线,再使用Jflash软件,就可以把程序烧写到闪存中。Jflash是使用JTAG口直接写闪存的流行工具。Jflash在Linux和Windows操作系统中都可以使用,现在主要还是介绍在Linux中的使用。Jflash在S3C2410的嵌入式系统中进行烧写时在屏幕上的输出如图4-4所示。,图4-4闪存烧写程序Jflash,Jflash命令格式:./jf2410/f:test,test是要烧写到闪存的文件。从图4-4中输出的信息可以看出Jflash的版本是v0.3,嵌入式系统中S3C2410处理器的ID是0 x0032409d,这个程序当前支持的闪存有K9S1208(Samsung公司的NandFlash)和28F128J3A(Intel公司的NorFlash)。此外,还支持内存的读/写操作,包括硬件寄存器的读/写,在开发调试中,这个功能比较有用。,4.3Linux操作系统移植,Linux操作系统是一个完全开放源代码的操作系统,用户可以自己下载、阅读、修改并重新编译内核,从而使开发人员能够完全自己定制相关的操作系统功能,以适合自己的需要。在Linux操作系统应用到一个新的系统平台时,需要进行代码修改,也就是操作系统的移植。嵌入式系统和PC不同之处在于嵌入式系统的硬件设备多种多样,同时由于资源的限制,操作系统又不能太庞大,因此需要针对具体系统进行裁剪。,4.3.1Bootloader概述,基于IntelX86体系结构的PC也一样需要使用Bootloader。计算机上电后从地址0 xFFFF0取第一条指令,这个地址存放的就是计算机主板的BIOS。BIOS完成开机时的硬件启动检测,然后读取硬盘的引导扇区。对于使用Linux操作系统的计算机,引导扇区上的程序先读入引导程序LILO或是GRUB,再由引导程序把Linux装入到内存中,然后把控制权交给Linux。,1.Bootloader主要功能包括启动和下载。,启动功能:所谓启动功能就是Bootloader从嵌入式系统的固态存储器(通常都是Flash)上将操作系统加载到RAM中运行,然后将控制权交给操作系统,之后由操作系统接管系统的初始化和引导操作系统。对于使用Linux操作系统的ARM嵌入式系统,Bootloader必须给Linux准备必要的运行环境:,Bootloader给Linux准备必要的运行环境,ARM处理器的寄存器必须满足r0=0,r1=设备类序号(machinetypenumber),r2=启动参数taggedlist再ARM中的物理地址。Linux2.4.x以后的内核用taggedlist的形式来传递启动参数。启动参数从ATAG_CORE开始,至ATAG_NONE结束。屏蔽所有中断,ARM处理器运行模式在SVC模式。MMU必须处于关闭状态,数据高速缓冲(Datacache)必须关闭。,下载功能:在嵌入式系统开发的过程中,需要移植操作系统、编写设备驱动等工作,在调试过程中,可能要多次下载内核映像文件到存储介质中。Bootloader可以通过串口、USB口或以太网口等通信接口由PC(主机)下载内核映像文件。内核映像文件先下载到SRAM中,这时可以直接转移到内核映像运行,也可以把内核映像写到Flash的内核分区。Bootloader通过串口进行文件传输时。使用xmodem、ymodem或zmodem协议。在开发调试时,串口传输的速度比较慢。因此,目前比较流行的Bootloader都支持以太网连接,通过TFTP来下载文件。,目前用于ARM嵌入式Linux系统比较流行的Bootloader由U-Boot、vivi、Redboot和Blob等。各种Bootloader的实现各有特点,但完成的工作都是类似的。有的主要是在ARM嵌入式系统中使用,如ARMboot、vivi和Blob等;有些支持多种硬件平台,如U-Boot和Redboot等。如果对Bootloader的功能要求不多,仅是把操作系统从Flash复制到RAM中运行,完全可以自己编写一个Bootloader。,2.常见的一些Bootloader,(1)U-Boot(2)vivi(3)RedBoot(4)Blob,4.3.2Linux操作系统目录结构,移植Linux操作系统就是修改平台相关的源文件,因此要知道这些文件在源代码树中的位置,也就是要了解Linux的目录系统结构,了解各个目录下源代码文件的功能。Linux操作系统源代码非常庞大、复杂,要全部阅读理解完整的内核代码几乎是不可能的。但内核代码文件的组织是非常清晰的,每一个目录都对应特定功能。系统的移植只是涉及其中很小一部分代码。,以内核版本2.6为例来了解Linux的目录结构,arch这个目录中根据Linux支持的处理器类型设置不同的子目录,包括arm、mips和i386等。在arch/arm/目录下,还根据不同的ARM处理器设置不同的子目录,如mach-s3c2410等。block这个目录中是块设备(如硬盘)的I/O算法相关的文件。crypto加密算法相关的文件目录。Documentation这个目录中是内核自带的帮助文件。drivers设备驱动的目录,包括串口、IDE和PCI等。fs这个目录是存放Linux支持的各种文件系统源文件,如EXT3、sysfs和yaffs2等。include内核头文件目录。其中目录asm-XXX是不同处理器结构相关的头文件,对于ARM处理器是asm-arm。init系统初始化可以分为两个阶段,第一个阶段是和处理器结构紧密相关的代码,基本是用汇编语言写的;,第二个阶段是与处理器无关的代码,用C语言编写,这部分文件就放在这个目录中。ipc进程间通信相关文件目录,如消息队列、信号量和共享内容等。kernel与结构无关的基本内核文件的目录。lib内核库函数文件目录。mm内存管理文件目录。net网络协议相关文件目录,如IPV4、IPV6等。scripts这个目录存放编译内核时需要使用到一些脚本文件。security内核安全相关文件目录。sound音频相关的文件目录。use和initramfs文件系统相关的文件目录。initramfs是一种建立在内存中的文件系统。在根目录下,还有一个Makefile文件!,其他ARM架构通用的代码:,如:arch/arm/kernel::Linux核心代码;arch/arm/mm:内存管理代码;arch/arm/lib:库函数;arch/arm/nwfpe:实现浮点计算的代码;arch/arm/configs:各种硬件平台的默认配置文件;arch/arm/tools:自动生成各种文件(如机器ID定义文件mach-types等)的脚本;arch/arm/boot:内核启动的代码。,4.3.3Bootloader与Linux操作系统,Bootloader的功能不只是把Linux内核加载到内存,还要将参数传递内核。Linux2.4.x以后的内核以标记列表(taggedlist)的形式来传递启动参数。参数的列表以标记ATAG_CORE开始,以标记ATAG_NONE结束。每个标记由表示被传递参数的tag_header结构以及随后的参数值数据结构来组成。参数必须存放在系统的RAM中,推荐放在RAM的前16KB的位置。,在嵌入式Linux系统中,常见启动参数,ATAG_CORE、ATAG_MEM、ATAG_CMDLINE、ATAG_RAMDISK和ATAG_INITRD等。,4.3.4编译及配置内核,Linux内核源代码修改完成后,就可以进行内核的编译了。在源代码根目录下的Makefile文件需要修改两个地方:一是指定CPU类型,而是指定使用的编译器。在Makefile中,修改如下:ARCH=armCROSS_COMPILE=arm-linux-编译器gcc的版本和Linux内核版本关系密切。从Linux源代码根目录下的README可以找到内核对gcc版本的要求。,4.3.5制作根文件系统,Linux的文件系统有一个根节点“/”,这个根节点存在于内存之中。系统启动时,要将某一个具体的设备安装到节点“/”上,称为根设备,根设备上的文件系统就称为根文件系统。对于PC,这个设备一般是硬盘上的某一个分区;而对于嵌入式设备,通常就是Flash上的一个分区。嵌入式系统中常用的根文件系统是cramfs,这是一个只读的文件系统,由于使用了zlib压缩算法,整个文件系统可以很小,适合嵌入式系统的要求。但因为它是一个只读的文件系统,不能随意增加或删除文件节点,因此需要预先用工具mkcrmfs建立文件系统的映像。在BootLoader中,把根文件系统的映像写到Flash的某个分区中,然后再启动Linux时将类似“root=/dev/mtdblock3”的参数传递给Linux内核。,Linux的根文件系统一般包括如下目录,/bin目录中存放Linux标准命令和应用程序,如ls、cp等。/dev目录中存放设备文件节点。系统上的每个设备在/dev里都有一个对应的设备文件。这个目录中的内容对不同版本的Linux操作系统会有所不同。在没有引入devfs文件系统以前,/dev目录下的节点是预先建立好的,即在存储介质(硬盘、Flash等)上分配了空间。在使用了devfs文件系统以后,目录/dev下的节点是动态建立的。系统刚启动时,目录为空,以后每挂载一个设备,就在目录/dev下增加一个或是几个节点。/etc目录中存放系统设置文件和其他的系统文件,例如/etc/fstab记录了启动时要挂载的文件系统。/lib目录中存放系统的动态链接库文件。库文件从编译器(如arm-uclibc-gcc)的目录中复制相关文件。,/mnt用户临时挂载文件系统的地方。嵌入式系统的根文件系统通常是使用只读的文件系统cramfs,而用户程序可能需要进行升级,同时要存储采集的数据等。因此存储这些可写数据的Flash分区一般是挂载到这个目录下。/proc用于挂载proc文件系统。proc是Linux特殊的文件系统,系统刚上电时,这个目录为空。系统启动过程中或是在设备挂载过程中,在目录/proc中动态生成各种文件。这个目录下的文件也是比较特殊的,文件的内容是在读/写时根据系统相关信息生成。/root超级用户主目录。,/sbin目录中存放系统管理程序,如fsck和mount等;/tmp目录中存放不同的程序执行时产生的临时文件。但由于根文件系统为只读文件系统,因此必须在这个目录下挂载其他的文件系统。/usr目录中存放用户应用程序和文件,通常有/usr/bin和/usr/sbin等子目录。,例如,若存放根文件系统的目录名为/home/qcd/myroot/,则可用以下命令生成cramfs的根文件系统:mkcramfs/home/qcd/myrootmyroot.img即可在当前目录下生成名为myroot.img的文件系统映像。为了确认文件系统的映像是否正确,可以用以下命令把它挂载到某个目录(如/mount/myroot)下查看其内容:mout-oloop-tcramfsmyroot.img/mount/myroot根文件系统各个目录的作用和在PC上的Linux操作系统的文件系统是一样的。,4.4ARM开发工具ADS,4.4.1ADS基础ARMADS全称为ARMDeveloperSuite,是由ARM公司提供的专门用于ARM处理器应用开发和调试的综合性工具软件。目前使用的ADS1.2版本是一款功能强大的开发工具和易于使用的集成开发环境(IntegratedDevelopmentEnvironment,IDE)。它可以安装在WindowsNT4,Windows2000,Windows98,Windows95,WindowsXP和WindowsMe操作系统中。,ADS囊括了一系列的应用工具,并有相关的文档和实例的支持。使用者可以用它来编写和调试各种基于ARM家族处理器的应用,可以为ARM和Thumb处理器开发、编译和调试采用C、C+和ARM汇编语言编写的程序代码。ADS主要包含CodeWarriorIDE和AXD两部分。CodeWarriorIDE工具主要用于工程的管理配置、源程序的编辑、编译和链接;AXD主要用于工程的下载和调试。本节将重点介绍图形界面的ADS1.2IDE开发工具。,CodeWarriorIDE,CodeWarriorIDE是基于Windows操作系统平台的工程管理工具,用户可以根据特定的目标系统配置工具环境,为源代码文件、库文件建立工程,通过编译链接可生成包含调试信息的ELF格式的映像文件(*.asf)和可以直接烧写至Flash的BIN格式的二进制可执行文件(*.bin)。用户使用CodeWarriorIDE,可以便捷地管理工程、源文件和编译工程等。AXD是基于Windows操作系统平台的ARM调试器,它提供了一个功能完备的调试环境,可用于调试C、C+和汇编语言级编写的用户代码。在AXD中打开ELF格式映像文件后,可以选择全速运行代码、设置断点或单步运行代码,可以查看各个寄存器、存储器单元及变量的值等。,1.ADS环境下ARM程序开发方式,(1)开发工具(2)编译器(3)仿真与调试,目前常见的调试方法有4种:,1)指令集模拟器2)Angel调试监控软件3)JTAG(JointTestActionGroup,联合测试行为组织)仿真器4)在线仿真器ICE,2.ADS工具介绍,(1)CodeWarrior集成开发环境CodeWarrior集成开发环境(CodeWarriorIDE)是一套专为基于ARM处理器而设计的、完整的集成开发工具,它充分发挥了ARM处理器体系结构的优势。开发人员只需在一个集成软件环境中就能完成ARM应用开发的各个阶段。在整个开发周期中,开发人员无需离开CodeWarrior开发环境,节省了在不同环境工具间的切换等,使得开发人员有更多的精力投入到代码的编写和调试中。(2)ADS调试器ADS调试器(AXD)是一个工具软件,用户使用AXD可以对用户程序进行诸如断电的设置与清除、程序运行控制、单步执行、寄存器数据监视和变量的查看等调试操作。AXD挂接在CodeWarriorIDE中,用户可在CodeWarriorIDE中直接点击启动AXD,调试用户程序;也可以单独启动AXD,加载、调试用户代码。,4.4.2ADS中的工程管理工具CodeWarriorIDE,1.ADS系统中的文件类型2.工程模板3.创建工程4.工程管理,4.4.5AXD调试器中常用的调试窗口,1.Registers窗口选择菜单【AXD】【ProcessorViews】【Registers】,打开ARM7TDMI-SRegisters窗口,如图4-22Registers窗口所示。,2.Memory窗口选择菜单【AXD】【ProcessorViews】【Memory】,打开ARM7TDMI-SMemory窗口,如图4-23所示。Memory窗口显示了某个存储区域的内容。使用Memory窗口,可以实现下面的功能:(1)通过窗口上的垂直滚动条显示存储区域的内容,显示格式可由用户指定。(2)修改某存储单元的内容。(3)在ARM7TDMI-MemroyStartAddr栏中可以指定查看存储的地址。,图4-23Memory窗口,3.Disassembly窗口选择菜单【AXD】【ProcessorViews】【Disassembly】,打开ARM7TDMI-SDisassembly窗口,如图4-24所示。Disassembly窗口显示了将某个存储区域的数据反汇编得到的汇编指令,可以为ARM指令或Thumb指令。使用Disassembly窗口,可以实现下面的功能:(1)显示存储区的反汇编代码。(2)设置反汇编的汇编指令格式,可以为ARM指令或者Thumb指令。(3)设置、修改及删除程序断点。,图4-24Disassembly窗口,4.Breakpoints窗口选择菜单【AXD】【systemViews】【Breakpoints】,打开Breakpoints窗口,如图4-25所示。Breakpoints窗口显示了当前被调试的映像文件中设置的所有程序断点的信息。Breakpoints窗口中有以下几栏:显示各断点Breakpoints的状态(State),点击State圆点可使能/禁能对应的断点设置。目标处理器的型号(Processor);断点的位置(Position);断点执行次数计数器(Count);断点条件(Condition),当程序执行到断点并且执行条件满足时,中止程序。,图4-25Breakpoints窗口,5.Watchpoints窗口选择菜单【AXD】【SystemViews】【Watchpoints】,打开Watchpoints窗口,如图4-26所示。Watchpoints窗口显示了当前被调试的映像文件中设置的所有数据断点,并且程序执行到每一个Watchpoints处会中止。它与Breakpoints的区别是,Breakpoints必须设置在指令代码地址处,而Watchpoints可以对寄存器、变量或表达式设置。Watchpoints窗口中有以下几栏:观察点Watchpoints的状态(State)(打开/关闭);目标处理器的型号(Processor);,观察点项目(Item),可以是变量名、寄存器名或者地址;观察点的地址(Watching),若观察点项目是寄存器,则显示寄存器名称;观察点执行次数计数器(Count);观察点执行条件(Condition),当程序执行到观察点并且执行条件满足时,中止程序。,图4-26Watchpoints窗口,谢谢观赏!,
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 图纸专区 > 课件教案


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!