需求
想写一套裸机代码
1.兼容不同的架构
2.在固定的架构中,兼容不同的配置
已有方案探索
通过 Kconfig .config 兼容 架构,同时兼容配置
配置原理
通过源码生成 scripts/basic/fixdep
通过源码生成 scripts/kconfig/conf
scripts/kconfig/conf --defconfig=configs/xxx_defconfig Kconfig
解析两种文件
解析 Kconfig & 其 source 的 arch/Kconfig 及更下一层的 Kconfig
解析 xxx_defconfig
生成.config
编译原理
根据 .config 生成两种文件
1. include/config/auto.conf 用于 Makefile 中决定哪些源文件被编译
2. include/generated/autoconf.h 用于在代码总引用这些宏
特点
1. 每层都有 Kconfig
2. 编译前需要先配置
3. 针对每一个架构,最少对应添加一个defconfig
为每一个配置&架构 新建一个底层目录
在 该目录中 用Makefile 指定架构和配置(需要编译的文件)
特点
1. 针对每一个配置&架构都得新建一个底层目录
2. 编译前不需要配置
同 FreeRTOS
已有方案分析
不管怎么样,都需要指定编译链
不管怎么样,都需要指定编译哪些文件
我喜欢 U-boot/linux 的处理方法
但是对于我的代码来说这种处理方式太重了.
我的配置很少,我不需要 复杂 的配置方法
大体方案设计
我只需要通过 make 命令编译的时候传参即可
通过这些参数的解析,生成两种文件
1. include/config/auto.conf 用于 Makefile 中决定哪些源文件被编译
2. include/generated/autoconf.h 用于在代码总引用这些宏
详细方案设计
1. Makefile 传参
make ARCH=arm32 CROSS_COMPILE=arm-linux-none- kernel.elf
make ARCH=arm64
make ARCH=rv32
make ARCH=rv64