使用飛凌嵌入式IMX6UL-C1板子——qt+opencv環(huán)境搭建
準(zhǔn)備工作:
Ubuntu18.04虛擬機(jī)環(huán)境 飛凌官方提供的qt-tslib庫(kù),gcc交叉編譯器,opencv源碼庫(kù),qt源碼,具體如下:
安裝交叉編譯器
方便環(huán)境編譯,將交叉編譯器安裝到/usr/local/下新建一個(gè)文件目錄arm-imx6ul。
sudo mkdir /usr/local/arm-imx6ul
cd /usr/local/arm-imx6ul
sudo cp ~/feiling/gcc-4.6.2-glibc-2.13-linao-multilib-2011.12.tar.gz
.
sudo tar -xvf gcc-4.6.2-glibc-2.13-linao-multilib-2011.12.tar.gz
sudo vi /etc/environment
PATH = "/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/usr/local/arm-imx6ul/gcc-4.6.2-glibc-2.13-linaro-multilib-2011.12/fsl-linaro-toolchain/bin/:/opt/mips64el-buildroot-linux-gnu_sdk-buildroot/bin" source /etc/environment
安裝qt SDK
執(zhí)行以下命令
cd /files/
mkdir /usr/local/freescale
cp QT4.8.6-SDK.tar.bz2 /usr/local/freescale/
cd /usr/local/freescale/
tar jxvf QT4.8.6-SDK.tar.bz2
注意此步完成后/usr/local 下會(huì)有/freescale/QT4.8.6 文件夾,文件名必須與此保持一致,不能改動(dòng)
安裝tslib
cd /files/
cp tslib-sdk.tar.bz2 /usr/local/arm-imx6ul
cd /usr/local/arm-imx6ul
tar jxvf tslib-sdk.tar.bz2
安裝qt creator
由于我是之前已經(jīng)安裝過高版本的qt creator,所以不再需要安裝飛凌提供的qt creator。不過在這可以給出安裝步驟。 下載鏈接: http://download.qt.io/official_releases/qtcreator/ 執(zhí)行以下命令:
cd /files/
chmod 777 qt-creator-linux-x86-opensource-2.6.2.bin
./qt-creator-linux-x86-opensource-2.6.2.bin
cd /opt/qtcreator-2.6.2/bin/
./qtcreator
&
qt開發(fā)環(huán)境配置
qt version is not properly installed,錯(cuò)誤修復(fù)
該錯(cuò)誤發(fā)現(xiàn)是qmake的版本不匹配目前使用的機(jī)器或者Ubuntu18.04的版本太高了。 所以決定使用qt源代碼編譯一版飛凌下使用的qtSDK環(huán)境。
使用源碼編譯qt-SDK
下載qt源代碼。 qt源碼下載 進(jìn)入源碼下,執(zhí)行:
tar -xvf qt-everywhere-src-4.8.6.tar.gz
cd qt-everywhere-src-4.8.6/mkspecs
cp ~/feiling/linux-imx6ul-g++
. -rf
export CROSS_COMPILE = /usr/local/arm-imx6ul/gcc-4.6.2-glibc-2.13-linaro-multilib-2011.12/fsl-linaro-toolchain/bin/arm-fsl-linux-gnueabi-
include
( .. /
.. /common/linux.conf
)
include
( .. /
.. /common/gcc-base-unix.conf
)
include
( .. /
.. /common/g++-unix.conf
)
include
( .. /
.. /common/qws.conf
)
QMAKE_CC
= arm-fsl-linux-gnueabi-gcc -lts
QMAKE_CXX
= arm-fsl-linux-gnueabi-g++ -lts
QMAKE_LINK
= arm-fsl-linux-gnueabi-g++ -lts
QMAKE_LINK_SHLIB
= arm-fsl-linux-gnueabi-g++ -lts
QMAKE_LFLAGS
+= -W1,rpath
= /work/imx6/rootfs/usr/lib
QMAKE_AR
= arm-fsl-linux-gnueabi-ar cqs
QMAKE_OBJCOPY
= arm-fsl-linux-gnueabi-objcopy
QMAKE_STRIP
= arm-fsl-linux-gnueabi-strip
QMAKE_INCDIR
+= /usr/local/arm-imx6ul/tslib/include
QMAKE_LIBDIR
+= /usr/local/arm-imx6ul/tslib/lib
QMAKE_LIBS_OPENGL_ES1
+= -lGLESv1_CM -lEGL -lGAL
QMAKE_LIBS_OPENGL_ES1CL
+= -lGLES_CL -lEGL -lGAL
QMAKE_LIBS_EGL
+= -lEGL -lGAL
QMAKE_LIBS_OPENGL_ES2
+= -lGLESv2 -lEGL -lGAL
QMAKE_LIBS_OPENVG
+= -lOpenVG -lEGL -lGALIMX6_CFLAGS
= -march
= armv7-a -mfpu
= neon -DLINUX
= 1 -DEGL_API_FB
= 1
IMX6_CFLAGS_RELEASE
= -O2
$$ IMX6_CFLAGS
QMAKE_CFLAGS_RELEASE
+= $$ IMX6_CFLAGS_RELEASE
QMAKE_CXXFLAGS_RELEASE
+= $$ IMX6_CFLAGS_RELEASE
QMAKE_CFLAGS_DEBUG
+= $$ IMX6_CFLAGS
QMAKE_CXXFLAGS_DEBUG
+= $$ IMX6_CFLAGSload
( qt_config
)
后發(fā)現(xiàn)不能使用這個(gè)linux-imx6ul-g++的配置,需要使用qws/linux-arm-g++的配置進(jìn)行configure配置,而使用的configure的配置如下:
#!/bin/sh ./configure
\ -prefix /opt/QT4.8.6
\ -opensource
\ -confirm-license
\ -release -shared
\ -embedded arm
\ -xplatform qws/linux-arm-g++
\ -depths
16,18 ,24,32
\ -fast
\ -optimized-qmake
\ -little-endian -host-little-endian
\ -pch
\ -qt-sql-sqlite
\ -qt-libjpeg
\ -qt-zlib
\ -qt-libpng
\ -qt-libmng
\ -qt-libtiff
\ -qt-freetype
\ -webkit
\ -multimedia
\ -audio-backend
\ -phonon-backend
\ -no-openssl
\ -no-glib
\ -no-qt3support
\ -no-libtiff -no-libmng
\ -no-opengl
\ -no-mmx -no-sse -no-sse2
\ -no-3dnow
\ -no-qvfb
\ -phonon-backend
\ -no-nis
\ -no-opengl
\ -no-cups
\ -no-separate-debug-info
\ -nomake docs
\ -qt-mouse-tslib
\ -qt-mouse-linuxinput
\ -qt-kbd-linuxinput
\ -qt-gfx-transformed
\ -qt-gfx-linuxfb
\ -I/usr/local/arm-imx6ul/tslib/include
\ -L/usr/local/arm-imx6ul/tslib/lib
執(zhí)行后提示: 以上報(bào)錯(cuò)
You have not explicitly asked to use pkg-config and are cross-compiling.
pkg-config will not be used to automatically query cflag/lib parameters
for
dependencies
添加配置選項(xiàng) -force-pkg-config 測(cè)試之后還是報(bào)錯(cuò),判斷應(yīng)該是tslib庫(kù)不匹配的原因,考慮到后期不需要觸摸功能,所以去掉-qt-mouse-tslib配置選項(xiàng),重新配置編譯: 此時(shí)成功: 參考autoconfig.sh的內(nèi)容如下:
#!/bin/sh ./configure
\ -force-pkg-config
\ -prefix /opt/QT4.8.6
\ -opensource
\ -confirm-license
\ -release -shared
\ -embedded arm
\ -xplatform qws/linux-arm-g++
\ -depths
16,18 ,24,32
\ -fast
\ -optimized-qmake
\ -little-endian -host-little-endian
\ -pch
\ -qt-sql-sqlite
\ -qt-libjpeg
\ -qt-zlib
\ -qt-libpng
\ -qt-libmng
\ -qt-libtiff
\ -qt-freetype
\ -webkit
\ -multimedia
\ -audio-backend
\ -phonon-backend
\ -no-openssl
\ -no-glib
\ -no-qt3support
\ -no-libtiff -no-libmng
\ -no-opengl
\ -no-mmx -no-sse -no-sse2
\ -no-3dnow
\ -no-qvfb
\ -phonon-backend
\ -no-nis
\ -no-opengl
\ -no-cups
\ -no-separate-debug-info
\ -nomake docs
\ -qt-mouse-linuxinput
\ -qt-kbd-linuxinput
\ -qt-gfx-transformed
\ -qt-gfx-linuxfb
\
執(zhí)行make 編譯: 報(bào)錯(cuò) 該報(bào)錯(cuò)為qmake路徑不對(duì),進(jìn)入Makefile修改qmake路徑:
cd src/tools/bootstrap/Makefile
QMAKE
= /home/ww/feiling/qt-source/qt-everywhere-opensource-src-4.8.6/bin/qmake
sudo make
進(jìn)行make編譯。 繼續(xù)報(bào)錯(cuò): 依然還是老毛病,發(fā)現(xiàn)所有的Makefile都是這個(gè)問題,所以現(xiàn)在清除所有Makefile進(jìn)行重新配置編譯。
find ./ -name Makefile -delete
sudo ./autoconfigure.sh
【報(bào)錯(cuò)】提示缺少libz.so.1的動(dòng)態(tài)庫(kù): 【重新添加libz.so.1的系統(tǒng)依賴動(dòng)態(tài)庫(kù)后再次報(bào)錯(cuò)】
修改:vim src/corelib/Makefile 加上-lrt
LIBS
= $( SUBLIBS) -L/opt/qt-everywhere-opensource-src-4.8.4/lib -lpthread -lm -ldl -lrt
【報(bào)錯(cuò)】error: ‘QSharedMemory’ does not name a type
make confclean
./autoconfigure.sh
make
【編譯成功】
make install 在安裝目錄下生成編譯成功后的qmake 繼續(xù)前一步,在qt creator上添加新編譯產(chǎn)生的qmake:
opencv交叉編譯:
下載opencv源碼 安裝編譯依賴庫(kù) cmake 、cmake-qt-gui
sudo apt-get install cmake
sudo apt-get install cmake-qt-gui
cd /home/ww/feiling/opencv/opencv-2.4.13.6
sudo cmake-gui
設(shè)定好其中的源碼路徑,生成的編譯庫(kù)路徑,選擇交叉編譯器的環(huán)境等等,然后進(jìn)入剛剛選擇好的編譯路徑下; 進(jìn)入編譯路徑下:make 等待出錯(cuò):
【出錯(cuò)】
錯(cuò)誤1: 沒有鏈接到 pthread 庫(kù)
.. /
.. /lib/libopencv_core.so: undefined reference to
` pthread_mutexattr_destroy'
.. /.. /lib/libopencv_core.so: undefined reference to ` pthread_create
'
../../lib/libopencv_core.so: undefined reference to ` dlopen'
.. /.. /lib/libopencv_core.so: undefined reference to ` pthread_mutex_trylock'
.. /
.. /lib/libopencv_core.so: undefined reference to
` clock_gettime'
.. /.. /lib/libopencv_core.so: undefined reference to ` dlsym
'
../../lib/libopencv_core.so: undefined reference to ` pthread_mutexattr_settype'
.. /.. /lib/libopencv_core.so: undefined reference to ` pthread_join'
.. /
.. /lib/libopencv_core.so: undefined reference to `pthread_mutexattr_init'
collect2: ld returned
1 exit status
make
[ 2 ] : ***
[ bin/opencv_perf_core
] 錯(cuò)誤
1
make
[ 1 ] : ***
[ modules/core/CMakeFiles/opencv_perf_core.dir/all
] 錯(cuò)誤
2
make: ***
[ all
] 錯(cuò)誤
2
修改編譯目錄下的 CMakeCache.txt 文件:
找到 CMAKE_EE_LINKER_FLAGS:STRING 項(xiàng):
190 //Flags used by the linker.
191 CMAKE_EXE_LINKER_FLAGS:STRING
= ' '
修改成以下:
190 //Flags used by the linker.
191 CMAKE_EXE_LINKER_FLAGS:STRING
= -pthread -lrt
修改完成,繼續(xù) make
等待出錯(cuò)…
[ 49 %
] Built target opencv_ts
Linking CXX executable
.. /
.. /bin/opencv_perf_core
.. /
.. /lib/libopencv_core.so: undefined reference to
` dlopen'
.. /.. /lib/libopencv_core.so: undefined reference to ` dlsym'
collect2: ld returned
1 exit status
make
[ 2 ] : ***
[ bin/opencv_perf_core
] 錯(cuò)誤
1
make
[ 1 ] : ***
[ modules/core/CMakeFiles/opencv_perf_core.dir/all
] 錯(cuò)誤
2
make: ***
[ all
] 錯(cuò)誤
2
解決2: 同樣是 CMAKE_EE_LINKER_FLAGS:STRING ,繼續(xù)添加 -ldl
190 //Flags used by the linker.
191 CMAKE_EXE_LINKER_FLAGS:STRING
= -pthread -lrt -ldl
再make…
錯(cuò)誤3: 用arm-2009q3(4.4.1)編譯工具鏈編譯時(shí),還會(huì)出現(xiàn)以下錯(cuò)誤(4.6.3無(wú)此報(bào)錯(cuò))
/root/library/opencv/opencv-3.2.0/modules/imgproc/src/drawing.cpp:1026: error: call of overloaded
'abs(long long int&)' is ambiguous
/usr/local/arm/arm-2009q3/bin/
.. /arm-none-linux-gnueabi/libc/usr/include/stdlib.h:720: note: candidates are: int abs
( int
)
解決3: 百度解決方案,將錯(cuò)誤處的drawing.cpp文件中的 abs()函數(shù)改為 fabs()
再再make …
用arm-2009q3(4.4.1)編譯工具鏈編譯時(shí),還會(huì)出現(xiàn)以下錯(cuò)誤(4.5.1無(wú)此報(bào)錯(cuò))
Linking CXX executable
.. /
.. /bin/opencv_perf_core
/usr/local/arm/arm-2009q3/bin/
.. /lib/gcc/arm-none-linux-gnueabi/4.4.1/
.. /
.. /
.. /
.. /arm-none-linux-gnueabi/bin/ld:
.. /
.. /bin/opencv_perf_core: hidden symbol `__sync_fetch_and_add_4'
in /usr/local/arm/arm-2009q3/bin/
.. /lib/gcc/arm-none-linux-gnueabi/4.4.1/libgcc.a
( linux-atomic.o
) is referenced by DSO
/usr/local/arm/arm-2009q3/bin/
.. /lib/gcc/arm-none-linux-gnueabi/4.4.1/
.. /
.. /
.. /
.. /arm-none-linux-gnueabi/bin/ld: final
link failed: Nonrepresentable section on output
collect2: ld returned
1 exit status
make
[ 2 ] : ***
[ bin/opencv_perf_core
] 錯(cuò)誤
1
make
[ 1 ] : ***
[ modules/core/CMakeFiles/opencv_perf_core.dir/all
] 錯(cuò)誤
2
make: ***
[ all
] 錯(cuò)誤
sudo make install
最后一步,重新編譯飛凌板子的內(nèi)核
進(jìn)入linux內(nèi)核linux-3.14 修改build.sh內(nèi)容.
#!/bin/bash
export CPUS = ` grep -c processor /proc/cpuinfo`
export ARCH = arm
export CROSS_COMPILE = /usr/local/arm-imx6ul/gcc-4.6.2-glibc-2.13-linaro-multilib-2011.12/fsl-linaro-toolchain/bin/arm-none-linux-gnueabi-
export PATH = /usr/local/arm-imx6ul/gcc-4.6.2-glibc-2.13-linaro-multilib-2011.12/fsl-linaro-toolchain/bin/:
$PATH
DEVTYPE = $1
make distclean
if [ -n
"$DEVTYPE " ] ; then if [ ${DEVTYPE} == "emmc" ] ; then make linux_imx6ul_emmc_defconfig
elif [ ${DEVTYPE} == "nand" ] ; then make linux_imx6ul_nand_defconfig
else echo "not support now" fi ;
fi ;
make zImage -j
${CPUS}
make dtbs -j
${CPUS}
make modules -j$
{ CPUS
執(zhí)行source build.sh emmc 【報(bào)錯(cuò)】
scripts/kconfig/conf --silentoldconfig KconfigCHK include/config/kernel.releaseCHK include/generated/uapi/linux/version.hCHK include/generated/utsrelease.h
make
[ 1 ] :
'include/generated/mach-types.h' is up to date.CALL scripts/checksyscalls.shCHK include/generated/compile.hGZIP kernel/config_data.gzCHK kernel/config_data.hKernel: arch/arm/boot/Image is readyLZO arch/arm/boot/compressed/piggy.lzo
/bin/sh:
1 : lzop: not found
/home/ww/feiling/kernel/linux-3.14.38/arch/arm/boot/compressed/Makefile:193: recipe
for target
'arch/arm/boot/compressed/piggy.lzo' failed
make
[ 2 ] : ***
[ arch/arm/boot/compressed/piggy.lzo
] Error
1
/home/ww/feiling/kernel/linux-3.14.38/arch/arm/boot/Makefile:52: recipe
for target
'arch/arm/boot/compressed/vmlinux' failed
make
[ 1 ] : ***
[ arch/arm/boot/compressed/vmlinux
] Error
2
/home/ww/feiling/kernel/linux-3.14.38/arch/arm/Makefile:305: recipe
for target
'zImage' failed
make: ***
[ zImage
] Error
2
sudo apt-get install lzop
rootfs文件系統(tǒng)的搭建
這里因?yàn)榭紤]到更好LCD屏幕的問題,為了驗(yàn)證LCD屏幕,先使用官方提供的rootfs文件系統(tǒng)進(jìn)行燒寫。 然后通過制作SD卡進(jìn)行板子燒寫。
制作SD燒寫卡
cp /update.tar.bz2 ./
cp /createSdcard.sh ./
sudo ./createSdcard.sh
Copying boot partition
untar update.tar.bz2 to boot partition
sdrun/
sdrun/u-boot.imx
sdrun/zImage
sdrun/imx6ul-14x14-evk.dtb
sdrun/ramdisk.img.u
target/
target/modules.tar.bz2
target/imx6ul-14x14-evk-emmc-c-bak.dtb
target/u-boot.imx
target/imx6ul-14x14-evk-emmc-c-10.4-800x600.dtb
target/rootfs.tar.bz2
target/logo.bmp
target/zImage
target/imx6ul-14x14-evk-emmc-c-7-1024x600.dtb
target/imx6ul-14x14-evk-emmc-c-8-800x600.dtb
target/imx6ul-14x14-evk-emmc-c-10.1-1280x800.dtb
target/imx6ul-14x14-evk-emmc-c-5.6-640x480.dtb
target/imx6ul-14x14-evk-emmc-c-7-800x480.dtb
target/imx6ul-14x14-evk-emmc-c-3.5-320x240.dtb
target/imx6ul-14x14-evk-emmc-c-4.3-480x272.dtb
Buring th u-boot.imx to sdcard
129 +0 records
in
129 +0 records out
132096 bytes
( 132 kB,
129 KiB
) copied,
0.044627 s,
3.0 MB/s
371 +0 records
in
371 +0 records out
379904 bytes
( 380 kB,
371 KiB
) copied,
0.128936 s,
2.9 MB/sSyncing
.. .. Un-mount the partitions
umount: boot: not mounted.Remove created temp directories Operation Finished
制作完成,將剛剛編譯后的linux內(nèi)核zImage及設(shè)備樹.dtb更換到SD卡中。 將上一節(jié)中制作好的 SD 卡插入,同時(shí)將撥碼開關(guān)置于下圖所示。 1 4 ON, 2 3 5 6 7 8 OFF,如下圖: 則可以從 sd 卡啟動(dòng)系統(tǒng) 啟動(dòng)CRT,進(jìn)入串口查看串口debug信息: 燒寫完成,顯示: 將撥片調(diào)回emmc啟動(dòng),1 4 5 on 其他off。 重啟啟動(dòng),顯示失敗,文件系統(tǒng)正常。
總結(jié)
以上是生活随笔 為你收集整理的使用飞凌嵌入式IMX6UL-C1板子——qt+opencv环境搭建 的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔 網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔 推薦給好友。