兼容不同硬件架构的编译方案探索

需求

  • 需求
想写一套裸机代码
	1.兼容不同的架构
	2.在固定的架构中,兼容不同的配置

已有方案探索

  • U-boot & linux
通过 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 // 有时候,一个配置对应一个defconfig
  • FreeRTOS
为每一个配置&架构 新建一个底层目录 // 例如FreeRTOS/Demo/RISC-V-Qemu-virt_GCC
在 该目录中 用Makefile 指定架构和配置(需要编译的文件)

特点
	1. 针对每一个配置&架构都得新建一个底层目录
	2. 编译前不需要配置
  • rt-thread
同 FreeRTOS // bsp/riscv32-virt

已有方案分析

不管怎么样,都需要指定编译链
不管怎么样,都需要指定编译哪些文件

我喜欢 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

你可能感兴趣的:(杂七杂八总览,架构兼容,方案)