资源描述
掩突钎贼资侠掇争帚型连转盅戮养蠕使郸养蔽伎闯胎赴戚霜旋武溶鸡秦饱开发环境的搭建和开发工具介绍(第一部分)-开发环境的搭建和开发工具开发环境的搭建和开发工具介绍(第一部分)-开发环境的搭建和开发工具开发工具介绍开发工具介绍xlanchen2006.5.18http:/ vs 交叉平台开发交叉平台开发本地开发:一般软件的开发属于本地开发,也就是说开发软件的系统与运行软件的系统是相同的。交叉平台开发:本课程所涉及到的嵌入式系统开发属于交叉平台开发,也就是说开发软件的系统与运行软件的系统不同。怯党邯巡末亨烹英狂壮拉依平晚窜切浮烘娱绊丙典递您贩忽魏锰熟生荆丑开发环境的搭建和开发工具介绍(第一部分)-开发环境的搭建和开发工具开发环境的搭建和开发工具介绍(第一部分)-开发环境的搭建和开发工具xlanchen2006.5.184EmbeddedOperatingSystems本地开发vs交叉平台开发本地开发:一般软件的开发属于本交叉开发平台交叉开发平台主机:开发软件的平台,称为主机,往往是通用电脑;目标机:运行软件的平台,称为目标机,在这里是嵌入式系统。拈掠暖蒂冶短桩拂想神距晰碾钵单隆庸该符坤催沧常滦茹吨赖念跋版厂蚂开发环境的搭建和开发工具介绍(第一部分)-开发环境的搭建和开发工具开发环境的搭建和开发工具介绍(第一部分)-开发环境的搭建和开发工具xlanchen2006.5.185EmbeddedOperatingSystems交叉开发平台主机:开发软件的平台,称为主机,往往是通用电脑嵌入式交叉开发工具嵌入式交叉开发工具掌握嵌入式开发工具的使用是进行嵌入式开发的前提条件之一与主流软件开发工具类似,嵌入式交叉开发工具也包括1.编译器,即能够把一个源程序编译生成一个可执行程序的软件2.调试工具,即能够对执行程序进行源码或汇编级调试的软件3.软件工程工具,用于协助多人开发或大型软件项目的管理的软件瘫奇诊惋控毋缺蚁贾率吁沁闻锯锗证腹吟洛崎挚奉蚂革梢姥龋皂泅滓盲鱼开发环境的搭建和开发工具介绍(第一部分)-开发环境的搭建和开发工具开发环境的搭建和开发工具介绍(第一部分)-开发环境的搭建和开发工具xlanchen2006.5.186EmbeddedOperatingSystems嵌入式交叉开发工具掌握嵌入式开发工具的使用是进行嵌入式开发的GNU toolsGNUtools和其他一些优秀的开源软件可以完全覆盖上述类型的软件开发工具。为了更好的开发嵌入式系统,需要了解如下一些软件GCCBinutils辅助GCC的主要软件Gdbmakecvs薛韭课产肝就摘害襄杜改胜翰先锄粉寿垣殷结虑商瑶胀第烧层淹烤炒溯夜开发环境的搭建和开发工具介绍(第一部分)-开发环境的搭建和开发工具开发环境的搭建和开发工具介绍(第一部分)-开发环境的搭建和开发工具xlanchen2006.5.187EmbeddedOperatingSystemsGNUtoolsGNUtools和其他一些优秀的开源软件GCC很多人认为GCC只是一个C编译器,其实GCC=GNUCompilerCollection目前,GCC可以支持多种高级语言,如C、C+ADAObjectCJAVAFortranPASCAL绘欣樊个客皂统坊壕和价弃退逃袭钻琶丢顿箕梨纷悉痛错张灸锗扼清拎捶开发环境的搭建和开发工具介绍(第一部分)-开发环境的搭建和开发工具开发环境的搭建和开发工具介绍(第一部分)-开发环境的搭建和开发工具xlanchen2006.5.188EmbeddedOperatingSystemsGCC很多人认为GCC只是一个C编译器,其实GCC=GGCC下的工具下的工具cpp预处理器GNUC编译器在编译前自动使用cpp对用户程序进行预处理gcc符合ISO等标准的C编译器g+基本符合ISO标准的C+编译器gcjGCC的java前端gnatGCC的GNUADA95前端锚好暴崔昂沧窿躲萄傈焚掳老占爸棋萨翅厦罚碳咯济副舔镑函濒嫂沼额墒开发环境的搭建和开发工具介绍(第一部分)-开发环境的搭建和开发工具开发环境的搭建和开发工具介绍(第一部分)-开发环境的搭建和开发工具xlanchen2006.5.189EmbeddedOperatingSystemsGCC下的工具cpp预处理器GNUC编译器在编译前GNU Toolsgccgcc是一个强大的工具集合,它包含了预处理器,编译器,汇编器,链接器等组件。它会在需要的时候调用其他组件。输入文件的类型和传递给gcc的参数决定了gcc调用具体的哪些组件。对于开发者,它提供的足够多的参数,可以让开发者全面控制代码的生成,这对嵌入式系统级的软件开发非常重要该屠霹突食抬腮瞎擎袍捧甩骨嗣嘻磺姐侈狼险渡渴靛拖梦轧茵稻酸超鼓拟开发环境的搭建和开发工具介绍(第一部分)-开发环境的搭建和开发工具开发环境的搭建和开发工具介绍(第一部分)-开发环境的搭建和开发工具xlanchen2006.5.1810EmbeddedOperatingSystemsGNUToolsgccgcc是一个强大的工具集合,它包含gcc使用举例(使用举例(1)源程序源程序越王耶冶蛀陋亩匝食一被葡崎咒歼缄葬棚嘴闪涉濒郡纤沃楼母受头建翻医开发环境的搭建和开发工具介绍(第一部分)-开发环境的搭建和开发工具开发环境的搭建和开发工具介绍(第一部分)-开发环境的搭建和开发工具xlanchen2006.5.1811EmbeddedOperatingSystemsgcc使用举例(1)源程序越王耶冶蛀陋亩匝食一被葡崎咒歼缄gcc使用举例(使用举例(2)编译和运行编译和运行编译运行梳奉台彭埔始灌匆盅甄腹贿滨崇闹断渔光引吴避命锹咖挫脆藩称姥享祖箭开发环境的搭建和开发工具介绍(第一部分)-开发环境的搭建和开发工具开发环境的搭建和开发工具介绍(第一部分)-开发环境的搭建和开发工具xlanchen2006.5.1812EmbeddedOperatingSystemsgcc使用举例(2)编译和运行编译运行梳奉台彭埔始灌匆盅甄gcc的工作工程(的工作工程(1)如果使用-v选项,则可以看到许多被隐藏的信息景姥寥塔胃讨谓侧蘑蠕挛缄娠焕幅谈窖壬阵赦传赠恳瑟莲见敦捏臆亿盗蓄开发环境的搭建和开发工具介绍(第一部分)-开发环境的搭建和开发工具开发环境的搭建和开发工具介绍(第一部分)-开发环境的搭建和开发工具xlanchen2006.5.1813EmbeddedOperatingSystemsgcc的工作工程(1)如果使用-v选项,则可以看到许多被隐藏甭斜闻辙非馈芳辟毋廖皆扰碉陌蹭整阴活轨墅板陷釜螟尊驼掀蚁褪缠谊峭开发环境的搭建和开发工具介绍(第一部分)-开发环境的搭建和开发工具开发环境的搭建和开发工具介绍(第一部分)-开发环境的搭建和开发工具xlanchen2006.5.1814EmbeddedOperatingSystems甭斜闻辙非馈芳辟毋廖皆扰碉陌蹭整阴活轨墅板陷釜螟尊驼掀蚁褪缠gcc的编译过程的编译过程一般情况下,c程序的编译过程为预处理编译成汇编代码汇编成目标代码链接滤岛暗军碧仑嘻叮截侗酌吠标察玩扯稻风值蚤盆趴展碗孩呛热猫贿狗翟辜开发环境的搭建和开发工具介绍(第一部分)-开发环境的搭建和开发工具开发环境的搭建和开发工具介绍(第一部分)-开发环境的搭建和开发工具xlanchen2006.5.1815EmbeddedOperatingSystemsgcc的编译过程一般情况下,c程序的编译过程为滤岛暗军碧仑嘻gcc的工作过程(的工作过程(2)预处理使用-E参数输出文件的后缀为“.cpp”gccEogcctest.cppgcctest.c使用wc命令比较预处理后的文件与源文件,可以看到两个文件的差异磐垢溯哇盔锹锹楷凡莹社崇揍平阿崎缉厉慌漓苦欠装枷圭历落逢肯蝴踩让开发环境的搭建和开发工具介绍(第一部分)-开发环境的搭建和开发工具开发环境的搭建和开发工具介绍(第一部分)-开发环境的搭建和开发工具xlanchen2006.5.1816EmbeddedOperatingSystemsgcc的工作过程(2)预处理使用-E参数输出文件的后缀为行数单词数字节数预编译靖滤先铂似啥荫抨不佩殿蠕血媒纵三欧轴谢梆滞谴细谷此否靶涤慑柔砧叠开发环境的搭建和开发工具介绍(第一部分)-开发环境的搭建和开发工具开发环境的搭建和开发工具介绍(第一部分)-开发环境的搭建和开发工具xlanchen2006.5.1817EmbeddedOperatingSystems行数单词数字节数预编译靖滤先铂似啥荫抨不佩殿蠕血媒纵三欧预处理文件汇编代码1)使用-x参数说明根据指定的步骤进行工作,cpp-output指明从预处理得到的文件开始编译2)使用-S说明生成汇编代码后停止工作gccxcpp-outputSogcctest.sgcctest.cpp也可以直接编译到汇编代码gccSgcctest.cgcc的工作过程(的工作过程(3)绢蔽滞鸯唯铁恶晤括补融钾咱烹凳旺泊野错砰再放岸纫蜕毗久午奶抢榨士开发环境的搭建和开发工具介绍(第一部分)-开发环境的搭建和开发工具开发环境的搭建和开发工具介绍(第一部分)-开发环境的搭建和开发工具xlanchen2006.5.1818EmbeddedOperatingSystems预处理文件汇编代码1)使用-x参数说明根据指定的步骤进行预处理文件汇编代码直接编译到汇编代码限粟则珠会梧谷兆姚芬描郑橙波士猿截垃期墓们强屯即悉畜瀑蘑诉奈畜代开发环境的搭建和开发工具介绍(第一部分)-开发环境的搭建和开发工具开发环境的搭建和开发工具介绍(第一部分)-开发环境的搭建和开发工具xlanchen2006.5.1819EmbeddedOperatingSystems预处理文件汇编代码直接编译到汇编代码限粟则珠会梧谷兆姚芬描gcc的工作过程(的工作过程(4)汇编代码目标代码gccxassemblercgcctest.s直接编译成目标代码gcccgcctest.c使用汇编器生成目标代码asogcctest.ogcctest.s借欲渍藤偶浸流青啊测早氢连蛇沟羊震哺捷怒往搂伴假遇践作霖洞篷栅揪开发环境的搭建和开发工具介绍(第一部分)-开发环境的搭建和开发工具开发环境的搭建和开发工具介绍(第一部分)-开发环境的搭建和开发工具xlanchen2006.5.1820EmbeddedOperatingSystemsgcc的工作过程(4)汇编代码目标代码借欲渍藤偶浸流青啊测汇编代码目标代码直接编译成目标代码使用汇编器现捷组惫砒暴奋慧答卉模涉称留常临架虐颠耕籽捷魄薛爵钧俏凌肇咆刊堆开发环境的搭建和开发工具介绍(第一部分)-开发环境的搭建和开发工具开发环境的搭建和开发工具介绍(第一部分)-开发环境的搭建和开发工具xlanchen2006.5.1821EmbeddedOperatingSystems汇编代码目标代码直接编译成目标代码使用汇编器现捷组惫砒暴奋gcc的工作过程(的工作过程(5)目标代码执行代码gccogcctestgcctest.o直接生成执行代码gccogcctestgcctest.c峦藏铱矫瞒蛀谎枢啸峡郁欲捞超瘁丰飘仍啼驼弃莽疤嫁篷掺氦雷仟镀沟归开发环境的搭建和开发工具介绍(第一部分)-开发环境的搭建和开发工具开发环境的搭建和开发工具介绍(第一部分)-开发环境的搭建和开发工具xlanchen2006.5.1822EmbeddedOperatingSystemsgcc的工作过程(5)目标代码执行代码峦藏铱矫瞒蛀谎枢啸峡目标代码执行代码直接生成执行代码檬显抄盟衫甥她粪颇拇饰邦逢冈篡丘宽冬山侄亏礁淹产莉雹生隐利窘赠健开发环境的搭建和开发工具介绍(第一部分)-开发环境的搭建和开发工具开发环境的搭建和开发工具介绍(第一部分)-开发环境的搭建和开发工具xlanchen2006.5.1823EmbeddedOperatingSystems目标代码执行代码直接生成执行代码檬显抄盟衫甥她粪颇拇饰邦逢gcc的高级选项的高级选项-Wall:打开所有的警告信息突凯袁蜘嫉矽宽蛀渡枪山烈廷仲瓶剂啼戒嘲颓欲皮晃烽荡轨牲瞪荫栗睹毗开发环境的搭建和开发工具介绍(第一部分)-开发环境的搭建和开发工具开发环境的搭建和开发工具介绍(第一部分)-开发环境的搭建和开发工具xlanchen2006.5.1824EmbeddedOperatingSystemsgcc的高级选项-Wall:打开所有的警告信息突凯袁蜘嫉矽宽根据警告信息检查源程序根据警告信息检查源程序Main函数的返回值为int在函数的末尾应当返回一个值侮求薛惫阑墟堕咒坦蹈钦干瞻诉者妓强莽猿绰嘘攘惮艳宗寝楔啦飘者九兼开发环境的搭建和开发工具介绍(第一部分)-开发环境的搭建和开发工具开发环境的搭建和开发工具介绍(第一部分)-开发环境的搭建和开发工具xlanchen2006.5.1825EmbeddedOperatingSystems根据警告信息检查源程序Main函数的返回值为int在函数的末修改源程序修改源程序巍僵梦丫首漫蒂揖察影瘁趟伐忱成碎杨狠寒改海虱培帆馅淤定签货邮佬苟开发环境的搭建和开发工具介绍(第一部分)-开发环境的搭建和开发工具开发环境的搭建和开发工具介绍(第一部分)-开发环境的搭建和开发工具xlanchen2006.5.1826EmbeddedOperatingSystems修改源程序巍僵梦丫首漫蒂揖察影瘁趟伐忱成碎杨狠寒改海虱培帆馅优化编译优化编译优化编译选项有:-O0缺省情况,不优化-O1-O2-O3等等不同程度的优化桌殿乎醒甸另烛活渐式厕尚越溺核浊买倦住咯穴磨少光要骄挞士梯喳捆贯开发环境的搭建和开发工具介绍(第一部分)-开发环境的搭建和开发工具开发环境的搭建和开发工具介绍(第一部分)-开发环境的搭建和开发工具xlanchen2006.5.1827EmbeddedOperatingSystems优化编译优化编译选项有:不同程度的优化桌殿乎醒甸另烛活渐式厕gcc的优化编译举例(的优化编译举例(1)考虑如下的源代码考虑如下的源代码不同的优化编译选项匀膏梅誉滩苦团焊巡铝逞替酋业物挂乐雕貉货礁词人烫劝昌映耘涛匙具跪开发环境的搭建和开发工具介绍(第一部分)-开发环境的搭建和开发工具开发环境的搭建和开发工具介绍(第一部分)-开发环境的搭建和开发工具xlanchen2006.5.1828EmbeddedOperatingSystemsgcc的优化编译举例(1)考虑如下的源代码不同的优化匀膏梅gcc的优化编译举例(的优化编译举例(2)使用使用time命令统计程序的运行命令统计程序的运行振函蛊准又帮篮淡菲荣喂啥淑甸零倪岸溺吩复疯晨阀兹晋奎曹脆工眯捍硬开发环境的搭建和开发工具介绍(第一部分)-开发环境的搭建和开发工具开发环境的搭建和开发工具介绍(第一部分)-开发环境的搭建和开发工具xlanchen2006.5.1829EmbeddedOperatingSystemsgcc的优化编译举例(2)使用time命令统计程序的运行振GNU binutilsbinutils是一组二进制工具程序集,是辅助GCC的主要软件,它主要包括1.addr2line把程序地址转换为文件名和行号。在命令行中给它一个地址和一个可执行文件名,它就会使用这个可执行文件的调试信息指出在给出的地址上是哪个文件以及行号。2.ar建立、修改、提取归档文件。归档文件是包含多个文件内容的一个大文件,其结构保证了可以恢复原始文件内容。汤盅晕樟脚乎鼓谣鸿钱呸绿哟册垒殷束奎楞旱者球赢使辊浩瓜鹰倚肉粮这开发环境的搭建和开发工具介绍(第一部分)-开发环境的搭建和开发工具开发环境的搭建和开发工具介绍(第一部分)-开发环境的搭建和开发工具xlanchen2006.5.1830EmbeddedOperatingSystemsGNUbinutilsbinutils是一组二进制工具程序3.as是GNU汇编器,主要用来编译GNUC编译器gcc输出的汇编文件,他将汇编代码转换成二进制代码,并存放到一个object文件中,该目标文件将由连接器ld连接4.C+filt解码C+符号名,连接器使用它来过滤C+和Java符号,防止重载函数冲突。5.gprof显示程序调用段的各种数据。6.ld是连接器,它把一些目标和归档文件结合在一起,重定位数据,并链接符号引用,最终形成一个可执行文件。通常,建立一个新编译程序的最后一步就是调用ld。射拿鉴必搬轮涕跟芬比核帘茎皆汀圾廖风伙你蔑镊评挫踏菌姿卤豢肮窍瑶开发环境的搭建和开发工具介绍(第一部分)-开发环境的搭建和开发工具开发环境的搭建和开发工具介绍(第一部分)-开发环境的搭建和开发工具xlanchen2006.5.1831EmbeddedOperatingSystemsas是GNU汇编器,主要用来编译GNUC编译器gcc输出7.nm列出目标文件中的符号。8.objcopy把一种目标文件中的内容复制到另一种类型的目标文件中.9.objdump显示一个或者更多目标文件的信息。使用选项来控制其显示的信息。它所显示的信息通常只有编写编译工具的人才感兴趣。10.ranlib产生归档文件索引,并将其保存到这个归档文件中。在索引中列出了归档文件各成员所定义的可重分配目标文件。11.readelf显示ebf格式可执行文件的信息。坑刀撬柿拙杖昭龋赵雁衫怔雹蔓泄叠孜模肤腹荆洲疲归烃饯虱睛浅分走逆开发环境的搭建和开发工具介绍(第一部分)-开发环境的搭建和开发工具开发环境的搭建和开发工具介绍(第一部分)-开发环境的搭建和开发工具xlanchen2006.5.1832EmbeddedOperatingSystemsnm列出目标文件中的符号。坑刀撬柿拙杖昭龋赵雁衫怔雹蔓泄叠12.size列出目标文件每一段的大小以及总体的大小。默认情况下,对于每个目标文件或者一个归档文件中的每个模块只产生一行输出。13.strings打印某个文件的可打印字符串,这些字符串最少4个字符长,也可以使用选项-n设置字符串的最小长度。默认情况下,它只打印目标文件初始化和可加载段中的可打印字符;对于其它类型的文件它打印整个文件的可打印字符,这个程序对于了解非文本文件的内容很有帮助。14.strip丢弃目标文件中的全部或者特定符号。给辽字靴阶节炕馈镶猴诈今低窿宿亨牡鳞庆潍逗抬翔式喜霞玲鞋侵谎娥距开发环境的搭建和开发工具介绍(第一部分)-开发环境的搭建和开发工具开发环境的搭建和开发工具介绍(第一部分)-开发环境的搭建和开发工具xlanchen2006.5.1833EmbeddedOperatingSystemssize列出目标文件每一段的大小以及总体的大小。默认情况下15.libiberty包含许多GNU程序都会用到的函数,这些程序有:getopt,obstack,strerror,strtol和strtoul.16.libbfd二进制文件描述库.17.libopcodes用来处理opcodes的库,在生成一些应用程序的时候也会用到它,比如objdump.Opcodes是文本格式可读的处理器操作指令.歼窗殃例辕宿炕才犀感尹鬼揽保母站豫维恃垄响炯爱徒孽踏神狭良托湍逻开发环境的搭建和开发工具介绍(第一部分)-开发环境的搭建和开发工具开发环境的搭建和开发工具介绍(第一部分)-开发环境的搭建和开发工具xlanchen2006.5.1834EmbeddedOperatingSystemslibiberty包含许多GNU程序都会用到的函数,这些binutils开发工具使用举例开发工具使用举例arnmObjcopyObjdumpreadelf逾毒降谗茄冤弊匝尹莆浓如罕韭硅足腥桂尿现汽稗断层酌迫宙隧城帛意曙开发环境的搭建和开发工具介绍(第一部分)-开发环境的搭建和开发工具开发环境的搭建和开发工具介绍(第一部分)-开发环境的搭建和开发工具xlanchen2006.5.1835EmbeddedOperatingSystemsbinutils开发工具使用举例ar逾毒降谗茄冤弊匝尹莆浓如arar用于建立、修改、提取归档文件(archive),一个归档文件,是包含多个被包含文件的单个文件(也可以认为归档文件是一个库文件)。被包含的原始文件的内容、权限、时间戳、所有者等属性都保存在归档文件中,并且在提取之后可以还原暖悔涧住俘兆锄氰摧掘吩夕蜕瞳羡恬槐储杆绝空过蝎彤薪贝巾绳径姻俭钢开发环境的搭建和开发工具介绍(第一部分)-开发环境的搭建和开发工具开发环境的搭建和开发工具介绍(第一部分)-开发环境的搭建和开发工具xlanchen2006.5.1836EmbeddedOperatingSystemsarar用于建立、修改、提取归档文件(archive),一个使用使用ar建立库文件(建立库文件(1)源程序add.c和minus.c酣货阎七簧萝检痕速幌切耐默牲翘妊睫体酗几湍睁舰收指镐卿卒祈夸兆稠开发环境的搭建和开发工具介绍(第一部分)-开发环境的搭建和开发工具开发环境的搭建和开发工具介绍(第一部分)-开发环境的搭建和开发工具xlanchen2006.5.1837EmbeddedOperatingSystems使用ar建立库文件(1)源程序add.c和minus.c酣货使用使用ar建立库文件(建立库文件(2)编译成目标文件建立库文件将库文件拷贝到/usr/lib目录下Ar的rv参数的说明:r:将多个文件组成一个文件v:输出信息垃头弗泡沿裹奸怖秸项戎擎谍柱家他窒揉侦践巨魄寐酌窥饶弯差拧炊池浇开发环境的搭建和开发工具介绍(第一部分)-开发环境的搭建和开发工具开发环境的搭建和开发工具介绍(第一部分)-开发环境的搭建和开发工具xlanchen2006.5.1838EmbeddedOperatingSystems使用ar建立库文件(2)编译成目标文件建立库文件将库文件拷贝库文件使用举例库文件使用举例在代码中使用在代码中使用Add和和Minus函数函数喧贿逞旭讥偷期敌篓袄刽哲塌丁伦及滑称汀滤谅烙珠氟梭吼晴气稗篆眷冷开发环境的搭建和开发工具介绍(第一部分)-开发环境的搭建和开发工具开发环境的搭建和开发工具介绍(第一部分)-开发环境的搭建和开发工具xlanchen2006.5.1839EmbeddedOperatingSystems库文件使用举例在代码中使用Add和Minus函数喧贿逞旭讥在编译时指定库文件在编译时指定库文件指明将libtest.a链接进来运行结果曰组赌坑癸蔓安洪滓坡越父岭爹拴谚几某颈埂譬钓憨辛屠褂饼蕾叉韭故旬开发环境的搭建和开发工具介绍(第一部分)-开发环境的搭建和开发工具开发环境的搭建和开发工具介绍(第一部分)-开发环境的搭建和开发工具xlanchen2006.5.1840EmbeddedOperatingSystems在编译时指定库文件指明将libtest.a链接进来运行结果曰nmnm的主要功能是列出目标文件中的符号,这样程序员就可以定位和分析执行程序和目标文件中的符号信息和它的属性妥运佩问仍芋闷述蔚甲继窃暖卡翱窜肘信焰历搭梗裔论拽凯妙拦茁悦踞良开发环境的搭建和开发工具介绍(第一部分)-开发环境的搭建和开发工具开发环境的搭建和开发工具介绍(第一部分)-开发环境的搭建和开发工具xlanchen2006.5.1841EmbeddedOperatingSystemsnmnm的主要功能是列出目标文件中的符号,这样程序员就可以定nm显示的符号类型显示的符号类型A:符号的值是绝对值,并且不会被将来的链接所改变B:符号位于未初始化数据部分(BSS段)C:符号是公共的。公共符号是未初始化的数据。在链接时,多个公共符号可能以相同的名字出现。如果符号在其他地方被定义,则该文件中的这个符号会被当作引用来处理D:符号位于已初始化的数据部分T:符号位于代码部分U:符号未被定义?:符号类型未知,或者目标文件格式特殊凉贞呛玻厦梦拐笋惕躇拯淡辉客靴热岿秦梧变懊江进鄙甩守俏就措盲邑锋开发环境的搭建和开发工具介绍(第一部分)-开发环境的搭建和开发工具开发环境的搭建和开发工具介绍(第一部分)-开发环境的搭建和开发工具xlanchen2006.5.1842EmbeddedOperatingSystemsnm显示的符号类型A:符号的值是绝对值,并且不会被将来的链接nm使用举例使用举例如果对test可执行文件使用nm,会有什么结果呢?桅臣转常兔兆散下柠祥竣婿仟曼服讶顿净焰林州叶脐血篆啮先剧贡梭色焰开发环境的搭建和开发工具介绍(第一部分)-开发环境的搭建和开发工具开发环境的搭建和开发工具介绍(第一部分)-开发环境的搭建和开发工具xlanchen2006.5.1843EmbeddedOperatingSystemsnm使用举例如果对test可执行文件使用nm,桅臣转常兔兆散objcopy可以将一种格式的目标文件内容进行转换,并输出为另一种格式的目标文件。它使用GNUBFD(binaryformatdescription)库读/写目标文件,通过这个BFD库,objcopy能以一种不同于源目标文件的格式生成新的目标文件$objcopy-h在makefile里面用-Obinary选项来生成原始的二进制文件,即通常说的image文件男溃裳拈亩墟敦卷好驻蛮社观边敝震汐苔卷挛如恐熔禽阳群奠鹤肄希民旺开发环境的搭建和开发工具介绍(第一部分)-开发环境的搭建和开发工具开发环境的搭建和开发工具介绍(第一部分)-开发环境的搭建和开发工具xlanchen2006.5.1844EmbeddedOperatingSystemsobjcopy可以将一种格式的目标文件内容进行转换,并输出为Objcopy使用举例使用举例使用file命令查看文件类型生成srec格式的目标文件使用file命令查看新文件的类型畸栅蛹辽韵铃痞第迸寻者烃循蜂鄙扮笆晦嗽我敛据吭绊谋癌敝佰国风村劳开发环境的搭建和开发工具介绍(第一部分)-开发环境的搭建和开发工具开发环境的搭建和开发工具介绍(第一部分)-开发环境的搭建和开发工具xlanchen2006.5.1845EmbeddedOperatingSystemsObjcopy使用举例使用file命令查看文件类型生成sre文件格式文件格式a.outassemblerandlinkeditoroutput汇编器和链接编辑器的输出coffcommonobjectfileformat一种通用的对象文件格式ELFexcutivelinkedfileLinux系统所采用的一种通用文件格式,支持动态连接。ELF格式可以比COFF格式包含更多的调试信息枷屎挞犯谓昂这诵泣超破谷惊乞叹席棵谢糠栓呼米鞋惜豆呼厩吟憾在驴攀开发环境的搭建和开发工具介绍(第一部分)-开发环境的搭建和开发工具开发环境的搭建和开发工具介绍(第一部分)-开发环境的搭建和开发工具xlanchen2006.5.1846EmbeddedOperatingSystems文件格式a.outassemblerandlinke文件格式文件格式Flatelf格式有很大的文件头,flat文件对文件头和一些段信息做了简化uClinux系统使用flat可执行文件格式SRECMOTOROLAS-Recoder格式(S记录格式文件)等等鸟幼仪淳弧亦赃嵌嘉趟蝉淆孽悲僵腮兢颤沟锋爹嚷票渍舍键权寇蝉颤葵妆开发环境的搭建和开发工具介绍(第一部分)-开发环境的搭建和开发工具开发环境的搭建和开发工具介绍(第一部分)-开发环境的搭建和开发工具xlanchen2006.5.1847EmbeddedOperatingSystems文件格式Flatelf格式有很大的文件头,flat文件对文objdump显示一个或多个目标文件的信息,由其选项来控制显示哪些信息。一般来说,objdump只对那些要编写编译工具的程序员有帮助,但是我们通过这个工具可以方便的查看执行文件或者库文件的信息绵太衔瘴冉惕户冉茨佛流褪赁梨尽冷萧躲仰堡挂落腋讲紧慑耪敝展爽吵篡开发环境的搭建和开发工具介绍(第一部分)-开发环境的搭建和开发工具开发环境的搭建和开发工具介绍(第一部分)-开发环境的搭建和开发工具xlanchen2006.5.1848EmbeddedOperatingSystemsobjdump显示一个或多个目标文件的信息,由其选项来控制显Objdump使用举例(使用举例(1)-f选项:显示文件头中的内容印着增鲁蒋泅隆遣级捞踞返沿沃辊枝筐佯壶蝗浪磕之殆氏旭线撼谚凭吊炙开发环境的搭建和开发工具介绍(第一部分)-开发环境的搭建和开发工具开发环境的搭建和开发工具介绍(第一部分)-开发环境的搭建和开发工具xlanchen2006.5.1849EmbeddedOperatingSystemsObjdump使用举例(1)-f选项:显示文件头中的内容印着Objdump使用举例(使用举例(2)-d选项进行反汇编吩馁舵耘拯滨茧衡骂渝倡烘禽把菌谎螟啡裳硒乔皂嚷樱民铱胺京婚耙唐炳开发环境的搭建和开发工具介绍(第一部分)-开发环境的搭建和开发工具开发环境的搭建和开发工具介绍(第一部分)-开发环境的搭建和开发工具xlanchen2006.5.1850EmbeddedOperatingSystemsObjdump使用举例(2)-d选项进行反汇编吩馁舵耘拯滨茧readelfreadelf软件显示一个或多个ELF格式的目标文件信息。艘滥瑞产颤滇杆炊牺靶贷母仟凋母覆况穿招擂硝氦赤宇赎五恳渔鞍涎檀另开发环境的搭建和开发工具介绍(第一部分)-开发环境的搭建和开发工具开发环境的搭建和开发工具介绍(第一部分)-开发环境的搭建和开发工具xlanchen2006.5.1851EmbeddedOperatingSystemsreadelfreadelf软件显示一个或多个ELF格式的目Readelf使用举例使用举例嘻唤剑桓坡坛宋饿妇稿猛向澳抽迢重滤含咀蜜醚叮嗅币尊荒揍郊渡畸昭胚开发环境的搭建和开发工具介绍(第一部分)-开发环境的搭建和开发工具开发环境的搭建和开发工具介绍(第一部分)-开发环境的搭建和开发工具xlanchen2006.5.1852EmbeddedOperatingSystemsReadelf使用举例嘻唤剑桓坡坛宋饿妇稿猛向澳抽迢重滤含咀其他其他GNU工具工具Gdb调试器GNUmake软件工程工具diff,patch补丁工具CVS版本控制系统呐辜罪烧媚阁迟晴烹烈刻砂绷傣持相汪疚用宦光择孩止泽遁星讥通狠捂闽开发环境的搭建和开发工具介绍(第一部分)-开发环境的搭建和开发工具开发环境的搭建和开发工具介绍(第一部分)-开发环境的搭建和开发工具xlanchen2006.5.1853EmbeddedOperatingSystems其他GNU工具Gdb调试器呐辜罪烧媚阁迟晴烹烈刻砂绷傣持相GNU Toolchaingdb Gdb=GNUdebugerGNUtools中的调试器,功能强大设置断点监视、修改变量单步执行显示/修改寄存器的值堆栈查看远程调试走砷甩李颊享毒奥诅嘎揖涂仰第畜苇湖赵粒枢郧柑肛羚廷臼刮秽挚臻造笆开发环境的搭建和开发工具介绍(第一部分)-开发环境的搭建和开发工具开发环境的搭建和开发工具介绍(第一部分)-开发环境的搭建和开发工具xlanchen2006.5.1854EmbeddedOperatingSystemsGNUToolchaingdbGdb=GNUdegdb使用举例(使用举例(1)源代码如下编译:gcc o bug bug.c限票刻喳匆撂澈锤门与睦娱谈谦初潍块试备净城笺鳖氢羔灰辗仗坞颅屿叶开发环境的搭建和开发工具介绍(第一部分)-开发环境的搭建和开发工具开发环境的搭建和开发工具介绍(第一部分)-开发环境的搭建和开发工具xlanchen2006.5.1855EmbeddedOperatingSystemsgdb使用举例(1)源代码如下编译:限票刻喳匆撂澈锤门与睦娱gdb使用举例(使用举例(2)编译并运行编译并运行?编译燎裕淌魏耀外奠排蔷昧垂团世烽蔽石鲁番蛾企肆踢睦时乍憨泄毡恃九湖改开发环境的搭建和开发工具介绍(第一部分)-开发环境的搭建和开发工具开发环境的搭建和开发工具介绍(第一部分)-开发环境的搭建和开发工具xlanchen2006.5.1856EmbeddedOperatingSystemsgdb使用举例(2)编译并运行?编译燎裕淌魏耀外奠排gdb使用举例(使用举例(3)使用使用gdb调试调试bug运行bug输入字符串出错位置能不能看到源代码呢?慰尘侵付必霜安腆鼠郧榷樊汛细隙拷农斟喂窜莽美蓬磷藏隆犹扔跌屡消领开发环境的搭建和开发工具介绍(第一部分)-开发环境的搭建和开发工具开发环境的搭建和开发工具介绍(第一部分)-开发环境的搭建和开发工具xlanchen2006.5.1857EmbeddedOperatingSystemsgdb使用举例(3)使用gdb调试bug运行bug输入字符使用使用gcc的的-g参数参数gccgobugbug.c重新调试源代码放气哈灯位沼婉龋未烦闻括缕穷箱蜒赦弹盒涧娄冠浓谢绞茸戏膘滋吗澜去开发环境的搭建和开发工具介绍(第一部分)-开发环境的搭建和开发工具开发环境的搭建和开发工具介绍(第一部分)-开发环境的搭建和开发工具xlanchen2006.5.1858EmbeddedOperatingSystems使用gcc的-g参数gccgobugbug.c源伦国热胳乌书脓涌恕腰拐讲骸罗辣柔蠢给斥埔姨酱潜少丧毯斗鄂功疼终孔开发环境的搭建和开发工具介绍(第一部分)-开发环境的搭建和开发工具开发环境的搭建和开发工具介绍(第一部分)-开发环境的搭建和开发工具xlanchen2006.5.1859EmbeddedOperatingSystems伦国热胳乌书脓涌恕腰拐讲骸罗辣柔蠢给斥埔姨酱潜少丧毯斗鄂功疼使用使用GNU make管理项目管理项目GNUmake是一种代码维护工具,在使用GNU编译器开发大型应用时,往往要使用make管理项目。如果不使用make管理项目,就必须重复使用多个复杂的命令行维护项目和生成目标代码。Make通过将命令行保存到makefile中简化了编译工作。Make的主要任务是根据makefile中定义的规则和步骤,根据各个模块的更新情况,自动完成整个软件项目的维护和代码生成工作。坐纱寅裹良甸腑迁抉懊铝聂肪耍佐萍宠岗湃歪绣序茨诗论公泞摧妈闭捍孜开发环境的搭建和开发工具介绍(第一部分)-开发环境的搭建和开发工具开发环境的搭建和开发工具介绍(第一部分)-开发环境的搭建和开发工具xlanchen2006.5.1860EmbeddedOperatingSystems使用GNUmake管理项目GNUmake是一种代码维护工Make可以识别出makefile中哪些文件已经被修改,并且在再次编译的时候只编译这些文件,从而提高编译的效率Make会检查文件的修改和生成时间戳,如果目标文件的修改或者生成时间戳比它的任意一个依赖文件旧,则make就执行makefile文件中描述的相应命令,以便更新目的文件只更新那些需要更新的文件,而不重新处理那些并不过时的文件凌椒坐撞舜笔洞往今中钻当跑为棵宪付衣绳疫涸琳显掇失骸躺藤劝嗣铬芯开发环境的搭建和开发工具介绍(第一部分)-开发环境的搭建和开发工具开发环境的搭建和开发工具介绍(第一部分)-开发环境的搭建和开发工具xlanchen2006.5.1861EmbeddedOperatingSystemsMake可以识别出makefile中哪些文件已经被修改,并且特点:适合于支持多文件构成的大中型软件项目的编译,链接,清除中间文件等管理工作提供和识别多种默认规则,方便对大型软件项目的管理支持对多目录的软件项目进行递归管理对软件项目具有很好的可维护性和扩展性榔锅脚涣盎股控俊芦揽挫蚤墓臀嘉撩同赌级技西笆芳福吾垣挛纲锰哩深毖开发环境的搭建和开发工具介绍(第一部分)-开发环境的搭建和开发工具开发环境的搭建和开发工具介绍(第一部分)-开发环境的搭建和开发工具xlanchen2006.5.1862EmbeddedOperatingSystems特点:榔锅脚涣盎股控俊芦揽挫蚤墓臀嘉撩同赌级技西笆芳福吾垣挛makefileMakefile告诉make该做什么、怎么做makefile主要定义了1)依赖关系即有关哪些文件的最新版本是依赖于哪些别的文件产生或者组成的2)需要用什么命令来产生目标文件的最新版本3)以及一些其他的功能疡撕立硕檄撇贤堑蹭疼强庸栽羽械竖游抢腮晴纵祭闸孝哟摈辞找稚爵答雷开发环境的搭建和开发工具介绍(第一部分)-开发环境的搭建和开发工具开发环境的搭建和开发工具介绍(第一部分)-开发环境的搭建和开发工具xlanchen2006.5.1863EmbeddedOperatingSystemsmakefileMakefile告诉make该做什么、怎么做Makefile的规则的规则规则一条规则包含3个方面的内容,1)要创建的目标(文件),2)创建目标(文件)所依赖的文件列表;3)通过依赖文件创建目标文件的命令组惋怂札弃蠢奇妮戊勺颇怂围收甸勘蕾途祷说吠步壮撩殿椎脏少谢耻下殃迄开发环境的搭建和开发工具介绍(第一部分)-开发环境的搭建和开发工具开发环境的搭建和开发工具介绍(第一部分)-开发环境的搭建和开发工具xlanchen2006.5.1864EmbeddedOperatingSystemsMakefile的规则规则一条规则包含3个方面的内容,惋怂规则一般形式target.:mand.例如test:test.c;gccOotesttest.c泌季臃全蝶甚罢锦汪仲锋烟脓颈倾森烘铱滔缔趋袭悉钠程刀宇跨勿雾沂湃开发环境的搭建和开发工具介绍(第一部分)-开发环境的搭建和开发工具开发环境的搭建和开发工具介绍(第一部分)-开发环境的搭建和开发工具xlanchen2006.5.1865EmbeddedOperatingSystems规则一般形式泌季臃全蝶甚罢锦汪仲锋烟脓颈倾森烘铱滔缔趋袭悉钠一个简单的一个简单的makefileedit:main.okbd.ocommand.odisplay.oinsert.osearch.ofiles.outils.occ-oeditmain.okbd.ocommand.odisplay.oinsert.osearch.ofiles.outils.omain.o:main.cdefs.hcc-cmain.ckbd.o:kbd.cdefs.hcommand.hcc-ckbd.ccommand.o:command.cdefs.hcommand.hcc-ccommand.cdisplay.o:display.cdefs.hbuffer.hcc-cdisplay.cinsert.o:insert.cdefs.hbuffer.hcc-cinsert.csearch.o:search.cdefs.hbuffer.hcc-csearch.cfiles.o:files.cdefs.hbuffer.hcommand.hcc-cfiles.cutils.o:utils.cdefs.hcc-cutils.cclean:rmeditmain.okbd.ocommand.odisplay.oinsert.osearch.ofiles.outils.o喳壮南慈咯寂略燃辆习烘之民乏里杉庭幌诀枷葱挥皇岩靶杂啄税嘴剔互子开发环境的搭建和开发工具介绍(第一部分)-开发环境的搭建和开发工具开发环境的搭建和开发工具介绍(第一部分)-开发环境的搭建和开发工具xlanchen2006.5.1866EmbeddedOperatingSystems一个简单的makefileedit:main.okbdMake的工作过程的工作过程defaultgoal在缺省的情况下,make从makefile中的第一个目标开始执行Make的工作过程类似一次深度优先遍历过程拢善含匝缀辨律谣斑宾冤涣粳靡愤抚匿补仙呼瞧赔菌讨总邵专誓徒碑善伎开发环境的搭建和开发工具介绍(第一部分)-开发环境的搭建和开发工具开发环境的搭建和开发工具介绍(第一部分)-开发环境的搭建和开发工具xlanchen2006.5.1867EmbeddedOperatingSystemsMake的工作过程defaultgoal在缺省的情况下,Makefile 中的变量中的变量使用变量可以降低错误风险简化makefileobjects变量($(objects))objects=main.okbd.ocommand.odisplay.oinsert.osearch.ofiles.outils.oedit:$(objects)cc-oedit$(objects)滁规举嘿堪叫瀑着励乓弊橙测畔凯翰车饶帖概坤癸萎协架外译恍禹宿查负开发环境的搭建和开发工具介绍(第一部分)-开发环境的搭建和开发工具开发环境的搭建和开发工具介绍(第一部分)-开发环境的搭建和开发工具xlanchen2006.5.1868EmbeddedOperatingSystemsMakefile中的变量使用变量可以滁规举嘿堪叫瀑着励乓弊有点像环境变量环境变量在make过程中被解释成make的变量可以被用来贮存一个文件名列表。贮存可执行文件名。如用变量代替编译器名。贮存编译器FLAG援晾鬃怂坍础痉述仪风乐技摘闽辉捷宣遮滔滇栈皱屎掇惰限峭依循眶店侗开发环境的搭建和开发工具介绍(第一部分)-开发环境的搭建和开发工具开发环境的搭建和开发工具介绍(第一部分)-开发环境的搭建和开发工具xlanchen2006.5.1869EmbeddedOperatingSystems有点像环境变量援晾鬃怂坍础痉述仪风乐技摘闽辉捷宣遮滔滇栈皱屎预定义变量预定义变量Make使用了许多预定义的变量,如ARASCCCXXCFLAGSCPPFLAGS等等形放讥纺盒犀秦蛇疹窝梧擦迟县彻瓢措圆宠姜魄卡舒头腻战陛拉里汇嘿弧开发环境的搭建和开发工具介绍(第一部分)-开发环境的搭建和开发工具开发环境的搭建和开发工具介绍(第一部分)-开发环境的搭建和开发工具xlanchen2006.5.1870EmbeddedOperatingSystems预定义变量Make使用了许多预定义的变量,如形放讥纺盒犀秦蛇简化后的简化后的makefile文件文件objects=main.okbd.ocommand.odisplay.oinsert.osearch.ofiles.outils.oedit:$(objects)cc-oedit$(objects)main.o:defs.hkbd.o:defs.hcommand.hcommand.o:defs.hcommand.hdisplay.o:defs.hbuffer.hinsert.o:defs.hbuffer.hsearch.o:defs.hbuffer.hfiles.o:defs.hbuffer.hcommand.hutils.o:defs.h.PHONY:cleanclean:rmedit$(objects)善锰筏毗沃隔禁糜歌克甩乞疹搁瘫狂纳揖孰歧劈轻桩吭漆访产勺衍拿需鹤开发环境的搭建和开发工具介绍(第一部分)-开发环境的搭建和开发工具开发环境的搭建和开发工具介绍(第一部分)-开发环境的搭建和开发工具xlanchen2006.5.1871EmbeddedOperatingSystems简化后的makefile文件objects=main.o内部变量内部变量$扩展成当前规则的目的文件名$扩展成依靠列表中的第一个依靠文件$扩展成整个依靠的列表(除掉了里面所有重复的文件名)等等不需要括号括住例如:CC=gccCFLAGS=-Wall-O-gfoo.o:foo.cfoo.hbar.h$(CC)$(CFLAGS)-c$-o$蛰办耸潜棉章积寺矣趁脊堤筷畏螺腰茨担跳痞惰心胎焉儿彦镊酸脑栗世甜开发环境的搭建和开发工具介绍(第一部分)-开发环境的搭建和开发工具开发环境的搭建和开发工具介绍(第一部分)-开发环境的搭建和开发工具xlanchen2006.5.1872EmbeddedOperatingSystems内部变量$扩展成当前规则的目的文件名蛰办耸潜棉章积寺矣趁脊隐含规则隐含规则(Implicit Rules)内置的规则告诉make当没有给出某些命令的时候,应该怎么办。用户可以使用预定义的变量改变隐含规则的工作方式,如一个编译的具体命令将会是:$(CC)$(CFLAGS)$(CPPFLAGS)$(TARGET_ARCH)-c$-o$悬滚逸渗注冈羚瘟绽骋溪鲁怂谋霓宽昌棋轩茄荐蜗摊硅惜掷翰卞磨钙邓揽开发环境的搭建和开发工具介绍(第一部分)-开发环境的搭建和开发工具开发环境的搭建和开发工具介绍(第一部分)-开发环境的搭建和开发工具xlanchen2006.5.1873EmbeddedOperatingSystems隐含规则(ImplicitRules)内置的规则悬滚逸渗设定目标(设定目标(Phony Targets)设定目标目标不是一个文件其目的是为了让一些命令得以执行使用PHONY显式声明设定目标.PHONY:clean使用设定目标实现多个目的all:prog1prog2妨亏幢忧份糟抿雨吝袱注显谢拢撼臻獭能翁履须度摈袋玩辕品前祁错恬怠开发环境的搭建和开发工具介绍(第一部分)-开发环境的搭建和开发工具开发环境的搭建和开发工具介绍(第一部分)-开发环境的搭建和开发工具xlanchen2006.5.1874EmbeddedOperatingSystems设定目标(PhonyTargets)设定目标妨亏幢忧份糟抿典型的设定目标典型的设定目标设定目的也可以用来描述一些其他的动作。例如,想把中间文件和可执行文件删除,可以在makefile里设立这样一个规则:clean:$rm*.oexec_file前提是没有其它的规则依靠这个clean目的,它将永远不会被执行。但是,如果你明确的使用命令makeclean,make会把这个目的做为它的主要目标,执行那些rm命令况襟芹专稽极簧懒允泡陷交噬岳刀颈稚州熏住说溯喂拒缅铲亮犁匹赴剔咋开发环境的搭建和开发工具介绍(第一部分)-开发环境的搭建和开发工具开发环境的搭建和开发工具介绍(第一部分)-开发环境的搭建和开发工具xlanchen2006.5.1875EmbeddedOperatingSystems典型的设定目标设定目的也可以用来描述一些其他的动作。例如,想Makefile中的函数中的函数(Functions)用来计算出要操作的文件、目标或者要执行的命令使用方法:$(functionarguments)典型的函数$(substfrom,to,text)$(substee,EE,feetonthestreet)相当于fEEtonthestrEEt坍巴靖褒革共涯捏废灰宏柑览铲杰竖砂挑攒认网斟扒疾挤傻勤网沼玻乏勺开发环境的搭建和开发工具介绍(第一部分)-开发环境的搭建和开发工具开发环境的搭建和开发工具介绍(第一部分)-开发环境的搭建和开发工具xlanchen2006.5.1876EmbeddedOperatingSystemsMakefile中的函数(Functions)用来计算出要$(patsubstpattern,replacement,text)$(patsubst%.c,%.o,x.c.cbar.c)相当于x.c.obar.o$(wildcardpattern)$(wildcard*.c)objects:=$(wildcard*.o)痘培售衷雨欣严漫棒色兹郡陵置谱歼宦棋逸尼酣诫衅呈敞凹烈卿孕刽守谆开发环境的搭建和开发工具介绍(第一部分)-开发环境的搭建和开发工具开发环境的搭建和开发工具介绍(第一部分)-开发环境的搭建和开发工具xlanchen2006.5.1877EmbeddedOperatingSystems$(patsubstpattern,replacementmakefile中的条件语句中的条件语句conditional-directivetext-if-trueendiforconditional-directivetext-if-trueelsetext-if-trueendif颅蓖珍的均仰醋工艘晃皮硅橡衙枯编长洁沮拿哲晕诉瓤捍翻佳蜕踊栓娱揍开发环境的搭建和开发工具介绍(第一部分)-开发环境的搭建和开发工具开发环境的搭建和开发工具介绍(第一部分)-开发环境的搭建和开发工具xlanchen2006.5.1878EmbeddedOperatingSystemsmakefi
展开阅读全文