第2章嵌入式系统开发环境•了解交叉编译的基本知识•了解SkyEye的起源和发展、目标和意义•掌握SkyEye的配置文件skyeye.conf•掌握交叉编译环境的创建•掌握QEMU、GDB的安装及简单使用•掌握SkyEye的安装及简单使用•掌握TFTP、NFS服务器的搭建本章学习目标2.1嵌入式系统开发环境简介交叉编译环境交叉开发环境是由开发主机和目标板两套计算机系统构成的。仿真器交叉编译环境组成2.2OK2440-II开发平台介绍OK2440II开发套件包含:1)一块已测试好的OK2440II开发板(包括OK2440II核心板与OK2440II底板)2)OK2440II用户光盘3)3.5TFTSumsangLCD一块,带触摸屏4)一个JTAG板(带20芯排线)5)一条串口线(一头针一头孔,串口线)6)一条网线(交叉网线)7)一条USB线8)一支触摸笔9)一个5V直流电源适配器10)一个包装盒使用步骤:外部硬件连接;Windows下驱动的安装;1)安装USB驱动2)安装并口驱动程序3)调试终端的使用4)BootLoader的使用DNW软件是三星公司为S3C2440芯片配置的一款专用软件,可以在Windows下通过USB烧写Flash。在PC机上打开DNW(v0.50A),依次选择“Configuration”→“Options”,如图所示,具体设置为:COM1、波特率为115200、DownloadAddress设置为0x32000000(此参数为下载到内存的地址。DNW调试终端的使用DNW调试终端的使用Windows超级终端的使用Windows超级终端的使用Windows超级终端的使用本地编译器2.3交叉编译的基本知识编译器可以生成用来在与编译器本身所在的计算机和操作系统(平台)相同的环境下运行的目标代码,这种编译器叫做本地编译器。交叉编译器编译器也可以生成用来在其他平台上运行的目标代码,这种编译器叫做交叉编译器SoftwareDevelopmentKit,是ARM公司为方便用户在ARM芯片上进行应用软件开发而推出的一整套集成开发工具。最新版本是2.5.2,被ARMADS取代。2.3.1ARM编译环境1.SDTARMADS(ARMDeveloperSuite)在1993年由Metrowerks公司开发,是ARM处理器最主要的开发工具。2.ADSMDK-ARM也称KEILMDK-ARM、KEILARM、RealviewMDK、I-MDK、uVision4等,系为同一产品。MDK-ARM有四个可用版本,分别是MDK-Lite、MDK-Basic、MDK-Standard、MDK-Professional。3.MARK-ARM主要采用ARM+Linux开发环境。4.arm-linux-toolchainGNU提供的编译工具包括汇编器as、C编译器gcc、C++编译器g++、链接器ld和二进制转换工具objcopy。交叉编译工具链是一个由编译器、连接器和解释器组成的综合开发环境,主要由binutils、gcc和glibc3个部分组成。基于ARM平台的交叉编译工具链主要有:arm-linux-*和arm-elf-*。2.3.2ARM交叉编译工具链使用不同的C库文件。前者使用GNU的Glibc,后者使用uClibc/uC-libc。针对的开发环境不一样。前者针对ARM+Linux的开发环境的,OS使用Linux,不是uclinux,ARM有硬件MMU。后者针对noMMUARM+Linux的开发环境,OS使用uclinux,硬件是廉价的无MMU的ARM芯片。arm-linux-*和arm-elf-*区别1.编写C语言或汇编语言源程序这里介绍用vi编辑器进行源码编码。在终端中输入vihello.c,然后按键“i”则可进行代码编写。2.3.3嵌入式软件开发流程退出源码编写。按“ESC”;输入“:wq”,退出并保存源码,如果不保存,就直接输入“:q”则可。2.生成目标文件在终端中输入#arm-linux-gcc-c-O2-ohello.ohello.c源文件源文件和目标文件3.编写连接脚本文件gcc等编译器内置有缺省的链接脚本。为了能在嵌入式系统上直接运行,需要编写自己的链接脚本文件。GNU编译器生成的目标文件缺省为ELF格式。4.用链接器生成最终的目标文件在终端输入arm-linux-ld-nostadlib-obootstrap.elf-Tlink.ldshello.o最后是需要链接的目标文件列表。表示不链接系统的运行库,而是直接从_start入口指明目标文件的名称指明采用的链接脚本文件5.生成二进制代码在终端输入arm-linux-objcopy-Obinarybootstrap.elfbootstrap.bin链接生成的ELF文件还不能直接下载执行,通过objcopy工具可生成最终的二进制文件指定生成为二进制格式文件6.反汇编目标代码在终端输入arm-linux-objdump-Dbootstrap.elf用objdump工具将生成的目标代码反汇编,建立交叉编译工具链有两种方法:自己编译生成交叉编译工具链;从网上下载或使用开发板光盘提供的的交叉编译工具链。2.4实例——创建交叉编译环境1.从网上下载或者光盘提供的交叉编译工具链(1)从网上下载arm-linux-gcc或arm-linux-tools压缩包(2)解压arm-linux-gcc-2.95.3.tar.bz2到/usr/local/arm/中#mkdir/usr/local/arm#tar-tvfarm-linux-gcc-2.95.3.tar.bz2#tar-xjvfarm-linux-gcc-2.95.3.tar.bz2-C/usr/local/arm/#ls-F/usr/local/arm/2.95.3/(3)解压arm-linux-gcc-3.4.1.tar.bz2到/usr/local/arm/中#tar-tvfarm-linux-gcc-3.4.1.tar.bz2#tar-xjvfarm-linux-gcc-3.4.1.tar.bz2-C/#ls-F/usr/local/arm/3.4.1/注:arm-linux-gcc-2.95.3版本的交叉编译器用于编译Linux2.4内核。arm-linux-gcc-3.4.1及其以后版本的交叉编译器用于编译Linux2.6内核。(4)解压arm-linux-tools-20070808.tar.gz(4.2.1版本)#tar-tvfarm-linux-tools-20070808.tar.gz#tar-xzvfarm-linux-tools-20070808.tar.gz-C/#arm-linux-Tab键#whicharm-linux-gcc#ll/usr/local/bin/arm-linux-*(5)安装arm-elf-tools-20040427.sh工具包#lessarm-elf-tools-20040427.sh#chmod+xarm-elf-tools-20040427.sh#./arm-elf-tools-20040427.sh#ll/usr/local/bin/arm-elf-*#whicharm-elf-gcc2.自己生成交叉编译器•(1)下载源文件、补丁和建立编译目录•(2)建立内核头文件•(3)建立二进制工具(binutils)•(4)建立初始编译器(bootstrapgcc)•(5)建立C库(glibc)•(6)建立全套编译器(fullgcc)QEMU是一套由FabriceBellard编写的以GPL许可证分发源码的模拟处理器,在GNU/Linux平台上使用广泛。QEMU有两种主要运作模式:•①Usermode是使用者模式。•②Systemmode是系统模式。2.5实例——QEMU\GDB的安装及简单使用2.6SkyEye的安装及简单使用2.6.1SkyEye简介1.SkyEye的起源和发展2002年11月,清华大学计算机系的博士后陈渝提出2002年12月,SkyEye项目正式建立目前,SkyEye的主要开发人员还有韩超、康烁等。2.SkyEye的目标和意义目标:在通用的Linux和Windows平台上实现一个纯软件集成开发环境,模拟常见的嵌入式计算机系统;可在SkyEye上运行μCLinux以及μC/OS-II等多种嵌入式操作系统和各种系统软件,并可对他们进行源码级的分析和测试。2.SkyEye的目标和意义SkyEye是一个指令级模拟器,可以模拟多种嵌入式开发板;可支持多种CPU指令集;SkyEye的目标不是验证硬件逻辑,而是协助开发、调试和学习系统软件。2.SkyEye的目标和意义意义:可以很方便地进行嵌入式系统软件的学习和开发;可以有效地提高工作效率;SkyEye本身作为一个开放式的项目体系,可以划分为多个独立的子项目系统。3.SkyEye模拟硬件介绍(1)CPU和开发板系列——SkyEye可以模拟的CPU主要是基于ARM内核的CPU,包括ARM7TDMI、ARM720T、ARM9TDMI、ARM9xx、ARM10xx、StrongARM、XScale等。——SkyEye模拟的开发板包括:基于Atmel91X40/AT91RM92CPU的开发板、基于CrirusLogicep7312的开发板、基于StrongARMCPU的ADSBITSY开发板,基于XScalePXA250CPU的LUBBOCK开发板、基于SAMSUNGS3C4510B/S3C44B0CPU的开发板、基于SHARPLH7A400CPU的开发板、基于PhilipLPC22xxCPU的开发板等。(2)存储器管理单元和缓存单元——MMU、CACHE。(3)网络芯片——目前SkyEye模拟了网络芯片8019AS。1、安装SkyEye(1)解压源码包#tar-xjvfskyeye-1.2.6_rc1.tar.bz2-C./(2)编译skyeye-1.2.6#cdskyeye-1.2.6_rc1#ls//INSTALL文件包含安装帮助信息#geditINSTALL2.6.2实例—安装SkyEye-1.2.6//配置,--prefix设置skyeye1.2.6的安装位置#./configure--prefix=/opt/skyeye1.2.6#make//编译//将skyeye安装到/opt/skyeye1.2.6/bin/#makeinstall#ll/opt/skyeye1.2.6/bin/skyeye2、SkyEye配置选项•查看SkyEye的配置文件skyeye.conf。•SkyEye模拟的硬件配置和模拟执行行为由配置文件skyeye.conf中的选项确定。skyeye.conf文件:#skyeyeconfigfileforS3C2410Xcpu:arm920tmach:s3c2410x#physicalmemorymem_bank:map=M,type=RW,addr=0xc0000000,size=0x00800000mem_bank:map=M,type=RW,addr=0xc0800000,size=0x00800000,file=./initrd.imgmem_bank:map=M,type=RW,addr=0xc1000000,size=0x01000000#allperipheralsI/Omappingareamem_bank:map=I,type=RW,addr=0x48000000,size=0x20000000mem_bank:map=I,type=RW,addr=0x19000300,size=0x00000020net:type=cs8900a,base=0x19000300,size=0x20,int=9,mac=0:4:3:2:1:f,ethmod=tuntap,hostip=10.0.0.1lcd:typ