我有一个基于ucLinux内核2.6.33的没有MMU的cortex-M3的buildroot系统。支持在内核中启用FLAT,ZFLAT,SHARED_FLAT。 在内部buildroot一切都设置为M3等。 我有工作系统与工作内核和busybox(在用户空间只有二进制)。系统或任何其他库上没有uClibc。 我正在尝试构建这样的最简单的用户空间应用程序:main(){}
我试过不同的旗帜。最新组合是这样的:
^ [[7米>>> 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?它应该编译成每个二进制可执行文件还是应该以某种方式将它放在系统上?
答案 0 :(得分:0)
我已将我的应用与错误的库相关联。我不得不从工具链中的thumb2文件夹(对于M3)预先构建一个:
LIBS="-L$(TOPDIR)/../tools/arm-2010q1/arm-uclinuxeabi/libc/thumb2/usr/lib"
修复它有帮助。因为我有libc.a和libm.a作为静态档案 - 只需修复LIBS即可。并且不需要像-lm这样的标志。在buildroot编译期间,它需要部分静态库并创建一个可用的FLAT二进制文件。