Build 为STM32F4发现编译和构建精简版avconv/ffmpeg-一种armv7 thumb 1/2体系结构

Build 为STM32F4发现编译和构建精简版avconv/ffmpeg-一种armv7 thumb 1/2体系结构,build,armv7,thumb,avconv,stm32f4discovery,Build,Armv7,Thumb,Avconv,Stm32f4discovery,这是我第一次尝试发布有关堆栈溢出的帮助 我的项目: 使用带有FPv4 SP的STM32F407VGT6芯片的STM32F4 Discovery和摄像头/LCD外围设备设置,我需要在QVGA上录制视频,并以至少25:1的比率输出到压缩的MPEG-4格式 我已经确定了所需的编解码器库(avconv,除非ffmpeg证明更有用),并且我现在正在尝试构建编译器选项,以便为我提供一个能够在ANSI-C和Thumb体系结构的芯片上执行的轻量级版本 该电路板的空间非常有限(192KB SRAM和1MB闪存-有

这是我第一次尝试发布有关堆栈溢出的帮助

我的项目: 使用带有FPv4 SP的STM32F407VGT6芯片的STM32F4 Discovery和摄像头/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 set体系结构编译

编辑: 这是以前未包含的build命令

#!/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芯片(发现板)上执行。

首先得到一些问题:

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

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


您运行的是裸机还是RTOS

首先,我感谢你的回应。我将把我的构建命令添加到我的原始帖子的编辑中,以避免此评论的混乱。我现在相信我的问题在于架构。当我编译并尝试从IAR工作站链接共享库时,我遇到了一个错误“此代码是为ARMv7-a编译的……无法在ARMv7e-m上运行……”在尝试使用其他工具链进行暴力后,我相信问题在于源代码无法为我的目标平台构建。我也是一个嵌入式noob,我想我使用的是RTOS。看了之后,我想我没有用过newlib。你用的是什么工具链?您需要使用能够为arm cortex m4编译的交叉编译器。如果您收到的编译脚本是为ARMv7-a编译的,那么这些共享库很可能是为ARMv7-a编译的。您需要重建库和编译器以支持ARMv7e mYea,最初构建脚本是为ARMv7-a配置的,但是,我获得了一个工具链(gcc-arm-none-eabi-4_7-2013q2),该工具链被记录为能够为ARMv7e-m编译。我为我理解的FPU选项、Thumb选项以及特定架构的正确选项集配置了脚本-但是,我的IDE仍然向我报告该构建是针对ARMv7-a的。抱歉,等待太久了。你下载了预编译的二进制文件吗?您需要为ARMv7-a重新构建库,如果您只下载了预构建的编译器二进制文件,那么就不会有这些文件。