嵌入式开发环境_第1页
嵌入式开发环境_第2页
嵌入式开发环境_第3页
嵌入式开发环境_第4页
嵌入式开发环境_第5页
已阅读5页,还剩48页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第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常用辅助工具

嵌入式Linux一般使用ARM处理器的第一个串口做为默认的控制台设备,启动过程中,Linux利用printk向串口输出启动信息。在进行引导程序或操作系统移植等工作时,经常利用串口输出的信息进行调试。常用的串口工具有secureCRT、Windows自带的超级终端和网上可以下载的免费串口工具(如串口助手和丁丁串口工具等)。图4-2嵌入式系统调试用的串口工具secureCRT的窗口4.2程序调试烧写工具学习嵌入式开发的第一个问题通常是想了解程序是怎么烧写到闪存的。烧写的方式有两种,一种方法是用编程器进行烧写,这通常是在生产中进行的;另一种方法是用通常芯片的JTAG口进行烧写,在研发调试过程中一般采用这种方法。4.2.1JTAG烧写线的制作

JTAG下载线非常简单,就是利用PC并行端口的输出带锁存的特点,使用软件通过并口引脚产生JTAG时序。计算机并行口引脚的定义如表4-1所列。表4-1并行口引脚

引脚号名称类型功能1STROBE输出选通脉冲,低电平表示数据线上的数据有效2~9D0~D7输出8位数据信号线10ACK输入确认11BUSY输入高电平表示打印机处于忙状态12PE输入高电平表示打印机的纸用完13SEL输入高电平表示选择当前打印机14AUTOFD输出自动送纸15ERROR输入低电平表示出现错误16INIT输出初始化17SELIN输出选择18~25GND—信号地使用D0~D3作为JTAG接口的TCK、TDI和TMS,用PIN11(BUSY)作为TDO。JTAG接口的另一个信号线TRST(复位信号线)并没有使用。电路图如图4-3所示。图4-3JTAG下载线电路图VccP133pF33pFC3C2LPT_TMSLPT_TDILPT_TCK2.2K2.2KR6R72.2KR5J1ARM_JTAG-33pF33pF33pFC7C6C5TDOLPT_TDO4.7FC100.1F+C974HCT244Vcc2.2KR4R3TDO100100R2LPT_TDI100R1LPT_TCK计算机并口12345678910111213141516171819202122232425A18A2A3A4A5A6A7A8Y18Y2Y3Y4Y5Y6Y7Y81OE2OE2468111317LPT_TMS15LPT_TDO11918161412973512345678C433pFVcc33pFC1烧写程序Jflash简介有了前面的下载线,再使用Jflash软件,就可以把程序烧写到闪存中。Jflash是使用JTAG口直接写闪存的流行工具。Jflash在Linux和Windows操作系统中都可以使用,现在主要还是介绍在Linux中的使用。Jflash在S3C2410的嵌入式系统中进行烧写时在屏幕上的输出如图4-4所示。图4-4闪存烧写程序JflashJflash命令格式:./jf2410/f:test,test是要烧写到闪存的文件。从图4-4中输出的信息可以看出Jflash的版本是v0.3,嵌入式系统中S3C2410处理器的ID是0x0032409d,这个程序当前支持的闪存有K9S1208(Samsung公司的NandFlash)和28F128J3A(Intel公司的NorFlash)。此外,还支持内存的读/写操作,包括硬件存放器的读/写,在开发调试中,这个功能比较有用。4.3Linux操作系统移植Linux操作系统是一个完全开放源代码的操作系统,用户可以自己下载、阅读、修改并重新编译内核,从而使开发人员能够完全自己定制相关的操作系统功能,以适合自己的需要。在Linux操作系统应用到一个新的系统平台时,需要进行代码修改,也就是操作系统的移植。嵌入式系统和PC不同之处在于嵌入式系统的硬件设备多种多样,同时由于资源的限制,操作系统又不能太庞大,因此需要针对具体系统进行裁剪。4.3.1Bootloader概述基于IntelX86体系结构的PC也一样需要使用Bootloader。计算机上电后从地址0xFFFF0取第一条指令,这个地址存放的就是计算机主板的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中的物理地址。以后的内核用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操作系统目录结构移植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内核加载到内存,还要将参数传递内核。以后的内核以标记列表(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根底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开发工具。CodeWarriorIDECodeWarriorIDE是基于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)在线仿真器ICE2.ADS工具介绍(1)CodeWarrior集成开发环境CodeWarrior集成开发环境(CodeWarriorIDE)是一套专为基于ARM处理器而设计的、完整的集成开发工具,它充分发挥了ARM处理器体系结构的优势。开发人员只需在一个集成软件环境中就能完成ARM应用开发的各个阶段。在整个开发周期中,开发人员无需离开CodeWarrior开发环境,节省了在不同环境工具间的切换等,使得开发人员有更多的精力投入到代码的编写和调试中。(2)ADS调试器ADS调试器(AXD)是一个工具软件,用户使用AXD可以对用户程序进行诸如断电的设置与去除、程序运行控制、单步执行、存放器数据监视和变量的查看等调试操作。AXD挂接在CodeWarriorIDE中,用户可在CodeWarriorIDE中直接点击启动AXD,调试用户程序;也可以单独启动AXD,加载、调试用户代码。4.4.2ADS中的工程管理工具CodeWarriorIDE1.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所示。Disass

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论