【问题标题】:Compiling and Building a Slim version of avconv/ffmpeg for STM32F4-Discovery - an armv7 thumb 1/2 architecture为 STM32F4-Discovery 编译和构建 avconv/ffmpeg 的 Slim 版本 - armv7 thumb 1/2 架构
【发布时间】:2013-08-20 23:21:31
【问题描述】:

这是我第一次尝试在 Stack Overflow 上发帖寻求帮助。

我的项目: 使用 STM32F4-Discovery 和 STM32F407VGT6 芯片以及 FPv4-SP 和相机/LCD 外围设置,我需要以 QVGA 录制视频并输出为压缩比至少为 25:1 的 MPEG-4 格式。

我已经确定了所需的编解码器库(avconv,除非 ffmpeg 证明更有用),现在我正在尝试构建编译器选项,以提供能够在芯片上执行的轻量级版本ANSI-C 和 Thumb 架构。

此板的空间非常有限(192KB SRAM 和 1MB 闪存 - 有扩展的可能性,但最好只使用我所拥有的),目前任一库的“主要”可执行文件都超过 1MB。

从我尝试过的不同解决方案的输出来看 - 似乎很多编译器选项都没有成功应用于构建。所以我的问题是:

1) 是否可以仅使用 rawvideo 解码器、mpeg4 编码器和最基本的实用程序将任一库编译到所需的空间?如果没有,是否可以估计需要多少?

2) 我花了很多时间在互联网上搜索,但似乎没有人尝试过 - 有没有人可以告诉我其他情况?

我手头有我的配置/构建脚本,任何想看看我是否遗漏了一些基本内容的人。只要问,我会通过电子邮件发送给它,我不想让线程变得比我看似冗长的调查已经拥有的更多。

我认为这两个库都不太可能损坏。我一直在 Ubuntu 12.04 32 位上尝试这个。

我是一名软件实习生,非常感谢任何可用的帮助。

最后一个问题,如果我的解决方案不可行,是否有另一个开源 mpeg4 压缩库可以轻松编译用于嵌入式 ARMv7E-M/Thumb 集架构?

编辑: 这是之前未包含的构建命令。

#!/bin/bash

NDK=~/Desktop/android-ndk-r9
PLATFORM=~/Desktop/gcc-arm-none-eabi-4_7-2013q2
PREBUILT=~/Desktop/gcc-arm-none-eabi-4_7-2013q2/arm-none-eabi
function build_one
{
./configure --target-os=symbian \
    --prefix=$PREFIX \
    --disable-everything \
    --enable-cross-compile \
    --disable-shared \
    --enable-static \
    --enable-small \
  #  --disable-asm \
    --enable-thumb \
    --extra-libs="-lgcc" \
    --arch=armv7e-m \
    --cc=$PREBUILT/bin/gcc \
    --cross-prefix=$PREBUILT/bin \
    --nm=$PREBUILT/bin/nm \
    --sysroot=$PLATFORM \
    --extra-cflags=" -O3 -fpic -DANDROID -DHAVE_SYS_UIO_H=1 -Dipv6mr_interface=ipv6mr_ifindex -fasm -Wno-psabi -fno-short-enums -fno-strict-aliasing -mthumb-interwork -finline-limit=300 $OPTIMIZE_CFLAGS -I/usr/local/include" \
--extra-ldflags="-Wl,-rpath-link=$PLATFORM/arm-none-eabi/lib/armv7e-m -L $PLATFORM/arm-none-eabi/lib/armv7e-m -nostdlib -lc -lm -ldl -llog -L/usr/local/lib " \
--enable-gpl \
   # --enable-libx264 \
    --enable-demuxer=mov \
    --enable-demuxer=h264 \
    --disable-ffplay \
    --disable-ffserver \
    --disable-ffprobe \
    --enable-protocol=file \
    --enable-avformat \
    --enable-avcodec \
    --enable-decoder=rawvideo \
    --enable-decoder=mjpeg \
    --enable-decoder=h263 \
    --enable-decoder=mpeg4 \
    --enable-decoder=h264 \
    --enable-encoder=mjpeg \
    --enable-encoder=h263 \
    --enable-encoder=mpeg4 \
    --enable-encoder=h264 \
    --enable-parser=h264 \
    --disable-network \
    --enable-zlib \
    --disable-avfilter \
    --disable-avdevice \
    $ADDITIONAL_CONFIGURE_FLAG

make clean
make -j4 install
$PREBUILT/bin/ar d libavcodec/libavcodec.a inverse.o
$PREBUILT/bin/ld -rpath-link=$PLATFORM/arm-none-eabi/lib/armv7e-m -L$PLATFORM/arm-none-eabi/lib/armv7e-m  -soname libffmpeg.so -shared -Bshareable -nostdlib -Bdynamic --no-undefined -o $PREFIX/libffmpeg.so libavcodec/libavcodec.a libavformat/libavformat.a libavutil/libavutil.a libswscale/libswscale.a -lc -lm -lz -ldl -llog --dynamic-linker=/system/bin/linker $PREBUILT../lib/gcc/arm-none-eabi/4.7.4/armv7e-m/libgcc.a
}

CPU=armv7e-m
OPTIMIZE_CFLAGS="-mfloat-abi=hard -mfpu=vfpv4 -march=$CPU "
PREFIX=./android/$CPU
ADDITIONAL_CONFIGURE_FLAG=
build_one

这是我获得并修改的脚本。它最初为 ARMv7-a 构建成功,它不会在 ARMv7e-m 芯片(发现板)上执行。

【问题讨论】:

    标签: build armv7 thumb avconv stm32f4discovery


    【解决方案1】:

    先问几个问题:

    您使用什么编译器选项?让它们正确以启用正确的库和浮点支持非常重要。你能发布你的构建命令吗? 您是否将编译和链接阶段分开?

    您使用的是 newlib 还是 newlib-nano?您可以使用 newlib-nano 节省空间。

    您是在运行裸机还是使用 RTOS?

    【讨论】:

    • 首先,感谢您的回复。我会将我的构建命令添加到我原始帖子的编辑中,以避免此评论混乱。我现在相信我的问题在于建筑。当我编译并尝试链接来自 IAR Workstation 的共享库时,我收到一个错误“此代码是为 ARMv7-a 编译的.. ..无法在 ARMv7e-m 上运行..”在尝试使用其他工具链进行暴力破解后,我相信问题在于源无法为我的目标平台构建。我也是一个嵌入式菜鸟,我想我正在使用 RTOS。看了之后觉得没用过newlib。
    • 你用的是什么工具链?您需要使用可以为 arm cortex m4 构建的交叉编译器。
    • 如果您收到的构建脚本是针对 ARMv7-a 的,那么这些共享库很可能是针对 ARMv7-a 编译的。您需要重建库和编译器以支持 ARMv7e-m
    • 是的,最初构建脚本是为 ARMv7-a 配置的,但是,我获得了一个工具链 (gcc-arm-none-eabi-4_7-2013q2),它被记录为能够为 ARMv7e 编译-米。我将脚本配置为我理解为 FPU 选项、Thumb 选项以及特定体系结构的正确选项集 - 但是,我的 IDE 仍然向我报告该构建是针对 ARMv7-a 的。
    • 抱歉让您久等了。您是否下载了预构建的编译器二进制文件?您需要为 ARMv7-a 重新构建库,如果您只下载预构建的编译器二进制文件,您将没有这些。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-06-03
    • 2018-08-02
    • 1970-01-01
    • 1970-01-01
    • 2014-05-12
    • 2012-04-05
    • 1970-01-01
    相关资源
    最近更新 更多