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

需求
  • 需求
想写一套裸机代码
	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
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值