arm–linux–gcc -wall -O2 -c -o $@ $<-o 只激活预处理,编译,和汇编,也便是他只把程序做成obj文件-Wall 指定发生悉数的正告信息-O2 编译器对程序供给的编译优化选项,在编译的时分运用该选项,可以使生成的履行文件的履行功率进步-c 表明只要求编译器进行编译,而不要进行链接,生成以源文件的文件名命名但把其后缀由 .c 或 .cc 变成 .o 的方针文件-S 只激活预处理和编译,便是指把文件编译成为汇编代码arm-linux-ld直接指定代码段,数据段,BSS段的开端地址-Ttest startaddr-Tdata startaddr-Tbss startaddr
示例:Arm-linux-ld –Ttext 0x0000000 –g led.o –o led_elf
运用衔接脚本设置地址:Arm-linux-ld –Ttimer.lds –o timer_elf $^其间timer.lds 为衔接脚本
完好的衔接脚本格局:SECTIONS{…Secname start ALING(aling) (NOLOAD):AT(ldaddr){contents} > region:phdr=fill…..}
arm-linux-objcopy被用来仿制一个方针文件的内容到另一个文件中,可用于不同源文件的之间的格局转化示例:Arm-linux-objcopy –o binary –S elf_file bin_file
常用的选项:input-file , outflie输入和输出文件,假如没有outfile,则输出文件名为输入文件名
2.-l bfdname或—input-target=bfdname用来指明源文件的格局,bfdname是BFD库中描绘的规范格局名,假如没指明,则arm-linux-objcopy自己剖析
3.-O bfdname 输出的格局
4.-F bfdname 一同指明源文件,意图文件的格局
5.-R sectionname 从输出文件中删除去一切名为sectionname的段
6.-S 不从源文件中仿制重定位信息和符号信息到方针文件中
7.-g 不从源文件中仿制调试符号到方针文件中
arm-linux-objdump检查方针文件(.o文件)和库文件(.a文件)信息arm-linux-objdump -D -m arm led_elf > led.dis-D 显现文件中一切汇编信息-m machine指定反汇编方针文件时运用的架构,当待反汇编文件自身没有描绘架构信息的时分(比方S-records),这个选项很有用。可以用-i选项列出这儿可以指定的架构.
常用选项:
1.-b bfdname 指定方针码格局2.—disassemble或许-d 反汇编可履行段3.—dissassemble-all或许-D 反汇编一切段4.-EB,-EL指定字节序5.—file-headers或许-f 显现文件的全体头部摘要信息6.—section-headers,–headers或许-h 显现方针文件中各个段的头部摘要信息7.—info 或许-I 显现支撑的方针文件格局和CPU架构8.—section=name或许-j name显现指定section 的信息9.—architecture=machine或许-m machine 指定反汇编方针文件时运用的架构
1. 修正源代码的顶层MakefileCC =$(CROSSCOM_PILE)gcc–>CC =$(CROSSCOM_PILE)gcc-g使成生的vmlinux中含有debug信息2. 一切生成.o的rule中再加一条CC-E-dD -C $< > /preprocessing/$(shell pwd)/$<生成预处理文件从这个文件里边能很简单找到c源文件的宏界说3. objdump -h vmlinux > vmlinux.txt显现linux 内核段信息,如段的开端虚拟地址,段的长度4.objdump -S -l -z vmlinux > vmlinux.txt反汇编vmlinux到vmlinux.txt,vmlinux.txt含有汇编和c源文件的混合代码,看起来很便利。并且能一步步看linux怎样一步步运转的。5. objdump -S -l -z -j xxxx(section name) vmlinux > vmlinux.txt反汇编linux内核段xxxx到文件vmlinux.txt中。6. objdump -x vmlinux > x.txtvmliux中一切段的头信息,其间包口vmlinux的进口地址等7. objdump –debugging vmlinux > debugging.txt许多有用的debug信息,如函数名,结构体界说等我觉的用依据以上信息,ultraedit看很便利。特别在vmlinux.txt中选中文件名,用ultraedit右键的open能立刻翻开文件,很便利。
objdump -j .text -Svmlinux > vmlinux.txt-S尽可能反汇编出源代码,特别当编译的时分指定了-g这种调试参数时,作用比较显着。隐含了-d参数。
-l用文件名和行号标示相应的方针代码,只是和-d、-D或许-r一同运用运用-ld和运用-d的差异不是很大,在源码级调试的时分有用,要求编译时运用了-g之类的调试编译选项。
[-l | –line-numbers][-S | –source]混合汇编[-z | –disassemble-zeroes][-j section | –section=section][–prefix-addresses]