0

我有一个基于 ucLinux 内核 2.6.33 的不带 MMU 的 cortex-M3 的 buildroot 系统。内核中启用了对 FLAT、ZFLAT、SHARED_FLAT 的支持。在 buildroot 内部,所有内容都设置为 M3 等。我有一个带有工作内核和 busybox 的工作系统(在用户空间中只能是二进制文件)。系统或任何其他库上没有 uClibc。我正在尝试像这样构建最简单的用户空间应用程序:main(){}

我尝试了不同的标志。最新的组合是这样的:

^[[7m>>> zpm_t 1.0 构建^[[27m /usr/bin/make -j5 FLAGS="-c -mthumb -march=armv7 -mfix-cortex-m3-ldrd" EXTRA_LDFLAGS="-Wl,-elf2flt ,--static" CC="/mnt/repos/repos/github/nocturn_buildroot/output/host/usr/bin/ccache /mnt/repos/repos/github/nocturn_buildroot/output/host/usr/bin/arm-uclinuxeabi -gcc" LD="/mnt/repos/repos/github/nocturn_buildroot/output/host/usr/bin/arm-uclinuxeabi-ld" HEADERS="-I/mnt/repos/repos/github/nocturn_buildroot/output/target /usr/include/SDL" LIBS="-L/mnt/repos/repos/github/nocturn_buildroot/../nocturn_tools/arm-2010q1/arm-uclinuxeabi/libc/usr/lib" -C /mnt/repos/repos /github/nocturn_buildroot/output/build/zpm_t-1.0 all make[1]:进入目录/mnt/repos/repos/github/nocturn_buildroot/output/build/zpm_t-1.0' /mnt/repos/repos/github/nocturn_buildroot/output/host/usr/bin/ccache /mnt/repos/repos/github/nocturn_buildroot/output/host/usr/bin/arm-uclinuxeabi-gcc -c -mthumb -march=armv7 -mfix-cortex-m3-ldrd -I/mnt/repos/repos/github/nocturn_buildroot/output/target/usr/include/SDL t.c /mnt/repos/repos/github/nocturn_buildroot/output/host/usr/bin/ccache /mnt/repos/repos/github/nocturn_buildroot/output/host/usr/bin/arm-uclinuxeabi-gcc -Wl,-elf2flt,--static t.o -L/mnt/repos/repos/github/nocturn_buildroot/../nocturn_tools/arm-2010q1/arm-uclinuxeabi/libc/usr/lib -o t make[1]: Leaving directory/mnt/repos/repos/github/nocturn_buildroot/output/build/zpm_t-1.0'

平面文件似乎没问题:

$ arm-uclinuxeabi-flthdr output/target/opt/t
output/target/opt/t
    Magic:        bFLT
    Rev:          4
    Build Date:   Wed Sep 24 00:28:31 2014
    Entry:        0x45
    Data Start:   0x1f00
    Data End:     0x1f70
    BSS End:      0x1fa0
    Stack Size:   0x1000
    Reloc Start:  0x1f70
    Reloc Count:  0x29
    Flags:        0x1 ( Load-to-Ram )

但是在系统上我总是有一个不那么有用的段错误:

/opt # ./t
[   23.200000] 
[   23.200000] 
[   23.200000] t: fault at 0xa0501dd4 [pc=0xa0501dd4, sp=0xa0503f28]
[   23.200000] Invalid ISA state
[   23.200000] 
SEGV

我错过了什么?这应该是非常简单的事情。另外 - 如何处理 uClibc?它应该被编译成每个二进制可执行文件还是我应该以某种方式将它放在系统上?

4

1 回答 1

0

我已将我的应用程序与错误的库相关联。我不得不从工具链内的 thumb2 文件夹中获取预建的一个(用于 M3):

LIBS="-L$(TOPDIR)/../tools/arm-2010q1/arm-uclinuxeabi/libc/thumb2/usr/lib"

只是修复它会有所帮助。因为我有 libc.a 和 libm.a 作为静态档案 - 只需修复 LIBS 就足够了。并且不需要像 -lm 这样的标志。在 buildroot 编译期间,它需要静态库的一部分并创建一个工作的 FLAT 二进制文件。

于 2014-09-24T23:00:19.740 回答