Lesson01-利用Makefile创建内核镜像文件kernel8.img

cnblogs 2024-09-14 08:15:00 阅读 55

编写树莓派内核映像的过程可以等同于gcc的编译过程:预处理、编译、汇编、链接,后面还会加一步:将可执行文件转换成二进制的镜像文件。

在MakeFile里的构建过程分为3步:

1.将.c文件经过预处理、编译、汇编生成.o文件,将.S文件经过汇编生成.o文件。

2.将.o文件经过链接生成.elf可执行文件。

3.将.elf文件转换成二进制的.img镜像文件。

<code>#变量-交叉编译工具

ARMGNU ?= aarch64-linux-gnu

#变量-编译可选参数

COPS = -Wall -nostdlib -nostartfiles -ffreestanding -Iinclude -mgeneral-regs-only

#变量-汇编可选参数

ASMOPS = -Iinclude

#变量-源文件目录

SRC_DIR = src

#变量-生成文件目录

BUILD_DIR = build

#构建-all首个构建对象

all: kernel8.img

#构建-clean

clean:

rm -rf $(BUILD_DIR) *.img

#构建-.c变.o

$(BUILD_DIR)/*_c.o: $(SRC_DIR)/*.c

mkdir -p $(@D)

$(ARMGNU)-gcc $(COPS) -MMD -c -o $@ $<

#构建-.S变.o

$(BUILD_DIR)/*_S.o: $(SRC_DIR)/*.S

$(ARMGNU)-gcc $(ASMOPS) -MMD -c -o $@ $<

#变量-.c文件

C_FILES = $(wildcard $(SRC_DIR)/*.c)

#变量-.S文件

ASM_FILES = $(wildcard $(SRC_DIR)/*.S)

#变量-.o文件

OBJ_FILES = $(C_FILES:$(SRC_DIR)/%.c=$(BUILD_DIR)/%_c.o)

OBJ_FILES += $(ASM_FILES:$(SRC_DIR)/%.S=$(BUILD_DIR)/%_S.o)

#变量-.d文件

DEP_FILES = $(OBJ_FILES:%.o=%.d)

#函数-包含依赖.d文件

-include $(DEP_FILES)

#构建-.o变.elf .elf变.img

kernel8.img: $(SRC_DIR)/linker.ld $(OBJ_FILES)

$(ARMGNU)-ld -T $(SRC_DIR)/linker.ld -o $(BUILD_DIR)/kernel8.elf $(OBJ_FILES)

$(ARMGNU)-objcopy $(BUILD_DIR)/kernel8.elf -O binary kernel.img



声明

本文内容仅代表作者观点,或转载于其他网站,本站不以此文作为商业用途
如有涉及侵权,请联系本站进行删除
转载本站原创文章,请注明来源及作者。