-pipe 利用管道优化编译过程
    
   
    
     -M  递归打印文件所包含的头文件
    
   
    
     -MM 打印头文件不递归
    
   
    
     -E 预处理
    
   
    
     -S 编译成汇编代码
    
   
    
     -c  汇编成机器码
    
   
    
     -v  查看执行细节
    
   
    
     -g  增加调试信息
    
   
    
     -o  指定输出文件名
    
   
    
     -dM-E  查找某个宏定义
    
   
    
     -Wall  打开所有警告
    
   
    
     -Werror  所有警告认为是错误
    
   
    
     -O0 不优化
    
   
    
     -O/-O1
    
   
    
     -O2
    
   
    
     -O3
    
   
    
     -llib  链接库
    
   
    
     -L
    
   
    
     -nostartfiles  不链接启动文件 在制作BootLoader 内核时使用
    
   
    
     -nostdlib
    
   
    
     -nostdinc
    
   
    
     -static 在支持动态库的机器上,禁止链接动态库而采用静态方式链接
    
   
    
     -shared 制作动态库
    
   
    
     -Xlinker option 将参数传给连接器。gcc无法识别,故需选项参数分别制定
     
      -Xlinker option
      
       -Xlinker arg1
       
        -Xlinker arg2
       
      
     
    
   
    
     
      
       
        -Wl,option 把选项传给连接器  多个参数间用逗号隔开
       
      
     
    
   
    
     -u symbol  使链接器认为取消了symbol符号的定义,从而链接器库模块以取得定义
    
   
    
     -Idir 制定头文件搜索路径   -Idir1  -I-  -Idir2    dir1只能搜索 #include“file”   dir2可以搜索任意#include
    
   
    
     -L  指定库文件搜索路径
    
   
    
     -Bprefix  指定gcc所调用用具的前缀 ,未找到时,可使用GCC_EXEC_PREFIX环境变量
    
   
    
     ld,arm-linux
    
   
    
     -Ttext  startaddr  指定代码段起始地址
    
   
    
     -Tdata dataaddr  指定数据段起始地址
    
   
    
     -T bss  bssaddr   指定bss段起始地址
    
   
    
     
    
   
    
     -m32 64位机器上产生32位代码
     
    
   
    
     
    
   
    
     $@  目标
    
   
    
     $<   第一个依赖
    
   
    
     $^    所有依赖
    
   
    
     
    
   
    
     -T指定链接脚本
    
   
    
     链接脚本完整格式
    
   
    
    
   
   
    
     SECTIONS {
     
     
     …
     
     secname start ALIGN(align) (NOLOAD) : AT(ldadr)
     
     { contents } >region :phdr =fill
     
     …
     
    
   
    
     
      }
     
    
   
    
     
      
       secname 段名
      
      
     
    
   
    
     start 重定位地址  对于位置相关代码,重定位地址必须为代码内实际地址
    
   
    
     
      ALIGN(align) 起始地址对齐
     
     
    
   
    
     
      
       (NOLOAD)运行时不需要加载
      
      
     
    
   
    
     
      
       
        AT(ldadr)
       
       指定此段位于映像文件中的地址,不指定时默认为运行地址
       
      
     
    
   
    
     
      
       
        { contents }  确定obj文件中哪些内容存入本段
       
       
      
     
    
   
    
     
      
       
        
       
      
     
    
   
    
     
      
       
        
         arm-linux-objcopy 被用来拷贝一个目标文件的内容到另一个文件中, 可以使用不同于源文件的格式来输出目的文件,即可以进行格式转换
        
       
      
     
    
   
input-file outfile指定输入输出文件名
-I 指定输入格式
-O 指定输出格式
-F 指定输入=输出格式
-R sectionname 删掉sectionname段
-S 删除重定位信息和符号信息
-g 删除调试符号
   
    
     
      
       
        arm-linux-objdump
       
       
      
     
    
   
    
     
      
       
        
         -b   指定目标码格式
        
       
      
     
    
   
    
     
      
       
        
         -d  反汇编可执行段
        
       
      
     
    
   
    
     
      
       
        
         -D 反汇编所有段
        
       
      
     
    
   
    
     
      
       
        
         -EB  指定大端字节序  -EL指定小段字节序
        
       
      
     
    
   
    
     
      
       
        
         -f  显示文件的整体头部摘要信息
        
       
      
     
    
   
    
     
      
       
        
         -h  显示目标文件各个段的头部摘要信息
        
       
      
     
    
   
    
     
      
       
        
         -i   显示支持的目标文件格式和cpu架构
        
       
      
     
    
   
    
     
      
       
        
         -j name  仅显示指定section的信息
        
       
      
     
    
   
    
     
      
       
        
         -m machine  当待反汇编文件未指定架构信息时 手动指定
        
       
      
     
    
   
    
     eg1  arm-linux-objdump -D  elf_file > dis_file
    
   
    
     eg2  arm-linux-objdump -D -b binary -m arm bin_file > dis_file
    
   
    
    
   
arm-linux-objcopy
#define fastcall __attribute__((regparm(3)))
用于修饰函数 表示从寄存器获取参数
     
      #define asmlinkage __attribute__((regparm(0)))
      
      
      用于修饰函数 表示从堆栈获取参数
     
    
     
      #define __weak __attribute__((weak))
      
      
      用于修饰函数弱符号类型
      
      
      遇强则强 无强弱顶
     
    
 
