钦遭聘 发表于 2025-6-8 13:15:05

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

编写树莓派内核映像的过程可以等同于gcc的编译过程:预处理、编译、汇编、链接,后面还会加一步:将可执行文件转换成二进制的镜像文件。
在MakeFile里的构建过程分为3步:
1.将.c文件经过预处理、编译、汇编生成.o文件,将.S文件经过汇编生成.o文件。
2.将.o文件经过链接生成.elf可执行文件。
3.将.elf文件转换成二进制的.img镜像文件。
#变量-交叉编译工具
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
来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

高清宁 发表于 2025-12-18 15:15:59

这个有用。

睁扼妤 发表于 2025-12-20 15:05:18

感谢分享,学习下。

劳暄美 发表于 2026-1-9 01:28:08

东西不错很实用谢谢分享

丰江 发表于 2026-1-16 08:46:34

懂技术并乐意极积无私分享的人越来越少。珍惜

副我 发表于 2026-1-17 06:31:25

收藏一下   不知道什么时候能用到

吉娅寿 发表于 2026-1-19 12:13:39

这个有用。

骆贵 发表于 2026-1-20 16:15:50

这个有用。

事确 发表于 2026-1-21 00:28:27

热心回复!

滕佩杉 发表于 2026-1-21 16:43:07

过来提前占个楼

幌斛者 发表于 2026-1-28 04:34:31

感谢,下载保存了

讥慰捷 发表于 2026-1-30 03:27:02

感谢分享

挫莉虻 发表于 2026-1-31 01:00:51

东西不错很实用谢谢分享

驼娑 发表于 2026-2-2 04:32:47

很好很强大我过来先占个楼 待编辑

骂治并 发表于 2026-2-3 11:03:25

很好很强大我过来先占个楼 待编辑

甄婉丽 发表于 2026-2-5 04:14:57

感谢分享

扈梅风 发表于 2026-2-8 02:42:01

热心回复!

港髁 发表于 2026-2-9 09:53:47

前排留名,哈哈哈

煅圆吧 发表于 2026-2-9 22:21:25

喜欢鼓捣这些软件,现在用得少,谢谢分享!

琴丁辰 发表于 2026-2-10 05:21:46

yyds。多谢分享
页: [1] 2
查看完整版本: Lesson01-利用Makefile创建内核镜像文件kernel8.img