当前位置:   article > 正文

龙芯2K1000LA移植交叉编译环境以及QT_龙心2k1000la qt交叉编译

龙心2k1000la qt交叉编译

嵌入式大赛结束了,根据这次比赛中记的凌乱的笔记,整理了一份龙芯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语句

二、移植QT源码

下载QT5.15.2源码。

下载连接:Index of /archive/qt/5.15/5.15.2

拷贝linux-aarch64-gnu-g++ 然后改为linux-loongarch64-g++。 

修改qmake.conf,内容如下:

 然后建立一个sh脚本进行配置,这里没有移植tslib。

  1. ./configure -prefix /home/xiaochao/Loongnix/arm-qt \
  2. -opensource \
  3. -confirm-license \
  4. -release \
  5. -strip \
  6. -shared \
  7. -xplatform linux-loongarch64-g++ \
  8. -optimized-qmake \
  9. -c++std c++11 \
  10. --rpath=no \
  11. -pch \
  12. -skip qt3d \
  13. -skip qtactiveqt \
  14. -skip qtandroidextras \
  15. -skip qtcanvas3d \
  16. -skip qtconnectivity \
  17. -skip qtdatavis3d \
  18. -skip qtdoc \
  19. -skip qtgamepad \
  20. -skip qtlocation \
  21. -skip qtmacextras \
  22. -skip qtnetworkauth \
  23. -skip qtpurchasing \
  24. -skip qtremoteobjects \
  25. -skip qtscript \
  26. -skip qtscxml \
  27. -skip qtsensors \
  28. -skip qtspeech \
  29. -skip qtsvg \
  30. -skip qttools \
  31. -skip qttranslations \
  32. -skip qtwayland \
  33. -skip qtwebengine \
  34. -skip qtwebview \
  35. -skip qtwinextras \
  36. -skip qtx11extras \
  37. -skip qtxmlpatterns \
  38. -make libs \
  39. -make examples \
  40. -nomake tools -nomake tests \
  41. -gui \
  42. -widgets \
  43. -dbus-runtime \
  44. --glib=no \
  45. --iconv=no \
  46. --pcre=qt \
  47. --zlib=qt \
  48. -no-openssl \
  49. --freetype=qt \
  50. --harfbuzz=qt \
  51. -no-opengl \
  52. -linuxfb \
  53. --xcb=no \
  54. --libpng=qt \
  55. --libjpeg=qt \
  56. --sqlite=qt \
  57. -plugin-sql-sqlite \
  58. -recheck-all

主要是修改安装位置和平台的架构 ,就是对QT源码的裁剪。

移植包括tslib配置如下:
 

  1. toconfigure.sh
  2. ./configure -prefix /home/xiaochao/Loongnix/arm-qt \
  3. -opensource \
  4. -confirm-license \
  5. -release \
  6. -strip \
  7. -shared \
  8. -xplatform linux-arm-gnueabi-g++ \
  9. -optimized-qmake \
  10. -c++std c++11 \
  11. --rpath=no \
  12. -pch \
  13. -skip qt3d \
  14. -skip qtactiveqt \
  15. -skip qtandroidextras \
  16. -skip qtcanvas3d \
  17. -skip qtconnectivity \
  18. -skip qtdatavis3d \
  19. -skip qtdoc \
  20. -skip qtgamepad \
  21. -skip qtlocation \
  22. -skip qtmacextras \
  23. -skip qtnetworkauth \
  24. -skip qtpurchasing \
  25. -skip qtremoteobjects \
  26. -skip qtscript \
  27. -skip qtscxml \
  28. -skip qtsensors \
  29. -skip qtspeech \
  30. -skip qtsvg \
  31. -skip qttools \
  32. -skip qttranslations \
  33. -skip qtwayland \
  34. -skip qtwebengine \
  35. -skip qtwebview \
  36. -skip qtwinextras \
  37. -skip qtx11extras \
  38. -skip qtxmlpatterns \
  39. -make libs \
  40. -make examples \
  41. -nomake tools -nomake tests \
  42. -gui \
  43. -widgets \
  44. -dbus-runtime \
  45. --glib=no \
  46. --iconv=no \
  47. --pcre=qt \
  48. --zlib=qt \
  49. -no-openssl \
  50. --freetype=qt \
  51. --harfbuzz=qt \
  52. -no-opengl \
  53. -linuxfb \
  54. --xcb=no \
  55. -tslib \
  56. --libpng=qt \
  57. --libjpeg=qt \
  58. --sqlite=qt \
  59. -plugin-sql-sqlite \
  60. -I/home/xiaochao/Loongnix/tslib-1.21/arm-tslib/include \
  61. -L/home/xiaochao/Loongnix/tslib-1.21/arm-tslib/lib \
  62. -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完成编译。

 

 生成的绿色文件即为目标文件,拷贝到开发板上进行测试。

三、交叉编译openssl

配置如下:

  1. #!/bin/sh
  2. OPENSSL_LIBS='-L/home/xiaochao/Loongnix/SSL/arm-ssl/lib -lssl -lcrypto' \
  3. ./configure -prefix /home/xiaochao/Loongnix/arm-qt-ssl \
  4. -openssl-linked \
  5. -I/home/xiaochao/Loongnix/SSL/arm-ssl/include \
  6. -L'/home/xiaochao/Loongnix/SSL/arm-ssl/lib -Wl,-rpath=/home/xiaochao/Loongnix/SSL/arm-ssl/lib' \
  7. -opensource \
  8. -confirm-license \
  9. -release \
  10. -strip \
  11. -shared \
  12. -xplatform linux-loongarch64-g++ \
  13. -optimized-qmake \
  14. -c++std c++11 \
  15. --rpath=no \
  16. -pch \
  17. -skip qt3d \
  18. -skip qtactiveqt \
  19. -skip qtandroidextras \
  20. -skip qtcanvas3d \
  21. -skip qtconnectivity \
  22. -skip qtdatavis3d \
  23. -skip qtdoc \
  24. -skip qtgamepad \
  25. -skip qtlocation \
  26. -skip qtmacextras \
  27. -skip qtnetworkauth \
  28. -skip qtpurchasing \
  29. -skip qtremoteobjects \
  30. -skip qtscript \
  31. -skip qtscxml \
  32. -skip qtsensors \
  33. -skip qtspeech \
  34. -skip qtsvg \
  35. -skip qttools \
  36. -skip qttranslations \
  37. -skip qtwayland \
  38. -skip qtwebengine \
  39. -skip qtwebview \
  40. -skip qtwinextras \
  41. -skip qtx11extras \
  42. -skip qtxmlpatterns \
  43. -make libs \
  44. -make examples \
  45. -nomake tools -nomake tests \
  46. -gui \
  47. -widgets \
  48. -dbus-runtime \
  49. --glib=no \
  50. --iconv=no \
  51. --pcre=qt \
  52. --zlib=qt \
  53. --freetype=qt \
  54. --harfbuzz=qt \
  55. -no-opengl \
  56. -linuxfb \
  57. --xcb=no \
  58. --libpng=qt \
  59. --libjpeg=qt \
  60. --sqlite=qt \
  61. -plugin-sql-sqlite \
  62. -recheck-all

报错如下,修改Makefile,删除-m64

重新交叉编译qt,添加openssl支持

四、opencv安装

从官网下载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暂时还没解决,于是重新开始交叉编译,这次也没有移植扩展包,然后居然成功了。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Gausst松鼠会/article/detail/564724
推荐阅读
相关标签
  

闽ICP备14008679号