


Click to edit Title Slide,Click to edit Master text styles,Second level,Third level,Fourth level,Fifth level,嵌入式,Linux,开发环境搭建,广州嵌入式软件公共技术支持中心,梁老师,2007,年,04,月,嵌入式系统定义,嵌入到对象体中的专用计算机系统,三要素:,嵌入、专用、计算机,嵌入式系统的特点,:,由三要素引出,嵌入性,:嵌入到对象体系中,有对象环境要求,专用性,:软、硬件按对象要求裁减,计算机,:实现对象的智能化功能,嵌入式系统的应用,嵌入式Linux开发环境,嵌入式系统通常是一个资源受限的系统,因此直接在嵌入式系统的硬件平台上编写软件比较困难,有时候甚至是不可能的解决办法:,首先在通用计算机上编写程序;,然后通过,交叉编译,生成目标平台上可以运行的二进制代码格式;,最后,再下载到目标平台上,的特定位置上运行嵌入式Linux开发环境,关于交叉编译,在一种平台上编译出能在另一种平台(体系结构不同)上运行的程序在,PC,平台,(X86 CPU),上编译出能运行在,arm,平台上的程序,编译得到的程序在,X86 CPU,平台上是不能运行的,必须放到,arm,平台上才能运行。
用来编译这种程序的编译器就叫,交叉编译器,为了不跟本地编译器混淆,交叉编译器的名字一般都有前缀例如:,arm-linux-gcc,嵌入式Linux开发环境,嵌入式Linux开发环境,嵌入式Linux开发环境,需要交叉开发环境(,Cross Development Environment,)的支持是嵌入式应用软件开发时的一个显著特点交叉编译器只是交叉开发环境的一部分交叉开发环境,是指编译、链接和调试嵌入式应用软件的环境,它与运行嵌入式应用软件的环境有所不同,通常采用,宿主机目标机模式,嵌入式Linux开发环境,宿主机目标板模式,宿主机(,Host,)是一台通用计算机,它,通过串口或者以太网接口与目标机通信,宿主机的软硬件资源比较丰富,能够大大提高嵌入式应用软件的开发速度和效率目标板(,Target,),应用程序实际运行的平台,或者是能够替代实际运行环境的仿真系统软硬件资源通常都比较有限嵌入式Linux开发环境,宿主机目标机模式,首先利用宿主机上丰富的资源和良好的开发环境开发和仿真调试目标机上的软件;,然后通过串口或者以网络将交叉编译生成的目标代码传输并装载到目标机上,并在监控程序或者操作系统的支持下利用交叉调试器进行分析和调试;,最后目标机在特定环境下脱离宿主机单独运行。
嵌入式Linux开发环境,开放的交叉开发环境的典型代表是GNU工具链目前已经能够支持x86、ARM、MIPS、PowerPC等多种处理器商业的交叉开发环境则主要有Metrowerks CodeWarrior、ARM Software Development Toolkit等等嵌入式Linux开发环境,GNU,交叉工具链,交叉编译器,例如,arm-linux-gcc,交叉汇编器,例如,arm-linux-as,交叉链接器,例如,arm-linux-ld,用于处理可执行程序和库的一些基本工具例如,arm-linux-strip,嵌入式Linux开发环境,GNU,交叉工具链的下载,ARM,官方网站下载,可以从该站点下载以及,3.2,工具链,嵌入式Linux开发环境,包的安装:,mkdir/usr/local/arm,cp cross-2.95.3.tar.bz2/usr/local/arm,添加环境变量,在文件,/etc/bashrc,文件最后添加:,export PATH=/usr/local/arm/2.95.3/bin:$PATH,工具,链安装完,成嵌入式Linux开发环境,GNU交叉工具链的常用工具介绍,嵌入式Linux开发环境,主要工具的使用,arm-linux-gcc,的使用,arm-linux-gcc o hello hello.c,arm-linux-ar,和,arm-linux-ranlib,的使用,建立一个静态库,arm-linux-ar r libhello.a h1.o h2.o,为静态库建立索引,arm-linux-ar s libhello.a,arm-linux-ranlib libhello.a,由静态库产生可执行文件,arm-linux-gcc-o hello hello.c lhello L./,arm-linux-gcc-o hello hello.c libhello.a,嵌入式Linux开发环境,主要工具的使用,arm-linux-strip,的使用,移除所有的符号信息,-strip-all,Cp hello hello1,arm-linux-strip,-strip-all,hello,-rwxr-xr-x 1 arm root,2856,7,月,3 15:14 hello,-rwxr-xr-x 1 arm root,13682,7,月,3 15:13 hello1,被,strip,后的,hello,程序比原来的,hello1,程序要小很多。
移除调试符号信息,-g,arm-linux-strip -g hello,-rwxr-xr-x 1 arm root,4501,7,月,3 15:17 hello,-rwxr-xr-x 1 arm root,13682,7,月,3 15:13 hello1,远程访问目标板,如何观察应用程序在目标板的运行情况,即查看程序的输出信息?,通过串口线连接宿主机和目标板配置串口做为目标板的输出设备例如在交叉编译目标板的,linux,内核时,配置指定终端为串口:,noinitrd root=/dev/mtdblock2 init=/linuxrc console=ttyS0,115200,在宿主机上通过串口通信软件查看目标板系统的运行情况远程访问目标板,超级终端的使用,打开超级终端,超级终端程序通常位于附件中的通讯中,,“Hypertrm”,图标所指即是超级终端程序为新的连接取一个名字,远程访问目标板,超级终端的使用,选择连接目标板的串口,远程访问目标板,超级终端的使用,设置串口,注意必须选择,无流控制,,否则只能看到输出而不能输入串口波特率是,11520,远程访问目标板,超级终端的使用,当所有的连接参数都设置好以后,打开目标板电源开关,就会看到系统,的启动信息,当,Linux,启动以后,超级终端就相当于虚拟终端,可通过它来操作目标板。
选择超级终端“文件”菜单下的“另存为,”,,保存该连接设置,以便于以后再连接时就不必重新执行以上设置了,远程访问目标板,超级终端的使用,打开目标板电源开关,就会看到系统,的启动信息,当,Linux,启动以后,超级终端就相当于虚拟终端,可通过它来操作目标板远程访问目标板,minicom,的使用,minicom,的设置:,minicom-s,远程访问目标板,minicom,的使用,选择串口,选择菜单中的“,Serial port setup”,,按回车,进入如下图所示界面按“,A”,以设置“,Serial Device”,(串口,1-/dev/ttyS0,,串口,2-/dev/ttyS1),远程访问目标板,minicom,的使用,设置波特率,按“,E”,键进入设置“,bps/par/Bits”,(波特率)界面再按“,I”,以设置波特率为,115200,远程访问目标板,minicom,的使用,设置无流控制,按回车退回到上一级菜单,按“,F”,键设置“,Hardware Flow Control”,为“,NO”,,其他选项使用缺省值远程访问目标板,minicom,的使用,保存设置,再选择“,Exit”,退出设置模式。
刚才的设置被保存到“,/etc/minirc.dfl”,设置完毕,打开目标板电源的电源开关,,minicom,输出目标板的启动信息,当,Linux,启动以后,,minicom,就相当于虚拟终端,可通过它来操作目标板远程访问目标板,minicom,的使用,退出,minicom,同时按下“,Ctrl+A”,键,紧接着再按下“,Q”,键,在跳出的窗口中,选择“,Yes”,下载程序映象到目标板,通过串口下载,使用三星公司的,DNW,软件设置波特率,115200,、端口号、下载地址,0 x30200000,上电启动开发板,进入,BIOS,界面,选择,2,串口下载,点击“,serial port”,菜单,选择“,Transmit”,选项,下载程序映象到目标板,通过,usb,下载,同样使用三星公司的,DNW,软件设置波特率,115200,、端口号、下载地址,0 x30200000,上电启动开发板,进入,BIOS,界面,接上,USB DEVICE,的连接线,选择“,0”,,选择,USB,下载,注意用,USB,下载要先在,PC,端装好驱动程序,保证,USB,连接好有时,PC,端出现发现无法识别的,USB,设时,可在,BIOS,中输入,ESC,取消下载,等几秒钟再输入“,0”,启动,USB,下载。
出现“,Now USB is connected”,说明,USB,正确枚举点击“,USB Port”Transmit”,选项下载程序映象到目标板,通过,TFTP,方式下载,TFTP,协议是简单的文件传输协议,适合目标板,Bootloader,的使用u-boot,、,vivi,),TFTP,文件传输基于,UDP,通过,TFTP,来传输目标板启动需要的内核映象文件,zImage,传输速度快,使用方便下载程序映象到目标板,通过,TFTP,方式下载,tftp,分服务器和客户端在宿主机开启,tftp,服务,设置好,tftp,的根目录内容,在目标板开启,tftp,客户端程序在目标板的,bootloader,交互节目中通过,tftpboot,命令下载内核tftpboot 0 x30200000 zImage,下载程序映象到目标板,通过,TFTP,方式下载,Linux,的,tftp,服务器的配置,编辑,/etc/xinetd.d/tftp,只有在安装了,tftp,服务后,才会出现,tftp,文件修改其中,disable,和,server_args,项,其余可保持不变Service tftp,socket type=dgram,protocol=udp,wait=yes,user=root,server=/usr/sbin/in.tftpd,server_args=-s/tftpboot-,设置,tftp,服务输出目录。
disable=no-,默认为,yes,,应修改成,no,per_source=11,cps=100 2,flags=IPv4,下载程序映象到目标板,通过,TFTP,方式下载,重启,xinetd,服务,使得更改的配置有效,Service xinetd restart,确认,tftp,服务是否已经开启,netstat -au,在目标板启动,tftp,客户端程序,tftpboot 0 x30200000 zImage,下载信息:,Filename zImage.,Load address:0 x30200000,Loading:,#,#,#,done,Bytes transferred=913880(df1d8 hex),下载程序映象到目标板,通过挂载,NFS,方式下载,NFS,服务就是将宿主机的一个目录通过网络可以被挂载到其他计算机上,并且,作为其他计算机的一个目录,在嵌入式开发中,通过,NFS,可以很方便的将修改的文件通过,NFS,传输到目标板上不用反复烧写镜像文件下载程序映象到目标板,通过挂载,NFS,方式下载,NFS,的使用分服务器端和客户端,服务器端提供要共享的文件,客户端通过挂载“,mount”,实现对共享文件的访问操作。