自己写bootloader笔记7---Makefile分析

来源:互联网 发布:圣剑网络 奥特曼 编辑:程序博客网 时间:2024/05/22 12:07
arm-linux-gcc是交叉编译工具链,用于 编译出能在ARM平台上运行的程序,而gcc编译出来的程序在x86平台上运行 

CC      = arm-linux-gcc

用于将多个目标文件、库文件链接成可执行文件

LD      = arm-linux-ld

AR      = arm-linux-ar

复制一个目标文件的内容到另一个文件

OBJCOPY = arm-linux-objcopy

显示 二进制文件信息,也可用于查看反汇编代码

OBJDUMP = arm-linux-objdump

-Wall 表示打开所有需要注意的警告信息, -O2是优化选项,CFLAGS用于 C 预编译处理

CFLAGS := -Wall -O2


这里built-in表示编译器里面有自带的strcpy函数,而用户定义的strcpy函数跟其不一样,编译时加上-nostdlib  -fno-builtin或者-nostdlib  -fno-builtin-strcpy(指定某个函数),表示用用户定义的strcpy函数,而非编译器自带的strcpy函数


-nostdinc  不在标准系统目录中搜索头文件,只在-I指定的目录中搜索

-nostdinc++ 不在C++标准系统目录中搜索头文件,但在其他标准目录仍然搜索


CPPFLAGS   := -nostdinc -nostdlib -fno-builtin

目标文件来源于 start.o init.o boot.o
objs := start.o init.o boot.o
$@--目标文件,$^--所有的依赖文件,$<--第一个依赖文件。

boot.bin: $(objs)

          arm-linux-ld  -Tboot.lds -o boot.elf $^

-Tboot.lds中-T是指定链接脚本为boot.lds,-o指定链接成的可执行文件是boot.elf, $^表示start.o init.o boot.o

${LD} -Tboot.lds -o boot.elf $^

arm-linux-objcopy  -O binary -S boot.elf $@
-O binary表示指定输出二进制文件,-S表示不从源文件中复制重定位信息和符号信息到目标文件中去。boot.elf 是elf格式的可执行文件, $@是目标文件,代表boot.bin

${OBJCOPY} -O binary -S boot.elf $@

arm-linux-objdump -D -m arm boot.elf > boot.dis,这里-D表示反汇编所有段,-m arm指定CPU架构为arm,将elf格式的文件 boot.elf转换为反汇编文件boot.dis

${OBJDUMP} -D -m arm boot.elf > boot.dis
所有.o文件有同名的.c文件时执行下面的命令语句

%.o:%.c

${CC} $(CPPFLAGS) $(CFLAGS) -c -o $@ $<

所有.o文件有同名的.S文件时执行下面的命令语句

%.o:%.S
${CC} $(CPPFLAGS) $(CFLAGS) -c -o $@ $<

在执行make clean命令时会调用到

clean:
rm -f *.o *.bin *.elf *.dis
0 0
原创粉丝点击