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 年都不适合我),选项如下:
- arm7tdmi
- 没有 MMU
- 软件浮点
- 启用elf2flt支持(我在
ArchOpen 的 Makefile)
我让其他选项保持原样并进行构建。
我检查了 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 将在没有任何警告的情况下进行编译。
我有兴趣编译 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 年都不适合我),选项如下:
- arm7tdmi
- 没有 MMU
- 软件浮点
- 启用elf2flt支持(我在 ArchOpen 的 Makefile)
我让其他选项保持原样并进行构建。
我检查了 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 将在没有任何警告的情况下进行编译。