《新主机开发环境》PPT课件.ppt

上传人:tia****nde 文档编号:13101443 上传时间:2020-06-05 格式:PPT 页数:94 大小:4.62MB
返回 下载 相关 举报
《新主机开发环境》PPT课件.ppt_第1页
第1页 / 共94页
《新主机开发环境》PPT课件.ppt_第2页
第2页 / 共94页
《新主机开发环境》PPT课件.ppt_第3页
第3页 / 共94页
点击查看更多>>
资源描述
2013/01,北方学院信息学院,嵌入式系统实践教程,第3章主机开发环境配置,虽然Linux编程环境能够支持众多编程语言,例如C、C+、Java、Perl、Python、Ada、Forth、Lisp、Fortran等等,但是目前最常用的是C语言。本章主要描述了使用C语言编程时,主机开发环境的跨平台工具链的安装。另外目标板在运行程序时,使用到网口和串行端口,因此需要事先对主机Linux环境网络和串行端口进行配置。,3.1交叉开发平台基础,3.1.1本地开发及交叉开发本地开发本地开发(nativedevelopment)也称本机开发,指的是在主机某种操作系统下对源程序进行编译、链接,产生的可执行文件仍然能够在相同的主机和相同的操作系统下运行。Linux系统支持本地开发的软件,主要指编译器及C程序库等,它们通常包含在Linux发行套件中,主机安装Linux系统时,会同时将其安装在硬盘。,交叉开发交叉开发(crossdevelopment)主要是指,在主机编译源程序并构建能够在目标板上运行的可执行文件的过程,并且主机、目标板处理器架构应该是不同的。例如在PC机对源程序进行编译、链接,并且产生可以在基于ARM处理器架构的目标板上运行的文件的过程。这里通常主机和目标板运行的应该是相同的操作系统,如Linux。,交叉开发过程中,在主机输入源程序、编译、链接,仅仅在目标板上运行程序,主要原因是目标板上硬件资源少,缺少键盘、显示器、硬盘;内存容量比较小;处理器速度比较慢。,3.1.2GNU跨平台工具链组成跨平台工具链(cross-platformtoolchain)经常被简写为交叉工具链(crosstoolchain),或者就称为工具链(toolchain)。本书中出现的工具链一词,通常指的是跨平台工具链,有时也称为交叉编译器。Linux使用的工具链的大部分组件来自GNU项目。,工具链通常包含以下二进制(可执行文件)工具程序:预处理器、链接器、汇编器、打包器(archiver)、C(或其他语言的)编译器,以及C程序库与它的头文件。其中,C程序库与它的头文件是一种共享程序库,其行为有如内含“原始Linux内核API”的打包程序,而且在Linux系统中执行的任何应用程序几乎都会用到它。,3.1.3如何获取工具链根据自己的开发环境,通过以下4种途径可以获得工具链:购买一个商业版的工具链。网上下载一个免费的工具链。购买目标板时,附带的光盘上通常会带有一个工具链。网上下载组成工具链的源代码,使用工具自行创建一个工具链。购买目标板所附带的工具链,是大多数用户最常使用的工具链,使用时要安装到主机Linux系统下。,3.1.4工具链的组件及GDB简介工具链组件简介GCC编译器集GCC(GNUCompilerCollection,GNU编译器集)并不仅仅是个C编译器,它是一个GNU编译器集,能够支持对C、C+、ObjectiveC、Java、Fortran(F77)以及Ada语言的编译。可以对GCC进行配置,使GCC能够为不同的目标处理器生成代码,使之成为一个交叉编译器。目前GCC支持的处理器体系结构有40余种,常见的有x86、ARM、PowerPC等。GCC除了能够在Linux环境下运行,还可以在Windows下运行。GCC是一个能够控制很多其他工具的前端软件,被控制的工具在编译过程中会使用到,如cpp预处理器、C编译器、汇编器、链接器等。,GNUbinutils工具链的另一个重要的组件是GNUbinutils套件,此套件中含有两个重要的工具程序,GNU汇编器as以及GNU链接器ld。此外还有10多个工具程序,如ranlib是为archive(静态程序库)的内容产生索引、strip是用于去除目标文件中的符号,等等。,标准C程序库Linux用到的标准C程序库就是GNUC程序库,常被写作glibc。glibc是一个可移植、高性能的C程序库,支持所有相关标准(ISOC99、POSIX.1c、POSIX.lj、POSIX.1d、Unix98以及SingleUnixSpecification)。,线程程序库Linux内核2.6版之前对线程的支持非常有限。Linux2.6系列随附了一个新的线程实验品,称为NewPOSIXThreadingLibrary,即新的POSIX线程库NPTL。NPTL所依靠的是Linux内核对线程新的支持。NPTL被当作glibc新近版本的一部分对外发布。,Linux内核头文件工具链中会用到某一版本的Linux内核头文件,目的是支持程序员编程中使用到的对Linux内核的系统调用。构建工具链用到的Linux内核文件,应该与目标板上使用的Linux内核,来自相同的版本。,GDB简介GDB(GNUDebugger)通常不包括在工具链中,是一个Linux上最常用的调试器工具。GDB需要进行编译,使之能够调试运行在目标板处理器上的代码。调试器本身运行在主机,能够对目标板上的代码进行调试,被称为远程调试。运行被调试的程序时,目标板上同时还要运行一个占位程序,占位程序通常是gdbserver,通过串口或网口连接,负责与运行在主机上的GDB调试程序进行通信。,3.2交叉工具链安装举例,通常购买目标板时会随附一张光盘,光盘上不同目录下可能会有支持Linux、WindowsCE和C/OS系统的程序。工具链安装到主机的方法有两种:一种是在主机运行Linux系统时,进入光盘中与Linux相关的目录,启动install.sh安装脚本程序,系统会自动将交叉工具链(包含相关库)安装到主机硬盘指定的目录。另外光盘上还可能有一些实验例程,将会一同被安装到主机硬盘指定的目录。另一种是手工安装,例如输入命令将光盘工具链压缩包拷贝到主机Linux指定目录、输入命令解压缩并安装到指定目录。,以下将交叉工具链称为交叉编译器,安装过程针对EL-ARM860教学实验系统。要安装的交叉编译器压缩包文档名为:arm-2007q3-51-arm-none-linux-gnueabi-i686.tar.bz假定主机在Windows环境下已经安装了虚拟机及RedHatEnterpriseLinux5操作系统。,交叉编译器可以从光盘或U盘拷贝到Linux的/usr/local子目录下,然后在该子目录下建立arm子目录,交叉编译器解压缩后存放在/usr/local/arm子目录下。安装、解压缩交叉编译器后,要在/root/.bashrc文件中增加路径环境变量,并重启这个文件,之后系统就能够在指定路径下自动找到该交叉编译器,而不用每次使用时都要指出其绝对路径。,3.2.1交叉工具链安装举例从光盘将交叉编译器拷贝到/usr/local子目录假定交叉编译器在光盘如下子目录:/OMAP3530/软件目录/tools/。启动虚拟机、运行Linux后,光驱中插入对应光盘,在虚拟机窗口右下,点击光盘图标,点击Connect菜单条,在Linux图形桌面点击光盘图标,查找并选择交叉编译器arm-2007q3-51-arm-none-linux-gnueabi-i686.tar.bz,选择复制菜单条,如图3.1所示。,图3.1选择光盘中的交叉编译器,然后在Linux图形桌面环境,在/usr/local子目录,点击鼠标右键,选择“粘贴1个URL”,交叉编译器将会粘贴到该子目录,如图3.2所示。,图3.2粘贴交叉编译器,从U盘将交叉编译器拷贝到/usr/local子目录如果交叉编译器在U盘,可以使用如下方法。同样先启动虚拟机、运行Linux,然后在Windows窗口,选择U盘中的交叉编译器文件,选择复制菜单,如图3.3所示。然后将该文件粘贴到Linux的/usr/local子目录。,图3.3选择U盘中的交叉编译器,建立/usr/local/arm子目录并解压缩交叉编译器在Linux终端窗口输入如下命令,将建立/usr/local/arm子目录,然后将交叉编译器解压缩到该子目录下。要求启动Linux时,以root用户名登录。rootlocalhostlocal#mkdir/usr/local/armrootlocalhostlocal#tarxvjfarm-2007q3-51-arm-none-linux-gnueabi-i686.tar.bz-C/usr/local/arm,解压缩后的代码分6个子目录保存,可以用如下命令查看。rootlocalhostlocal#cd/usr/local/armrootlocalhostarm#ls-l总计8drwxr-xr-x8rootroot409612-2510:30arm-2007q3rootlocalhostarm#rootlocalhostarm#cdarm-2007q3rootlocalhostarm-2007q3#ls-l总计48,drwxrwxr-x6rootroot40962007-09-28arm-none-linux-gnueabidrwxr-xr-x2rootroot40962007-09-28bindrwxrwxr-x2rootroot40962007-09-28includedrwxrwxr-x3rootroot40962007-09-28libdrwxrwxr-x4rootroot40962007-09-28libexecdrwxrwxr-x3rootroot40962007-09-28share,3.2.2对查找工具链的路径变量进行修改安装了交叉编译器后,需要修改/root/.bashrc文件内容,应该在这个文件中增加一行语句,指出交叉编译器所在的路径。之后每当打开终端窗口时,Linux自动运行/root/.bashrc文件,给出缺省路径名的交叉编译器的查找路径。,在/root/.bashrc文件中增加语句可以用如下命令检查原来的路径变量值:rootlocalhostlocal#echo$PATH/usr/lib/qt-3.3/bin:/usr/kerberos/sbin:/usr/kerberos/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/usr/X11R6/bin:/root/bin,然后用vi增加一行语句:rootlocalhostlocal#vi/root/.bashrcexportPATH=/usr/local/arm/arm-2007q3/bin:$PATH,vi是一个文本编辑程序,如同Windows下的记事本。进入vi后,输入“a”或“i”即进到插入状态。输入Esc、Esc、:、w、q、!键后,保存文件并退出vi程序。,重启/root/.bashrc文件可以使用source命令重启/root/.bashrc文件,然后系统才能修改查找路径:rootlocalhost#source/root/.bashrc如果不使用source命令重启文件,也可以用exit命令关闭终端窗口,然后再次打开终端窗口,打开终端窗口过程中系统会自动启动/root/.bashrc文件。,检查新的路径变量值用echo命令可以检查新的路径变量值:rootlocalhost#echo$PATH/usr/local/arm/arm-2007q3/bin:/usr/lib/qt-3.3/bin:/usr/kerberos/sbin:/usr/kerberos/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/usr/X11R6/bin:/root/bin,3.3主机Linux环境网络配置举例,3.3.1主机Linux环境IP地址设置主机Linux环境IP地址设置简介主机Linux环境IP地址,应该与目标板Linux的IP地址4个分组中的前3组完全相同,只允许最后一组不同。例如,目标板Linux的IP地址如果为192.168.1.9,那么主机IP地址前3组必须设置为192.168.1,最后一组可以是1253中的一个数字。以下例子中,假定主机IP地址设置为192.168.1.5。,主机Linux环境IP地址设置方法常用的方法有两种:一种是根据目标板LinuxIP地址,设置主机LinuxIP地址。这种方法需要先查询目标板LinuxIP地址,如果目标板还没有设置过IP地址,应该先进行设置。另一种是保留主机LinuxIP地址不变,根据这个地址设置目标板的IP地址。,目标板IP地址配置、检查如果目标板LinuxIP地址还没有配置,那么在minicom窗口输入ifconfig命令之后,没有任何输出信息:rootTechv_OMAP35xx:#ifconfigrootTechv_OMAP35xx:#,这时应该对目标板LinuxIP地址进行配置,假定配置为192.168.1.9,输入命令和参数,回车后显示:rootTechv_OMAP35xx:#ifconfigeth0192.168.1.9eth0:linkdownrootTechv_OMAP35xx:#eth0:linkup,100Mbps,full-duplex1,然后输入ifconfig命令,检查配置情况:rootTechv_OMAP35xx:#ifconfigeth0Linkencap:EthernetHWaddr00:00:AA:BB:CC:DDinetaddr:192.168.1.9Bcast:192.168.1.255Mask0UPBROADCASTRUNNINGMULTICASTMTU:1500Metric1RXpackets:4errors:0dropped:0overruns:0frame0TXpackets:0errors:0dropped:0overruns:0carri0collisions:0txqueuelen:1000RXbytes:1392(1.3KiB)TXbytes:0(0.0B)Interrupt:81DMAchan:ff,用上述方法配置的目标板LinuxIP地址,没有保留在目标板的外部存储器。目标板关机或RESET后丢失,下一次使用还需要重新配置。,主机LinuxIP地址配置、检查在主机终端窗口,输入ifconfigeth0192.168.1.5,将IP地址配置为192.168.1.5。rootlocalhost#ifconfigeth0192.168.1.5然后用ifconfig命令检查配置的参数:rootlocalhost#ifconfig,eth0Linkencap:EthernetHWaddr00:0C:29:5E:89:68inetaddr:192.168.1.5Bcast:192.168.1.255Mask:255.255.255.0inet6addr:fe80:20c:29ff:fe5e:8968/64Scope:LinkUPBROADCASTRUNNINGMULTICASTMTU:1500Metric:1RXpackets:19403errors:0dropped:0overruns:0frame:0TXpackets:38errors:0dropped:0overruns:0carrier:0,主机LinuxIP地址配置后的值,保存到外设,主机Linux在虚拟机中用挂起方式退出、关机后,再次启动仍保留以前配置过的值,直到下一次配置新的地址为止。如果主机Linux在虚拟机中以poweroff方式退出,再次以poweron方式启动运行Linux后,保存的IP地址丢失,需要重新配置。,3.3.2主机Linux环境网络防火墙设置设置方法:在主机Linux终端窗口,输入setup命令并回车,然后在弹出的菜单中选择“防火墙配置(Firewallconfiguration)”见图3.4,回车。,图3.4选择配置防火墙,之后在弹出的界面中用光标移动键选择“禁用”防火墙,选择“确定”后回车,退出设置,见图3.5。,图3.5选择禁用防火墙,另一种设置方法是:在主机Linux图形桌面,点击“红帽子”“安全级别和防火墙”,在弹出的窗口选择禁用防火墙,如图3.6所示。,图3.6在图形桌面设置禁用防火墙,3.3.3主机与目标板网络通信测试在主机终端窗口用命令测试主机与目标板的通信在主机Linux终端窗口,输入ping命令,后面跟随目标板IP地址,例如:rootlocalhost/#ping192.168.1.9可以用Ctrl+c键去终止ping命令。,PING192.168.1.9(192.168.1.9)56(84)bytesofdata.64bytesfrom192.168.1.9:icmp_seq=1ttl=64time=0.792ms64bytesfrom192.168.1.9:icmp_seq=2ttl=64time=0.278ms64bytesfrom192.168.1.9:icmp_seq=3ttl=64time=0.531ms64bytesfrom192.168.1.9:icmp_seq=4ttl=64time=0.335ms-192.168.1.9pingstatistics-4packetstransmitted,4received,0%packetloss,time2999msrttmin/avg/max/mdev=0.278/0.484/0.792/0.201ms,在目标板终端窗口用命令测试目标板与主机的通信在目标板终端窗口(输入minicom后的窗口),输入ping命令,后面跟随主机IP地址,例如:rootTechv_OMAP35xx:#ping192.168.1.5,PING192.168.1.5(192.168.1.5):56databytes64bytesfrom192.168.1.5:seq=0ttl=64time=8.484ms64bytesfrom192.168.1.5:seq=1ttl=64time=0.489ms64bytesfrom192.168.1.5:seq=2ttl=64time=0.458ms.-192.168.1.5pingstatistics-3packetstransmitted,3packetsreceived,0%packetlossround-tripmin/avg/max=0.458/3.143/8.484ms,ping命令测试提示的错误信息如果网络不通,系统会产生Unreachable(不可到达)提示信息,这时要检查:网络防火墙设置是否正确,因为防火墙不允许ICMP流量通过;网口电缆与接口是否正确连接;ping命令中的IP地址是否为正确地址;测试命令和IP地址是否在正确的终端窗口输入。,3.3.4主机Linux环境NFS设置NFS简述NFS(NetworkFileSystem,网络文件系统)协议,允许在一组通过网络互联的计算机中,计算机A的某个存储位置(导出),能够被计算机B使用。,例如,嵌入式Linux开发环境中,主机与目标板通过网口连接,且已经根据前几节设置了主机IP地址、防火墙,测试网络通信正常,那么通过对主机NFS设置,并且目标板执行相应的mount挂接命令后,目标板就能够通过网口,把主机的指定目录(导出),连接到目标板直接使用。当然前提是目标板Linux内核配置时,允许使用NFS。NFS协议通过网口的连接,把主机导出目录的文件,连接到目标板的指定目录,目标板可以像使用本地文件一样,使用这些文件。,主机NFS设置选择NFS服务一种设置方法是,选择:红帽子服务,在弹出的服务窗口用光标选择nfs服务,见图3.7。同时还要选择去掉iptables服务。然后关闭该窗口。,图3.7选择主机Linux允许NFS服务,另一种设置方法是,在主机终端窗口,输入setup命令,在弹出的窗口中选择“系统服务”并回车,然后用光标键上、下移动,用空格键选中nfs服务,见图3.8,然后去掉iptables服务,最后用F12键退出。,图3.8另一种方法选择主机Linux允许NFS服务,设置主机NFS导出目录及读写权限除了要设置主机Linux允许NFS服务外,还要指定主机的哪些目录作为NFS区域,即导出目录,同时要指定该目录允许的读写权限。设置方法是用vi编辑器打开/etc/exports文件:,rootlocalhost#vi/etc/exports将其内容修改为:/*(rw)/home/nfs1*(rw)然后保存、退出。,启动NFS设置通过以下命令,按新的设置重启NFS:rootlocalhost#/etc/init.d/nfsrestart,查看NFS配置文件可以用vi查看/etc/exports文件:rootlocalhost#vi/etc/exports/*(rw)/home/nfs1*(rw),将主机/home/nfs1目录挂接为目标板/tmp目录此处所谓挂接指的是,在目标板对应的终端窗口,使用mount命令,执行NFS协议的挂接。挂接前主机建立/home/nfs1子目录rootlocalhost/#mkdir/home/nfs1,然后进入/home/nfs1子目录,用vi建立一个文件,文件名为abc,文件内容可以随意输入并保存。建立这个文件目的是在挂接后能够从目标板看到主机/home/nfs1下的这个文件。,rootlocalhost/#cd/home/nfs1rootlocalhostnfs1#viabcrootlocalhostnfs1#ls-l总计4-rw-r-r-1rootroot1001-0910:15abc,在目标板对应终端窗口,执行挂接命令rootTechv_OMAP35xx:/#mount-osoft,nolock,rsize=1024-v192.168.1.5:/home/nfs1/tmp上述命令中的参数192.168.1.5:/home/nfs1是主机IP地址及导出目录,参数/tmp是目标板目录,挂接成功后,查看目标板/tmp目录,相当于查看主机/home/nfs1目录。,挂接后目标板/tmp目录列表rootTechv_OMAP35xx:/#cd/tmprootTechv_OMAP35xx:/var/volatile/tmp#ls-l-rw-r-r-1rootroot10Jan92013abc,另外,一次挂接成功,NFS挂接有效保持到目标板RESET或关机为止,每次开机或RESET后都要重新挂接。,3.4输入、编译、运行一个程序全过程举例,假定要在主机/home/nfs1目录下,建立一个子目录hello,在该子目录下建立一个hello.c文件、建立一个Makefile文件,然后在主机编译hello.c文件,产生可执行文件hello,在目标板执行该文件,执行这些操作的全过程及相关文件的内容如下所示。,下述操作中,在主机Linux终端窗口输入minicom后,这个窗口成为目标板终端窗口,然后挂接NFS;操作中,命令是在目标板终端窗口输入的;其余操作、均在主机Linux终端窗口进行;而和表示要输入的文件的内容。,建立hello目录,进入hello目录rootlocalhostnfs1#mkdir/home/nfs1/hellorootlocalhostnfs1#cd/home/nfs1/hello用vi编辑程序建立hello.c源文件rootlocalhosthello#vihello.c,hello.c文件内容为#include#includeintmain(intargc,char*argv)printf(HelloReader,Congradulations!n);return(0);,建立Makefile文件rootlocalhosthello#viMakefileMakefile文件内容为CC=/usr/local/arm/arm-2007q3/bin/arm-none-linux-gnueabi-gccall:$(CC)-ohellohello.cclean:-rm-f*.ohello,输入上述代码后,保存文件并退出。上述Makefile文件内容中:CC表示主编译器all:表示主入口clean:表示清除以前编译产生的结果另外,语句“$(CC)-ohellohello.c”和“-rm-f*.ohello”,前面有一个制表符Tab,不是空格。,在目标板终端窗口挂接NFS如果没有挂接NFS,则需要挂接。#mount-osoft,nolock,rsize=1024-v192.168.1.5:/home/nfs1/tmp,在主机终端窗口对hello.c文件进行编译rootlocalhosthello#makecleanrm-f*.ohellorootlocalhosthello#make/usr/local/arm/arm-2007q3/bin/arm-none-linux-gnueabi-gcc-ohellohello.c,在目标板终端窗口运行hello程序文件并且显示输出结果rootTechv_OMAP35xx:/var/volatile/tmp#cd/tmp/hellorootTechv_OMAP35xx:/var/volatile/tmp/hello#./helloHelloReader,Congradulations!,上述内容中./hello,表示从当前目录装入并运行hello可执行文件。由于通过NFS挂接,目标板/tmp目录挂接到主机/home/nfs1目录,在目标板输入./hello并回车后,目标板Linux内核通过网口,把主机/home/nfs1/hello目录下的hello可执行文件,装入到目标板的内存并运行,执行结果显示在目标板的终端窗口。,3.5拷贝文件到主机Linux指定目录举例,从Windows下拷贝文件到Linux例如,将Windows下D盘指定目录的5个文件夹拷贝到Linux下/home/nfs1目录。操作:在Windows下指定目录选中这5个文件夹,选择“复制”,见图3.9。,图3.9选择Windows下的5个文件夹,然后在Linux下图形桌面环境,点击“主文件夹”,选择“根文件夹”中home目录的nfs1子目录,在图3.10所示的窗口右侧单击鼠标右键,粘贴这5个文件。,图3.10在Linux指定目录粘贴文件,Linux下将U盘文件夹拷贝到Linux指定目录例如,将Linux下U盘指定目录的文件夹拷贝到Linux下/home/nfs1目录。操作:主机插入U盘后,在图3.11中选择“确定”。,图3.11Linux下选择U盘文件夹,然后在Linux下图形桌面环境,在窗口右侧用Ctrl和鼠标键连续选择5个文件夹,选择“复制”,见图3.12。,图3.12在Linux下选择复制的文件,在Linux下图形桌面环境,点击“主文件夹”,选择“根文件夹”中的home目录的nfs1子目录,在图3.13的右侧单击鼠标右键,进行粘贴,粘贴后的图形界面如图3.13所示。,图3.13在Linux下粘贴文件夹,另一种选择U盘文件的方法另一种选择U盘要拷贝文件的方法是,在图3.14中“转到”菜单中选择“系统”,见图3.14。,图3.14在Linux图形桌面环境选择“系统”,然后点击图3.15所示的“存储介质”图标:图3.15通过点击“存储介质”选择U盘,在图3.16中2.1G可移动媒体就表示U盘,点击后可以选择要拷贝的文件。,图3.162.1G可移动媒体表示U盘,END,
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


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


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

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


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