赞
踩
嵌入式大赛结束了,根据这次比赛中记的凌乱的笔记,整理了一份龙芯2K1000LA的环境搭建过程,可能笔记缺少了一部分步骤或者错误,但是大致步骤可以当作参考。
下载连接:龙芯 GNU 编译工具链 | 龙芯开源社区 (loongnix.cn)
拷贝在Ubuntu下并进行解压。
然后将该目录下的文件拷贝到/opt目录下。
将解压好的工具链文件添加到环境变量中,才能在之后编译 Qt 源码时, 对工具链的调用位置准确无误。
1.首先,打开家目录(HOME)下的.bashrc。
2.将export PATH=$PATH:/opt/loongson-gnu-toolchain-8.3-x86_64-loongarch64-linux-gnu-rc1.2/bin添加到最后一行。一般来说,在终端中执行的路径信息是不会保存的,因此需要通过执行该语句保证下次启动时仍然保存了环境变量。
3.然后执行 source ~/.bashrc,使用该语句更新环境配置
4.如果需要确认版本信息,可以执行 loongarch64-linux-gnu-g++ -v语句
下载QT5.15.2源码。
下载连接:Index of /archive/qt/5.15/5.15.2
拷贝linux-aarch64-gnu-g++ 然后改为linux-loongarch64-g++。
修改qmake.conf,内容如下:
然后建立一个sh脚本进行配置,这里没有移植tslib。
./configure -prefix /home/xiaochao/Loongnix/arm-qt \ -opensource \ -confirm-license \ -release \ -strip \ -shared \ -xplatform linux-loongarch64-g++ \ -optimized-qmake \ -c++std c++11 \ --rpath=no \ -pch \ -skip qt3d \ -skip qtactiveqt \ -skip qtandroidextras \ -skip qtcanvas3d \ -skip qtconnectivity \ -skip qtdatavis3d \ -skip qtdoc \ -skip qtgamepad \ -skip qtlocation \ -skip qtmacextras \ -skip qtnetworkauth \ -skip qtpurchasing \ -skip qtremoteobjects \ -skip qtscript \ -skip qtscxml \ -skip qtsensors \ -skip qtspeech \ -skip qtsvg \ -skip qttools \ -skip qttranslations \ -skip qtwayland \ -skip qtwebengine \ -skip qtwebview \ -skip qtwinextras \ -skip qtx11extras \ -skip qtxmlpatterns \ -make libs \ -make examples \ -nomake tools -nomake tests \ -gui \ -widgets \ -dbus-runtime \ --glib=no \ --iconv=no \ --pcre=qt \ --zlib=qt \ -no-openssl \ --freetype=qt \ --harfbuzz=qt \ -no-opengl \ -linuxfb \ --xcb=no \ --libpng=qt \ --libjpeg=qt \ --sqlite=qt \ -plugin-sql-sqlite \ -recheck-all
主要是修改安装位置和平台的架构 ,就是对QT源码的裁剪。
移植包括tslib配置如下:
toconfigure.sh ./configure -prefix /home/xiaochao/Loongnix/arm-qt \ -opensource \ -confirm-license \ -release \ -strip \ -shared \ -xplatform linux-arm-gnueabi-g++ \ -optimized-qmake \ -c++std c++11 \ --rpath=no \ -pch \ -skip qt3d \ -skip qtactiveqt \ -skip qtandroidextras \ -skip qtcanvas3d \ -skip qtconnectivity \ -skip qtdatavis3d \ -skip qtdoc \ -skip qtgamepad \ -skip qtlocation \ -skip qtmacextras \ -skip qtnetworkauth \ -skip qtpurchasing \ -skip qtremoteobjects \ -skip qtscript \ -skip qtscxml \ -skip qtsensors \ -skip qtspeech \ -skip qtsvg \ -skip qttools \ -skip qttranslations \ -skip qtwayland \ -skip qtwebengine \ -skip qtwebview \ -skip qtwinextras \ -skip qtx11extras \ -skip qtxmlpatterns \ -make libs \ -make examples \ -nomake tools -nomake tests \ -gui \ -widgets \ -dbus-runtime \ --glib=no \ --iconv=no \ --pcre=qt \ --zlib=qt \ -no-openssl \ --freetype=qt \ --harfbuzz=qt \ -no-opengl \ -linuxfb \ --xcb=no \ -tslib \ --libpng=qt \ --libjpeg=qt \ --sqlite=qt \ -plugin-sql-sqlite \ -I/home/xiaochao/Loongnix/tslib-1.21/arm-tslib/include \ -L/home/xiaochao/Loongnix/tslib-1.21/arm-tslib/lib \ -recheck-all
执行配置
在make之前需要修改如下utils.h文件
修改如下:
不然会报如下错误:error: #error Target architecture was not detected as supported by Double-Conversion.
具体的解决办法参考如下文章:(2条消息) 龙芯5000编译Qt环境报错_龙芯编译qt_芒果黑的博客-CSDN博客
出现如下的界面,使用make就可以进行qt源码的交叉编译了。
编译完成如下
下面安装时建议使用超级管理员运行,可能会出现权限不够的情况。
安装成功后会在sh文件配置下的目录下生成相应的文件。
交叉编译出来的QT库有以下目录:
bin doc examples include lib mkspecs plugins
将交叉编译出来的文件移植到开发板的/lib目录(目录自己定)下,这里其实打包lib和plugins也行的。
交叉编译的可以执行程序在运行时会连接动态库,因此还需要设置在/etc/profile中添加以下环境变量:由于这里并没有移植tslib,配置文件如下
# qt-lib environment variables
export QT_ROOT=/lib/arm-qt
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$QT_ROOT/lib/
export QT_QPA_PLATFORM_PLUGIN_PATH=$QT_ROOT/plugins
export QT_QPA_PLATFORM=linuxfb:tty=/dev/fb0
export QT_QPA_FONTDIR=/usr/share/fonts
若移植了tslib,配置文件如下:
# qt-lib environment variables
export QT_ROOT=/lib/arm-qt
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$QT_ROOT/lib/
export QT_QPA_PLATFORM_PLUGIN_PATH=$QT_ROOT/plugins
export QT_QPA_PLATFORM=linuxfb:tty=/dev/fb0
export QT_QPA_FONTDIR=/usr/share/fonts
export QT_QPA_GENERIC_PLUGINS=tslib
export LD_PRELOAD=$TS_ROOT/lib/libts.so
完成配置后执行以下命令
source /etc/profile
在虚拟机是使用qmake进行交叉编译生成了Makefile文件,然后直接make完成编译。
生成的绿色文件即为目标文件,拷贝到开发板上进行测试。
配置如下:
- #!/bin/sh
- OPENSSL_LIBS='-L/home/xiaochao/Loongnix/SSL/arm-ssl/lib -lssl -lcrypto' \
- ./configure -prefix /home/xiaochao/Loongnix/arm-qt-ssl \
- -openssl-linked \
- -I/home/xiaochao/Loongnix/SSL/arm-ssl/include \
- -L'/home/xiaochao/Loongnix/SSL/arm-ssl/lib -Wl,-rpath=/home/xiaochao/Loongnix/SSL/arm-ssl/lib' \
- -opensource \
- -confirm-license \
- -release \
- -strip \
- -shared \
- -xplatform linux-loongarch64-g++ \
- -optimized-qmake \
- -c++std c++11 \
- --rpath=no \
- -pch \
- -skip qt3d \
- -skip qtactiveqt \
- -skip qtandroidextras \
- -skip qtcanvas3d \
- -skip qtconnectivity \
- -skip qtdatavis3d \
- -skip qtdoc \
- -skip qtgamepad \
- -skip qtlocation \
- -skip qtmacextras \
- -skip qtnetworkauth \
- -skip qtpurchasing \
- -skip qtremoteobjects \
- -skip qtscript \
- -skip qtscxml \
- -skip qtsensors \
- -skip qtspeech \
- -skip qtsvg \
- -skip qttools \
- -skip qttranslations \
- -skip qtwayland \
- -skip qtwebengine \
- -skip qtwebview \
- -skip qtwinextras \
- -skip qtx11extras \
- -skip qtxmlpatterns \
- -make libs \
- -make examples \
- -nomake tools -nomake tests \
- -gui \
- -widgets \
- -dbus-runtime \
- --glib=no \
- --iconv=no \
- --pcre=qt \
- --zlib=qt \
- --freetype=qt \
- --harfbuzz=qt \
- -no-opengl \
- -linuxfb \
- --xcb=no \
- --libpng=qt \
- --libjpeg=qt \
- --sqlite=qt \
- -plugin-sql-sqlite \
- -recheck-all
报错如下,修改Makefile,删除-m64
重新交叉编译qt,添加openssl支持
从官网下载opencv的源码以及扩展包,然后解压将扩展包放在opencv目录下。
创建 build文件夹, build 为构建文件夹,进入 build 目录下,执行指令 cmake-gui,开始配置 OpenCV 的环境。
cd build
cmake-gui
执行完成后会出现图形化工具 cmake-gui。 如下图
指定我们源码的所在路径和构目录。按如下图设置,记得修改成个人的路径。再点击 Gen
erate。
选择 Unix Makefiles, 然后选择 Specify options for cross-compiling,再点击 Next。
填写交叉编译器的路径。
下面就是您配置的信息,可以配置很多项,比如要编译哪些库等都可以在此选择编译或者
不编译。 比如常见的 V4L2 都需要自己打开(V4L2 是处理摄像头类用的)。
点击 CMAKE,在 CMAKE_EXE_LINKER_FLAGS 处添加上“-lpthread -lrt -ldl”添加这些
是指定依赖库的链接参数。 上面的“-lxx”其中“-l”是大写字母“L”的小写字母“l”,不是
数字“1”。
再在 CMAKE_INSTALL_PREFIX 处指定安装目录,如果不指定,它会默认安装到 Ubuntu 系统目录/usr/local 下。再点击关闭。
如果需要编译扩展库,则需勾选NONFREE,并指定扩展库的源码目录中modules目录。如果不需要扩展库,则不需要选择相关项。将其值选择为opencv_contrib目录中的modules目录
到这里我们已经完成配置,现在我们需要生成 Makefile 等文件,我们先点击 Configure,再点击 Generate 就可以生成了,然后退出即可。
然后需要在源码目录 3rdparty/protobuf/src/google/protobuf/stubs/common.
cc 这个文件下第 33 行添加#define HAVE_PTHREAD 宏定义才可以编译的过。具体原因是 HA
VE_PTHREAD 宏定义了 pthread 库。在如下位置添加即可。
cd .. // 返回 opencv 源码顶层目录
vim 3rdparty/protobuf/src/google/protobuf/stubs/common.cc
修改完成后,返回于是 build 目录下,可以看到 bulid 目录下已经准备了构建文件。我们直
接输入 make 构建即可。
cd build/
make -j8
报错:
这个bug暂时还没解决,于是重新开始交叉编译,这次也没有移植扩展包,然后居然成功了。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。