自己写bootloader笔记7---Makefile分析
来源:互联网 发布:阿里云重装系统在哪里 编辑:程序博客网 时间:2024/06/05 10:44
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
所有.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
- 自己写bootloader笔记7---Makefile分析
- 自己写bootloader笔记7---Makefile分析
- 自己写bootloader笔记1---流程分析
- 自己写bootloader笔记1---流程分析
- 自己写bootloader笔记2---start.S分析
- 自己写bootloader笔记3---init.c分析
- 自己写bootloader笔记4---uboot.lds分析
- 自己写bootloader笔记2---start.S分析
- 自己写bootloader笔记4---uboot.lds分析
- 自己写bootloader笔记3---init.c分析
- 自己写bootloader笔记5---设置u-boot传给内核的参数分析
- 自己写bootloader笔记8---反汇编文件boot.dis分析
- 自己写bootloader笔记9---读取内核内容分析看能否读取nand flash的内核
- 自己写bootloader笔记5---设置u-boot传给内核的参数分析
- 自己写 bootloader
- 自己写bootloader
- 自己写BootLoader
- 自己写 bootloader
- 通过git shell 向github上传文献
- VieWPager无限轮播
- 如何解决failed to push some refs to git
- 1023 组个最小数
- linux中bin和sbin目录的主要区别
- 自己写bootloader笔记7---Makefile分析
- uvalive 6600 - Spanning trees in a secure lock pattern
- js 继承 实例图示详解
- 获取malloc 的lengh
- 理解android虚拟机架构
- 二维码的使用
- Android中的适配器模式
- js实现点击哪个li哪个li背景为红色
- 多线程死锁的产生以及如何避免死锁