我正在研究一些在ARM上运行的裸机嵌入式代码,因此必须处理整个ARM与THUMB模式的区别.当前构建系统使用静态模式规则来确定是以ARM还是THUMB模式编译文件.
$(ACOBJS) : %.o : %.c
@echo
$(CC) -c $(CFLAGS) $(AOPT) -I . $(IINCDIR) $< -o $@
$(TCOBJS) : %.o : %.c
@echo
$(CC) -c $(CFLAGS) $(TOPT) -I . $(IINCDIR) $< -o $@
Run Code Online (Sandbox Code Playgroud)
其中ACOBJS是应该处于ARM模式的输出对象列表,对于TCOBJS和Thumb模式是相同的.这些列表是以通常的方式从源列表创建的
ACOBJS = $(ACSRC:.c=.o)
TCOBJS = $(TCSRC:.c=.o)
Run Code Online (Sandbox Code Playgroud)
目前,这导致构建中的目标文件散布在源树上,我并不特别希望这样.我一直试图在树构建中设置它,但却无法使其工作.我不一定需要充分利用树构建工作,但我希望至少能够使用输出目录,在该目录下所有中间文件最终都会运行.在这些限制条件下实现这一目标的最佳策略是什么?
我正在考虑的一个选项是使用automake或整个autotools工具链来构建一个makefile.这似乎支持创建我想要的makefile类型,但看起来有点矫枉过正.设计用于便携式构建的自动工具和裸机嵌入式系统之间似乎存在固有的阻抗不匹配,其中主机元组之类的东西由目标微观元素决定.
我正在为一个类项目编写一些嵌入式代码,该项目当前(根据要求)创建了许多 srec 文件并合并它们。我希望能够将此代码加载到 QEMU 中,但它通常只对 ELF 文件满意。合并原始 ELF 文件而不是 srecs 的最有效方法是什么?同样可以接受的是,将 srec 转换回 ELF 并使生成的文件可加载的方法(objcopy 这样做似乎会产生相当损坏的文件(其他架构中没有架构)。这些工具必须能够使用 m68k 二进制文件,但是主机系统是普通的 x86。