Buildroot ARM Toolchain for arm7tdmi 编译 SourceForge Archopen

Buildroot ARM Toolchain for arm7tdmi to compile SourceForge Archopen

我有兴趣编译 sourceforge 项目 https://svn.code.sf.net/p/archopen/code/ArchOpen/trunk/,更具体地说是应用程序 AOnes,它是 Archos Gmini 400 的 NES 模拟器(不活跃的旧项目)

分析源码,发现Gmini400是arm7tdmi设备,没有MMU,编译用的工具链是buildroot的arm-linux-nofpu。 我认为(根据 buildroot-2009-02 菜单配置)no-fpu 表示软浮点,所以我尝试构建这样的工具链。

我使用 buildroot-2013-02 构建了一个工具链(2009 年和 2010 年都不适合我),选项如下:

我让其他选项保持原样并进行构建。

我检查了 ArchOpen,启动配置脚本以选择 Gmini4XX 作为目标(而不是 Gmini 402 chich 是完全不同的),选择 defaut.rules 并将结果 Makefile.conf 编辑为调整工具路径和名称(因为我生成的工具链名称不同)

第一个错误:

[thread.o]
{standard input}: Assembler messages:
{standard input}:1236: Error: Rn must not overlap other operand -- swpb r0,r3,[r0] 

好吧,这段代码应该可以工作,但我打开了 thread.h 并更正了源代码以通过(添加“&”)

第二个错误:

undefined reference to __aeabi_idivmod and undefined reference to __aeabi_ldivmod

如google所说,好像是-lgcc缺失的问题。 我编辑了 wav 文件夹 makefile 以添加 -lgcc 并指定 -L/lib_folder_of_my_toolchain_containing_libgcc.a

第三个错误:

in gcc/config/arm/lib1funcs.asm : multiple definition of __divsi3
in gcc/config/arm/lib1funcs.asm : undefined reference to raise
in libgcc.a (some .o inside) : undefined reference to __aeabi_unwind_cpp_pr0

我不知道如何解决这个...

有人有想法吗?有谁能帮助我获得与此 archopen 代码兼容的可用 arm7 工具链吗?

谢谢!

嗯,在这种特殊情况下,回到 2005 年是一个很好的解决方案...

对于 ubuntu 5.04,buildroot 已使用默认通用 ARM(小端)配置构建,但以下选项除外:

  • 海湾合作委员会 3.3.5
  • 不使用每日 uClibc 快照
  • 处理器没有MMU
  • 不支持大文件
  • 默认使用softfloat
  • 没有安装 busybox(因为我只想要工具链)
  • 不创建 Ext2 文件系统(与上述原因相同)

编译最后一个 GCC 阶段后构建失败。此时,在 PATH 环境中添加 buildroot/build_arm_nofpu/staging_dir/bin。变量,下载 libfloat 源代码 (libfloat-990616.orig.tar.bz2) tarball,编辑 Makefile 更改 gcc、ld 和 as repectively by arm-linux-uclibc-gcc, arm-linux- uclibc-ld 和 arm-linux-uclibc-as 并构建 libfloat(make clean & make)。将 libfloat.a 复制到 buildroot/build_arm_nofpu/staging_dir/lib 和 运行 buildroot 再次生成(无需清理)。构建应该成功结束。使用此工具链,mediOS 将在没有任何警告的情况下进行编译。