移植ffmpeg到jz2440(在開發板運行出現Illegal instruction,已解決,問題總結)

一,先編譯x264,參考文章移植X264到JZ2440開發板

二,配置

./configure --prefix=/home/book/ffmpeg/ffmpeg-arm --arch=armel  --target-os=linux --cross-prefix=arm-none-linux-gnueabi- --enable-gpl --enable-nonfree  --extra-cflags=-I/home/book/ffmpeg/x264-arm/include --extra-ldflags=-L/home/book/ffmpeg/x264-arm/lib --enable-libx264  --enable-filter=delogo --enable-debug --disable-optimizations --enable-shared --enable-pthreads

三,

1.make

2.make install

四,然後把生成的lib目錄下的so文件和bin下的可執行程序拷貝到製作文件系統fs_mini_mdev_new下相對應的lib和bin目錄,然後製作成文件系統燒入板子裏。這裏我在板子運行出現Illegal instruction,暫未解決。

五,問題補充:

在執行make install之後,會在/home/book/ffmpeg/ffmpeg-arm/lib中有多個so文件,例如libavcodec-58.so,libavcodec.so.58.77.101,libavdevice-58.so。如果不想要這麼多相類似的so文件,那麼修改ffmpeg目錄下的configure,

將該文件中的如下四行:(輸入/SLIBNAME快速搜索定位)

SLIBNAME_WITH_MAJOR='$(SLIBNAME).$(LIBMAJOR)'
LIB_INSTALL_EXTRA_CMD='$$(RANLIB)"$(LIBDIR)/$(LIBNAME)"'
SLIB_INSTALL_NAME='$(SLIBNAME_WITH_VERSION)'
SLIB_INSTALL_LINKS='$(SLIBNAME_WITH_MAJOR)$(SLIBNAME)'

修改成如下:

SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)'
LIB_INSTALL_EXTRA_CMD='$$(RANLIB)"$(LIBDIR)/$(LIBNAME)"'
SLIB_INSTALL_NAME='$(SLIBNAME_WITH_MAJOR)'
SLIB_INSTALL_LINKS='$(SLIBNAME)'

然後再make,make install

 

——————————————————————————————————————————————————————————————————————

關於在開發板中執行./ffmpeg時出現Illegal instruction問題處理fang方法總結:

1.通過arm-linux-readelf -A  ffmpeg ,查看ffmpeg是否支持VFP,如果支持的話是否支持VFPv3(因爲有的支持VFPv2),這時候就要同時配置linux內核支持VFPv3(注意有的內核不支持VFPv3),這裏參考文章https://blog.csdn.net/chyxwzn/article/details/8879750來處理。不過沒有解決我的出現Illegal instruction問題。這裏記錄,也許以後其他情況能解決。

 

2.在ffmpeg源碼配置如下:

./configure --prefix=/home/book/ffmpeg/ffmpeg-arm --disable-asm --disable-static --arch=armel  --target-os=linux --cross-prefix=arm-none-linux-gnueabi- --enable-gpl --enable-nonfree  --extra-cflags=-I/home/book/ffmpeg/x264-arm/include --extra-ldflags=-L/home/book/ffmpeg/x264-arm/lib --enable-libx264  --enable-filter=delogo --enable-debug --disable-optimizations --enable-shared --enable-pthreads

然後打開ffbuild/config.mak,把-O3和-O2的配置選項都去掉,並且查看你的交叉編譯工具鏈中編譯器路徑(這裏以我的爲例)/work/tools/gcc-3.4.5-glibc-2.3.6/arm-none-linux-gnueabi/libc裏是否存在armv*的目錄,這裏我的是armv4t,所以就要把這個armv4t替換下ffbuild/config.mak裏的-march=armv4t(我這裏是armv5t),如圖:

原來是-march=armv5t,然後我改成-march=armv4t(這個參數要和你的編譯器裏的一樣),然後make,make install,然後在板子裏成功解決Illegal instruction。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章