四、+基于ARM9和Linux嵌入式系统设计.ppt_第1页
四、+基于ARM9和Linux嵌入式系统设计.ppt_第2页
四、+基于ARM9和Linux嵌入式系统设计.ppt_第3页
四、+基于ARM9和Linux嵌入式系统设计.ppt_第4页
四、+基于ARM9和Linux嵌入式系统设计.ppt_第5页
已阅读5页,还剩122页未读 继续免费阅读

下载本文档

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

文档简介

第4章基于ARM9和Linux嵌入式系统设计,4.1嵌入式Linux的开发环境4.2嵌入式Linux操作系统常用命令4.3Linux开发工具GUNgcc的使用4.4GNUmake命令和makefile文件4.5GDB调试器简介4.6嵌入式Linux下C语言编程文件的操作4.7嵌入式Linux引导程序4.8Linux系统在ARM平台上的移植4.9综合训练Linux系统及应用程序的烧写,4.1嵌入式Linux的开发环境,4.1.1嵌入式Linux开发环境建立嵌入式LINUX开发环境有几个方案:1、基于PC机WINDOWS操作系统下的CYGWIN;2、在WINDOWS下安装虚拟机后,再在虚拟机中安装LINXUX操作系统;3、直接安装LINUX操作系统。,4.1.2嵌入式Linux开发的一般过程,1.了解硬件;2.准备需要使用的Linux工具以及其他工具;3.安排内存地址;4.编写启动代码和机器相关代码;5.编写驱动程序;6.C库、GUI和系统程序的移植;7.调试.,4.2嵌入式Linux操作系统常用命令,命令形式如下:commandoptionsourcefile(s)targetfile1登录和退出Linux启动后,给出login命令,等待用户登录。Login:Password:使用logout命令退出外壳。2关机或重新启动的shutdown命令$shutdownhnow要求系统立即关机$shutdownnow要求系统立即关机$shutdown+5要求5分钟后关机$shutdownrnow要求立即关机系统并重新启动,3联机帮助(1)显示帮助手册man选项命令名称常用选项说明-S根据章节显示,由于一个命令名称可能会有很多类别;-f只显示出命令的功能而不显示其中详细的说明文件;-w不显示手册页,只显示将被格式化和显示的文件所在位置;-a显示所有的手册页,而不是只显示第一个;-E在每行的末尾显示$符号。例如:要了解关于这个命令的更多信息,可以使用:$manecho,(2)系统帮助文档help命令用于查看所有Shell命令。用户可以通过该命令寻求Shell命令的用法,只需在所查找的命令后输入help命令,就可以看到所查命令的内容了。例如:查看cd命令的使用方法。$cd-help,(3)whereis命令whereis命令来查询某个命令存在哪一个目录下。命令格式:whereis选项命令名。说明:不加选项可直接使用whereis命令。whereis命令的常用选项如下:章节说明-b只查找二进制文件-m查找主要文件-s查找来源-u查找不常用的记录文件例如:查找cd命令二进制文件在什么目录下。命令:$whereis-bcd,4更改账号密码使用passwd命令来设置新用户的口令。在设置口令之后,账号即能正常工作。语法:passwdOldpassword:Newpassword:Retypenewpassword:,5列出文件或目录ls选项文件目录列表ls命令中的常用选项如下:-a:显示所有文件及目录,包括以“.”开始的隐藏文件在内的所有文件名;-c:按列输出,纵向排序;-x:按列输出,横向排序;-l:列出目录下文件权限、所有者、文件大小、修改时间及名称;lg同上,并显示出文件的所有者工作组名;-t:根据文件建立时间的先后次序列出;-A:同-a,但不列出.(目前目录)及.(父目录);-R:递归显示下层子目录即显示出目录下以及所有子目录文件名;-help:显示帮助信息;-version:显示版本信息。,6改变工作目录语法:cdname其中name是目录名、路径或目录缩写。cd除了有切换目录的功能外,还有一个功能就是,不管在哪个目录内,只要输入cd命令,不加任何参数,即可回到用户目录内。$cdtony切换到当前目录下的tony子目录$cd.切换到上一层目录$cd/切换到系统根目录$cd切换到用户主目录(或运行cd命令也可以)$cd/usr/bin切换到/usr/bin目录,7.建立新目录mkdir的命令格式如下:mkdir-m模式-p目录名目录命令中的参数说明如下:m模式:在建立目录时把按模式指定设置目录权限。该目录的权限分为:目录所有者的权限、组中其他人对目录的权限和系统中其他人对目录的权限。这三个权限分别用三个数字之和来表示:对目录的读权限是4、写权限是2、执行权限是1。-p目录名:建立所有不存在父目录的目录。目录:要建立的目录。,8删除文件或目录rm选项文件列表常用选项说明-r删除文件列表中指定的目录,若不用此标志则不删除目录-I指定交互模式。在执行删除前提示确认。任何以Y开始的响应都表示肯定;其他则表示否定。-f指定强行删除模式。本标志强迫删除,不用提示。-V在删除前回显文件名。-指明所有选项结束。用于删除一个文件名与某一选项相同的文件。例如:假定偶然建立了名为-f的文件,又打算删除它,命令rm-f不起任何作用,因为-f被解释成标志而不是文件名;而命令rm-f能成功地删除文件。,9删除目录的rmdir命令rmdir命令是用来删除目录的,一般情况下要删除的目录必须为空目录,如果所给的目录不为空,系统会报告错误。该命令的语法格式如下:rmdir-p目录列表命令中的参数说明如下:-p:在删除目录表指定的目录后,若父目录为空,则rmdir也删除父目录。状态信息显示什么被删除,什么没被删除。目录列表:空格分隔的目录名列表。要删除的目录必须为空。,10显示当前目录执行pwd命令形式如下:pwd11改变当前工作目录该命令使用的语法格式如下:Cd目录名命令中的参数说明如下:目录名:改变到所指定的目录名。若没有指定目录,就返回到用户主目录(在HOME环境变量中指定)。,12复制文件的cp命令Cp选项源文件目标文件Cp选项源文件组目标目录源文件:要拷贝的文件。目标文件:目标名。也可以是目录名,这种情况下,源文件名作为目标文件名,而文件放在该目录下。源文件组:要拷贝文件的由空格分隔的列表。目标目录:目标目录。常用命令的选项如下:常用选项说明-a在备份中保持尽可能多的源文件结构和属。-b将要覆盖或删除文件的备份。-f删除已存在的目标文件。-I提示是否覆盖已存在的目标文件。-p保持原先文件的所有者、组权限和时间标志-r递归拷贝目录,把所有非目录文件当普通文件拷贝。-R递归拷贝目录。,13.移动或更改文件、目录名称mv-f-i文件1文件2mv-f-i目录1目录2mv-f-i文件列表目录命令中的参数说明如下:-f:通常情况下,目标文件存在但用户没有写权限时,mv会给出提示。本选项会使mv命令执行移动而不给出提示。-i:交互模式,当移动的目录已存在同名的目标文件名时,用覆盖方式写文件,但在写入之前给出提示。文件1:源文件名。文件2:目标文件名(新文件名)。目录1:源目录名。目录2:目标目录名(新目录名)。文件列表:用空格分隔的文件名列表。把列表中的文件移动到一个新目录。目录:目标目录。,14分页查看文件内容用户可以使用more命令,让画面显示满一页时暂停,此时可按空格键继续显示下一个画面,或按Q键停止显示。其命令格式如下:more文件名显示文字文件的内容;或cat文件名|more逐页显示文字文件的内容;或lsal|more显示满一个画面便停止,按空格键继续显示下一画面,按Q键跳离。,15查看文件内容显示文本文件内容的命令是cat命令,用来将文件的内容显示到终端上,其命令语法如下:cat选项文件列表命令中的参数说明如下:-b计算所有非空输出行,开始为1。-e在每行末尾显示$符号。-n计算所有输出行,开始为1。-s将相连的多个空行用单一空行代替。,14.查找文件内容grep选项匹配字符串文件列表文件列表:需查找的文件列表匹配字符串:希望在文件中查到的串。选项:说明-v列出不匹配串或正则表达式的行。-c对匹配的行计数。-l只显示包含匹配的文件的文件名。-h抑制包含匹配文件的文件名的显示。-n每个匹配行只按照相对的行号显示。-i产生不区分大小写的匹配,缺省状态是区分大小写。,17排序命令命令的语法格式如下:sort选项文件说明:sort命令对指定文件中所有的行进行排序,并将结果显示在标准输出上。如不指定输入文件或使用“-”,则表示排序内容来自标准输入。,18.比较文件内容的命令(1)comm命令如果想对两个有序的文件进行比较,可以使用comm命令。该命令的使用语法如下:comm-123file1file2说明:该命令是对两个已经排好序的文件进行比较。其中file1和file2是已排序的文件。comm读取这两个文件,然后生成三列输出:仅在file1中出现的行;仅在file2中出现的行;在两个文件中都存在的行。如果文件名用“-”,则表示从标准输入读取。,(2)diff命令diff命令用于比较两个文件内容的不同,其命令语法格式如下:diff参数原文件目标文件参数说明a将所有文件当做文本文件来处理b忽略空格造成的不同B忽略空行造成的不同q只报告什么地方不同,不报告具体的不同信息H利用试探法加速对大文件的搜索I忽略大小写的变化L用pr对输出进行分页R在比较目录时比较所有的子目录S两个文件相同时才报告v在标准输出上输出版本信息并退出,19.命令的输入和输出(1)输入重定向输入重定向是指把命令(或可执行程序)的标准输入重定向到指定的文件中。重定向操作符使用“文件名可以使用追加重定向操作符“”,其使用语法形式为:命令文件名,(3)管道管道是把一系列命令连接起来,即第一个命令的输出会作为第二个命令的输入通过管道传给第二个命令,第二个命令的输出又会作为第三个命令的输入,以此类推。显示在屏幕上的是管道行中最后一个命令的输出(如果命令行中未使用输出重定向)。(4)命令替换命令替换和重定向有些相似,但区别在于命令替换是将一个命令的输出作为另外一个命令的参数。常用命令格式为:command1command2其中,command2的输出将作为command1的参数。需要注意的是这里的符号,被它括起来的内容将作为命令执行,执行后的结果作为command1的参数。,例如:$cdpwd该命令将pwd命令列出的目录作为cd命令的参数,结果仍然是停留在当前目录下。重导与管道举例:$lsaldir.txt将lsal命令执行结果输出到dir.txt文件;$catdata1.txtdata2.txt将data1.txt内容附加到data2.txt文件之后;$ls|grepconf搜索并显示ls命令运行结果中含有“conf”字符串的行;$yes|rmrmydir利用yes命令重复输出“y”字符的特性,将结果传给rm命令,如此即可避免重复输入“y”。,20.链接文件的命令ln选项目标链接名ln选项目标目录链接有两种,一种被称为硬链接(HardLink),另一种被称为符号链接(SymbolicLink)。建立硬链接时,链接文件和被链接文件必须位于同一个文件系统中,并且不能建立指向目录的硬链接。而对符号链接,则不存在这个问题。默认情况下,ln产生硬链接。例:$ln-slunch/home/xu用户为当前目录下的文件lunch创建了一个符号链接/home/xu。,21.改变文件或目录权限chmod选项文件和目录列表chmod命令的常用选项如下:-c表示只有在文件的权限确实改变时才进行详细说明;-v表示详细说明权限的变化;-R表示递归改变目录及其内容的权限。chmod命令支持两种文件权限设定的方法:(1)使用字符串设置权限;(2)使用八进制数设置权限另外,文件和目录的权限还可用八进制数字模式来表示。三个八进制数字分别代表ugo的权限。执行权、读权和写权所对应的数值分别是1,2和4。若要rwx属性则4+2+1=7;若要rw-属性则4+2=6;若要r-x属性则4+1=5。,22改变文件和目录的所有权chown选项用户文件和目录列表用户:是用户号或文件/etc/passwd中出现的用户名。文件和目录列表:用于重新指定所有权的用空格分隔的文件和目录列表。chown命令的常用选项如下:常用选项说明-c只有在文件的权限确实改变时才进行详细说明。-v详细说明权限的变化。-R递归改变目录及其内容的权限。,23文件压缩(1)gzip压缩文件gzip选项压缩(解压缩)的文件名gzip命令各选项的说明如下:常用选项说明-c将输出写到标准输出上,并保留原有文件。-d将压缩文件解压。-l对每个压缩文件,显示压缩文件的大小、未压缩文件的大小、压缩比、未压缩文件的名字等详细信息-r递归式地查找指定目录并压缩其中的所有文件或者是解压缩。-t测试,检查压缩文件是否完整。-v对每一个压缩和解压的文件,显示文件名和压缩比。,(2)文件打包tartar主选项+辅选项文件或者目录常用选项说明-c创建新的档案文件。备份一个目录或是一些文件。-x从档案文件中释放文件。-r把要存档的文件追加到档案文件的未尾。-t列出档案文件的内容,查看已经备份了哪些文件。tar命令的辅助选项的常用选项如下:F使用档案文件或设备,这个选项通常是必选的。K保存已经存在文件。在还原时,遇到相同文件,不进行覆盖。M在还原文件时,把所有文件的修改时间设定为现在。V报告tar处理的文件信息。如无此选项,tar不报告文件信息。Z用gzip来压缩/解压缩文件,(3)unzip命令unzip命令用于解扩展名为“.zip”的压缩文件。命令格式如下:unzip选项压缩文件名.zipupzip命令的常用选项如下:-x文件列表解压缩文件,但不包括指定的file文件-v查看压缩文件目录,但不解压。-t测试文件有无损坏,但不解压。-d目录把压缩文件解到指定目录下。-z只显示压缩文件的注解。-n不覆盖已经存在的文件。-o覆盖已存在的文件且不要求用户确认。-j不重建文档的目录结构,把所有文件解压到同一目录下。,24加载的mount命令(1)加载光盘rootfreeroot#mount/dev/cdrom/mnt/cdrom1若要显示中文,可执行以下命令:rootfreeroot#mountoiocharset=cp936/dev/cdrom/mnt/cdrom1其中:“oiocharset=cp936”是显示中文的参数。(2)加载硬盘可以加载硬盘分区、ZIP磁盘驱动器等。例如/dev/hda1(IDE0第1个硬盘的第1个主分区)是采用Windows的FAT32文件系统,可执行以下命令加载:rootfreeroot#mounttvfat/dev/hda1/mnt/winC若要显示中文,可以执行以下命令:rootfreeroot#mounttvfatoiocharset=cp936/dev/hda1/mnt/winC,(3)加载U盘或USB设备与光盘一样,存取U盘前,必须先将其加载到系统中。只不过,Linux会将USB视为SCSI装置,其设备名称为/dev/sd?(?代表az,若您的系统中只有这一项SCSI装置,则设备名称会是/dev/sda)。先自行创建一个新的加载目录,如在/mnt目录下创建一个usb子目录。然后插入U盘,并打开文字模式窗口如下操作,加载U盘:rootfreeroot#mounttvfatoiocharset=cp936/dev/sda/mnt/usbUSB设备(如:数码相机)的加载同上,只是在加载时注意您的USB设备是插入到哪个usb口,确定其设备名称/dev/sd?(?代表az)。,25卸载的umount命令如果不需要使用加载的光盘或U盘,则需先执行卸载命令之后,才能将光盘或U盘退出:rootfreeroot#umount/mnt/cdrom将光盘卸载;rootfreeroot#umount/mnt/usb将U盘卸载;,4.3Linux开发工具GUNgcc的使用,GCC常用模式及选项gcc最基本的用法是:gccoptionsfile.gcc的整个编译过程分别是:预处理,编译,汇编和链接。gcc编译器几个最常用的选项:-o表示要求编译器生成指定文件名的可执行文件;-c表示只要求编译器进行编译生成.o的目标文件,而不要进行链接;-g要求编译器在编译的时候提供以后对程序进行调试的信息;-E表示编译器对源文件只进行预处理就停止,而不做编译、汇编和链接;-S表示编译器只进行编译,而不做汇编和链接;-O表示编译器优化生成可执行文件;-Wall生成所有的警告信息。例如:$gcc-ohellohello.c,GNU编译器生成的目标文件默认格式为elf(executivelinkedfile)格式,由标准c源代码生成的目标文件中包含以下段:.text(正文段)包含程序的指令代码,.data(数据段)包含固定的数据,如常量,字符串等,.bss(未初始化数据段)包含未初始化的变量和数组等。这里介绍GCC常用的两种模式:编译模式和编译连接模式。$gcc-otest源文件是test.c,生成的可执行代码存放在一个名为test的文件中。$gcc-ctest.c默认情况下,生成的目标文件名为test.o,$ytest.o下面的命令将同时编译三个源文件,即first.c、second.c和third.c,然后将它们连接成一个可执行程序test。命令如下:$gcc-otestfirst.csecond.cthird.c,3其他常用选项的使用$gcctest.cI./inc-otest此命令告诉GCC包含文件存放在./inc目录下,在当前目录的上一级。若在编译时需要的包含文件存放在多个目录下,可使用多个-I来指定各个目录:$gcctest.cI./incI././inc2-otest上面命令告诉GCC包含文件存放在./inc目录下,在当前目录的上一级。若在编译时需的包含文件存放在多个目录下,可使用多个-I来指定各个目录:$gcctest.cI./incI././inc2-otest这里指出了另一个包含子目录inc2,较之前目录它还要在再上两级才能找到.另外,我们还可以在编译命令行中定义符号常量。为此,我们可以简单的在命令行中使用-D选项即可,如下例所示:$gcc-DTEST_CONFIGURATIONtest.c-otest上面的命令与在源文件中加入下列命令是等效的:#defineTEST_CONFIGURATION,4.警告功能当GCC在编译过程中检查出错误的话,它就会中止编译;但检测到警告时却能继续编译生成可执行程序。在众多的警告选项之中,最常用的就是-Wall选项。该选项能发现程序中一系列的常见错误警告,该选项用法举例如下:$gcc-Walltest.c-otest该选项相当于同时使用了下列所有的选项:unused-function:遇到仅声明过但尚未定义的静态函数时发出警告。unused-label:遇到声明过但不使用的标号的警告。unused-parameter:从未用过的函数参数的警告。,4.4GNUmake命令和makefile文件,显式规则。此规则说明了,如何生成一个或多个目标文件。这是由Makefile的书写者明显指出,要生成的文件,文件的依赖文件,生成的命令。隐晦规则。由于make有自动推导的功能,所以隐晦的规则可以让我们比较粗糙地简略地书写Makefile,这是由make所支持的。变量的定义。在Makefile中可定义一系列的变量,变量一般是字符串,这个有点象C语言中的宏,当Makefile被执行时,其中的变量都会被扩展到相应的引用位置上。文件指示。其包括了三个部分,一个是在一个Makefile中引用另一个Makefile,就像C语言中的include一样;另一个是指根据某些情况指定Makefile中的有效部分,就像C语言中的预编译#if一样;还有就是定义一个多行的命令。注释。Makefile中只有行注释,和UNIX的Shell脚本一样,其注释是用“#”字符,Makefile中使用“#”字符,可以用反斜框进行转义,如:“#”。,4.4.1Makefile文件的规则,1Makefile书写规则一个Makefile文件含有一系列的规则,规则包含以下内容。一个目标(target),即make最终需要创建的文件,如可执行文件和目标文件;目标也可以是要执行的动作,如“clean”。一个或多个依赖文件(dependency)列表,通常是编译目标文件所需要的其他文件。一系列命今(command),是make执行的动作,通常是把指定的相关文件编译成目标文件的编译命令,每个命令占一行,且每个命令行的起始字符必须为TAB字符。Makefile规则的一般形式如下:target:dependencydependency(tab),例如,有以下的Makefile文件:#一个简单的Makefile的例子test:prog.ocode.ogccotestprog.ocode.oprog.o:prog.cprog.hcode.hgcccprog.coprog.ocode.o:code.ccode.hgccccode.cocode.oclean:rmf*.o,一般情况下,调用make命令可输入:#maketargettarget是Makefile文件中定义的目标之一,如果省略target,make就将生成Makefile文件中定义的第一个目标。在上面Makefile的例子中,还定义了一个目标clean,它是Makefile中常用的一种专用目标,即删除所有的目标模块。在顶层Makefile中的语句:includearch/$(ARCH)/Makefile,配置文件.config包含由用户选择项,用来存放内核配置后的结果(如makeconfig)。规则文件Rules.make,则被所有的Makefile使用。用户通过makeconfig配置后,产生了.config。顶层Makefile读入.config中的配置选择。顶层Makefile有两个主要的任务:产生压缩的内核镜像vmlinux文件和内核模块module。位于各个子目录下的Makefile同样也根据.config给出的配置信息,构造出当前配置下需要的源文件列表,并在文件的最后有include$(TOPDIR)/Rules.make。,2.在规则中使用通配符三种通配符:“*”,“?”和“.”。这是和Unix的B-Shell相同。波浪号(“”)字符在文件名中有特殊的用途。如“test”表示当前用户的$HOME目录下的test目录。而“hchen/test”则表示用户hchen的宿主目录下的test目录。通配符“*.c”表示所以后缀为c的文件。例如:print:*.clpr-p$?touchprint上面这个例子说明目标print依赖于所有的.c文件。其中的“$?”是一个自动化变量。,3.文件搜寻Makefile文件中的特殊变量“VPATH”就是完成这个功能的。VPATH=src:./headers上面的定义指定两个目录,“src”和“./headers”。目录由“冒号”分隔。另一个设置文件搜索路径的方法是使用make的“vpath”关键字(注意,它是全小写的),这不是变量,是一个make的关键字,和上面提到的那个VPATH变量很类似,但是它更为灵活。它可以指定不同的文件在不同的搜索目录中。此功能使用方法有三种:(1)vpath;为符合模式的文件指定搜索目录。(2)vpath;清除符合模式的文件的搜索目录。(3)vpath;清除所有已被设置好了的文件搜索目录。vapth使用方法中的需要包含“%”字符。“%”的意思是匹配零或若干字符。,例如:“%.h”表示所有以“.h”结尾的文件。指定了要搜索的文件集,而则指定了的文件集搜索的目录。例如:vpath%.h./headers该语句表示,要求make在“./headers”目录下搜索所有以“.h”结尾的文件。可连续地使用vpath语句,以指定不同搜索策略。如连续的vpath语句中出现了相同的,或是被重复了的,那么,make会按照vpath语句的先后顺序来执行搜索。如:vpath%.cfoovpath%blishvpath%.cbar其表示“.c”结尾的文件,先在“foo”目录,然后是“blish”,最后是“bar”目录。,4.伪目标伪目标又称假想目标,如:clean:rm*.otemp可使用一个特殊的标记“.PHONY”来指明一个目标是“伪目标”,向make说明,不管是否有这个文件,这个目标就是“伪目标”。.PHONY:clean只要有这个声明,不管是否有“clean”文件,要运行“clean”这个目标,只有“makeclean”这样。整个过程可以这样写:.PHONY:cleanclean:rm*.otemp伪目标一般没有依赖的文件。但是,可以为伪目标指定所依赖的文件。伪目标同样可以作为“默认目标”,只要将其放在第一个。,如果Makefile需要生成若干个可执行文件,可把所有的目标文件都写在一个Makefile中,可声明了一个“all”的伪目标,例如:all:prog1prog2prog3.PHONY:allprog1:prog1.outils.occ-oprog1prog1.outils.oprog2:prog2.occ-oprog2prog2.oprog3:prog3.osort.outils.occ-oprog3prog3.osort.outils.o上面的Makefile中的第一个目标“all”会被作为其默认目标,其依赖于其它三个目标。由于伪目标的特性是,总是被执行的,所以其依赖的那三个目标就总是不如“all”这个目标新。所以,其它三个目标的规则总是会被决议。也就达到了我们一口气生成多个目标的目的。“.PHONY:all”声明了“all”这个目标为“伪目标”。从上面的例子可看出,目标也可以成为依赖,伪目标同样也可成为依赖。,5.多目标Makefile的规则中的目标可能有多个目标同时依赖于一个文件,且生成的命令大体类似,因此可把其合并起来。若多个目标的生成规则的执行命令是同一个时,可能会带来麻烦,这时可以使用自动化变量“$”,这个变量表示着目前规则中所有的目标的集合。例如:bigoutputlittleoutput:text.ggeneratetext.g-$(substoutput,$)$上述规则等价于:bigoutput:text.ggeneratetext.g-bigbigoutputlittleoutput:text.ggeneratetext.g-littlelittleoutput其中,-$(substoutput,$)中的“$”表示执行一个Makefile的函数,函数名为subst,后面的为参数。此函数是截取字符串的意思,“$”表示目标的集合,就像一个数组,“$”依次取出目标,并执行命令。,6.静态模式静态模式可以更加容易地定义多目标的规则,可以让规则变得更加的有弹性和灵活。其语法::.targets定义了一系列的目标文件,可以有通配符,是目标的一个集合。target-parrtern是指明了targets的模式,也就是的目标集模式。prereq-parrterns是目标的依赖模式,它对target-parrtern形成的模式再进行一次依赖目标的定义。,若定义成“%.o”,则集合中都是以“.o”结尾的;若定义成“%.c”,则所形成的目标集进行二次定义,其计算方法是,取模式中的“%”(也就是去掉了.o这个结尾),并为其加上.c这个结尾,形成的新集合。所以,“目标模式”或是“依赖模式”中都应该有“%”这个字符,如果文件名中有“%”,那么可以使用反斜杠“”进行转义,来标明真实的“%”字符。例如:objects=foo.obar.oall:$(objects)$(objects):%.o:%.c$(CC)-c$(CFLAGS)$-o$上例中,指明了目标从$object中获取,“%.o”表明要所有以“.o”结尾的目标,也就是“foo.obar.o”;而依赖模式“%.c”则取模式“%.o”的“%”,也就是“foobar”,并为其加上“.c”的后缀,于是,依赖目标就是“foo.cbar.c”。而命令中的“$”和“$”则是自动化变量,“$”表示所有的依赖目标集(也就是“foo.cbar.c”),“$”表示目标集(也就是“foo.obar.o”)。,上面的规则展开后等价于下面的规则:foo.o:foo.c$(CC)-c$(CFLAGS)foo.c-ofoo.obar.o:bar.c$(CC)-c$(CFLAGS)bar.c-obar.o如果“%.o”有几百个,那种只要用这种很简单的“静态模式规则”,就可以写完一堆规则,实在是太有效率了。“静态模式规则”的用法很灵活,如果用得好,那会是一个很强大的功能。再看一个例子:files=foo.elcbar.olose.o$(filter%.o,$(files):%.o:%.c$(CC)-c$(CFLAGS)$-o$(filter%.elc,$(files):%.elc:%.elemacs-fbatch-byte-compile$1:2:4ChangeMPllValue(0 xa1,0 x3,0 x1);/时钟值FCLK=202.8MHz,Port_Init();Isr_Init();Uart_Init(0,115200);Uart_Select(0);while(1)Uart_Printf(nnSMDK2410Board(MCUS3C2410)ExampleProgramVer1.0(

温馨提示

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

评论

0/150

提交评论