嵌入式开发环境.ppt
《嵌入式开发环境.ppt》由会员分享,可在线阅读,更多相关《嵌入式开发环境.ppt(53页珍藏版)》请在三一办公上搜索。
1、第4章 嵌入式开发环境,本章主要内容:,1.嵌入式系统软件开发环境的建立2.嵌入式程序调试烧写工具 3.Linux操作系统移植 4.ARM开发工具ADS等,4.1建立嵌入式系统的软件开发环境,本节主要介绍Linux操作系统。Linux操作系统和引导程序的编译,根文件系统的制作等都要在Linux环境下进行。因此,需要一台安装有Linux操作系统的PC作为软件开发的机器。如果现在使用的是安装了Windows的计算机,那么最好的办法就是在Windows里安装一个虚拟机,然后再在虚拟机里安装Linux操作系统,这样既不影响原来的工作环境,又可建立新的开发环境。,4.1.1 在虚拟机上运行Linux操作
2、系统,PC上常用的虚拟机软件有VMWare和Virtual PC两种。根据实际需求,选择分配给虚拟机的硬盘空间。Redhat Linux典型的安装一般是2GB左右,因此选择8GB的空间就足够用了。通过共享文件夹的方式,在虚拟机中还可以访问到Windows下的文件。,在虚拟机中可以通过挂起系统的方式,保存当前的工作环境,当重新启动虚拟机时,再恢复到前一次的工作环境,继续没有完成的工作。这样启动的速度比重新启动系统要快得多。在虚拟机上运行Linux如图4-1所示。,图4-1 在虚拟机上云新Linux,常用辅助工具,嵌入式Linux一般使用ARM处理器的第一个串口做为默认的控制台设备,启动过程中,L
3、inux利用printk向串口输出启动信息。在进行引导程序或操作系统移植等工作时,经常利用串口输出的信息进行调试。常用的串口工具有secureCRT、Windows自带的超级终端和网上可以下载的免费串口工具(如串口助手和丁丁串口工具等)。,图4-2嵌入式系统调试用的串口工具secureCRT的窗口,4.2程序调试烧写工具,学习嵌入式开发的第一个问题通常是想了解程序是怎么烧写到闪存的。烧写的方式有两种,一种方法是用编程器进行烧写,这通常是在生产中进行的;另一种方法是用通常芯片的JTAG口进行烧写,在研发调试过程中一般采用这种方法。,4.2.1 JTAG烧写线的制作,JTAG下载线非常简单,就是利
4、用PC并行端口的输出带锁存的特点,使用软件通过并口引脚产生JTAG时序。计算机并行口引脚的定义如表4-1所列。,表4-1 并行口引脚,使用D0D3作为JTAG接口的TCK、TDI和TMS,用PIN11(BUSY)作为TDO。JTAG接口的另一个信号线TRST(复位信号线)并没有使用。电路图如图4-3所示。,图4-3 JTAG下载线电路图,烧写程序Jflash简介,有了前面的下载线,再使用Jflash软件,就可以把程序烧写到闪存中。Jflash是使用JTAG口直接写闪存的流行工具。Jflash在Linux和Windows操作系统中都可以使用,现在主要还是介绍在Linux中的使用。Jflash在S
5、3C2410的嵌入式系统中进行烧写时在屏幕上的输出如图4-4所示。,图4-4 闪存烧写程序Jflash,Jflash命令格式:./jf2410/f:test,test是要烧写到闪存的文件。从图4-4中输出的信息可以看出Jflash的版本是v0.3,嵌入式系统中S3C2410处理器的ID是0 x0032409d,这个程序当前支持的闪存有K9S1208(Samsung公司的Nand Flash)和28F128J3A(Intel公司的Nor Flash)。此外,还支持内存的读/写操作,包括硬件寄存器的读/写,在开发调试中,这个功能比较有用。,4.3 Linux操作系统移植,Linux操作系统是一个完
6、全开放源代码的操作系统,用户可以自己下载、阅读、修改并重新编译内核,从而使开发人员能够完全自己定制相关的操作系统功能,以适合自己的需要。在Linux操作系统应用到一个新的系统平台时,需要进行代码修改,也就是操作系统的移植。嵌入式系统和PC不同之处在于嵌入式系统的硬件设备多种多样,同时由于资源的限制,操作系统又不能太庞大,因此需要针对具体系统进行裁剪。,4.3.1 Bootloader概述,基于Intel X86体系结构的PC也一样需要使用Bootloader。计算机上电后从地址0 xFFFF0取第一条指令,这个地址存放的就是计算机主板的BIOS。BIOS完成开机时的硬件启动检测,然后读取硬盘的
7、引导扇区。对于使用Linux操作系统的计算机,引导扇区上的程序先读入引导程序LILO或是GRUB,再由引导程序把Linux装入到内存中,然后把控制权交给Linux。,1.Bootloader主要功能包括启动和下载。,启动功能:所谓启动功能就是Bootloader从嵌入式系统的固态存储器(通常都是Flash)上将操作系统加载到RAM中运行,然后将控制权交给操作系统,之后由操作系统接管系统的初始化和引导操作系统。对于使用Linux操作系统的ARM嵌入式系统,Bootloader必须给Linux准备必要的运行环境:,Bootloader给Linux准备必要的运行环境,ARM处理器的寄存器必须满足r0
8、=0,r1=设备类序号(machine type number),r2=启动参数tagged list再ARM中的物理地址。以后的内核用tagged list的形式来传递启动参数。启动参数从ATAG_CORE开始,至ATAG_NONE结束。屏蔽所有中断,ARM处理器运行模式在SVC模式。MMU必须处于关闭状态,数据高速缓冲(Data cache)必须关闭。,下载功能:在嵌入式系统开发的过程中,需要移植操作系统、编写设备驱动等工作,在调试过程中,可能要多次下载内核映像文件到存储介质中。Bootloader可以通过串口、USB口或以太网口等通信接口由PC(主机)下载内核映像文件。内核映像文件先下载
9、到SRAM中,这时可以直接转移到内核映像运行,也可以把内核映像写到Flash的内核分区。Bootloader通过串口进行文件传输时。使用xmodem、ymodem或zmodem协议。在开发调试时,串口传输的速度比较慢。因此,目前比较流行的Bootloader都支持以太网连接,通过TFTP来下载文件。,目前用于ARM嵌入式Linux系统比较流行的Bootloader由U-Boot、vivi、Redboot和Blob等。各种Bootloader的实现各有特点,但完成的工作都是类似的。有的主要是在ARM嵌入式系统中使用,如ARMboot、vivi和Blob等;有些支持多种硬件平台,如U-Boot和R
10、edboot等。如果对Bootloader的功能要求不多,仅是把操作系统从Flash复制到RAM中运行,完全可以自己编写一个Bootloader。,2.常见的一些Bootloader,(1)U-Boot(2)vivi(3)RedBoot(4)Blob,操作系统目录结构,移植Linux操作系统就是修改平台相关的源文件,因此要知道这些文件在源代码树中的位置,也就是要了解Linux的目录系统结构,了解各个目录下源代码文件的功能。Linux操作系统源代码非常庞大、复杂,要全部阅读理解完整的内核代码几乎是不可能的。但内核代码文件的组织是非常清晰的,每一个目录都对应特定功能。系统的移植只是涉及其中很小一部
11、分代码。,以内核版本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 内核头
12、文件目录。其中目录asm-XXX是不同处理器结构相关的头文件,对于ARM处理器是asm-arm。init 系统初始化可以分为两个阶段,第一个阶段是和处理器结构紧密相关的代码,基本是用汇编语言写的;,第二个阶段是与处理器无关的代码,用C语言编写,这部分文件就放在这个目录中。ipc 进程间通信相关文件目录,如消息队列、信号量和共享内容等。kernel 与结构无关的基本内核文件的目录。lib 内核库函数文件目录。mm 内存管理文件目录。net 网络协议相关文件目录,如IPV4、IPV6等。scripts 这个目录存放编译内核时需要使用到一些脚本文件。security内核安全相关文件目录。sound
13、音频相关的文件目录。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.3 Bootl
14、oader与Linux操作系统,Bootloader的功能不只是把Linux内核加载到内存,还要将参数传递内核。以后的内核以标记列表(tagged list)的形式来传递启动参数。参数的列表以标记ATAG_CORE开始,以标记ATAG_NONE结束。每个标记由表示被传递参数的tag_header结构以及随后的参数值数据结构来组成。参数必须存放在系统的RAM中,推荐放在RAM的前16KB的位置。,在嵌入式Linux系统中,常见启动参数,ATAG_CORE、ATAG_MEM、ATAG_CMDLINE、ATAG_RAMDISK和ATAG_INITRD等。,4.3.4 编译及配置内核,Linux内核源
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 嵌入式 开发 环境
链接地址:https://www.31ppt.com/p-6277669.html