龙芯2K1000LA移植交叉编译环境以及QT

news2024/12/25 1:09:13

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

./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完成编译。

 

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

三、交叉编译openssl

配置如下:

#!/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的源码以及扩展包,然后解压将扩展包放在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暂时还没解决,于是重新开始交叉编译,这次也没有移植扩展包,然后居然成功了。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/921083.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

第七章:借阅管理【基于Servlet+JSP的图书管理系统】

借阅管理 1. 借书卡 1.1 查询借书卡 借书卡在正常的CRUD操作的基础上,我们还需要注意一些特殊的情况。查询信息的时候。如果是管理员则可以查询所有的信息,如果是普通用户则只能查看自己的信息。这块的控制在登录的用户信息 然后就是在Dao中处理的时候需…

博客系统前端页面(项目实战系列1)

目录 前言: 1.前端 1.1博客列表页 1.1.1博客列表页效果预览图 1.1.2实现导航栏 1.1.3实现版心个人信息博客列表 1.2博客详情页 1.2.1博客详情页效果预览图 1.2.2实现导航栏 版心个人信息 1.2.3实现博客正文 1.3登录页 1.3.1登录页效果预览图 1.3.2导航…

❤echarts柱状图的使用及详细配置

❤ echarts柱状图的使用及详细配置 一、Echarts 柱形图详细配置 1、 简单引入 import * as echarts from echarts;// 5.4区别4引入方式 // 结构 <div id"echartzhu" style"width: 100%;height: 200px;"></div>// 渲染 this.echartzhu(echa…

使用ffmpeg将WebM文件转换为MP4文件的简单应用程序

tiktok网上下载的short视频是webm格式的&#xff0c;有些程序无法处理该程序&#xff0c;比如roop程序&#xff0c;本文介绍了如何使用wxPython库创建一个简单的GUI应用程序&#xff0c;用于将WebM文件转换为MP4文件。这个应用程序使用Python编写&#xff0c;通过调用FFmpeg命令…

【校招VIP】TCP/IP模型之常用协议和端口

考点介绍&#xff1a; 大厂测试校招面试里经常会出现TCP/IP模型的考察&#xff0c;TCP/IP协议是网络基础知识&#xff0c;是互联网的基石&#xff0c;不管你是做开发、运维还是信息安全的&#xff0c;TCP/IP 协议都是你绕不过去的一环&#xff0c;程序员需要像学会看书写字一样…

数据库——Redis 没有使用多线程?为什么不使用多线程?

文章目录 Redis6.0 之后为何引入了多线程&#xff1f; 虽然说 Redis 是单线程模型&#xff0c;但是&#xff0c; 实际上&#xff0c;Redis 在 4.0 之后的版本中就已经加入了对多线程的支持。 不过&#xff0c;Redis 4.0 增加的多线程主要是针对一些大键值对的删除操作的命令&a…

Vue 中hash 模式与 history 模式的区别

hash 模式&#xff1a; - 地址中永远带着 # 号&#xff0c;不美观。 - 兼容性比较好。 - 通过手机 app 分享地址时&#xff0c;如果 app 效验严格&#xff0c;该地址会被标记为不合法。 history 模式&#xff1a; - 地址干净&#xff0c;美观。 - 兼容性和 hash 模式相比…

媒体梦工厂软件教程:轻松合并视频,打造完美影片

在如今数字化时代&#xff0c;视频编辑已经成为人们日常生活和工作中不可或缺的部分。无论是在社交媒体上与朋友分享精彩时刻&#xff0c;还是在业务领域展示专业技能&#xff0c;人们对于视频的需求愈发增长。而对于那些想要将多个视频片段合并成一个完美影片的人来说&#xf…

常见前端面试之VUE面试题汇总五

13. assets 和 static 的区别 相同点&#xff1a; assets 和 static 两个都是存放静态资源文件。项目中所 需要的资源文件图片&#xff0c;字体图标&#xff0c;样式文件等都可以放在这两个文件 下&#xff0c;这是相同点 不相同点&#xff1a;assets 中存放的静态资源文件在…

【3维视觉】网格的谱分解和应用(GFT图傅里叶变换)

网格的谱分解即网格的频率分解&#xff0c;我们学过信号的傅里叶变换&#xff0c;将信号从空域变换到频域。二维图像由离散傅里叶变换DFT(Discrete Fourier Transform)。在图信号领域&#xff0c;也有图的傅里叶变换GFT(Graph Fourier Transform)&#xff0c;网格可以看作是图&…

数据生成 | MATLAB实现MCMC马尔科夫蒙特卡洛模拟的数据生成

数据生成 | MATLAB实现MCMC马尔科夫蒙特卡洛模拟的数据生成 目录 数据生成 | MATLAB实现MCMC马尔科夫蒙特卡洛模拟的数据生成生成效果基本描述模型描述程序设计参考资料 生成效果 基本描述 1.MATLAB实现MCMC马尔科夫蒙特卡洛模拟的数据生成&#xff1b; 2.马尔科夫链蒙特卡洛方…

深入探索快速排序:高效分而治之的算法

1. 引言&#xff1a;快速排序的背景与重要性 快速排序&#xff08;Quick Sort&#xff09;是一种高效的排序算法&#xff0c;以其出色的性能和普适性而受到广泛关注。它利用了分而治之的思想&#xff0c;通过将数组分割成较小的子数组&#xff0c;并将这些子数组分别排序来实现…

苹果手机怎么删除软件?教你1分钟搞定!

手机内存快不够用了&#xff0c;实在是不想删除手机里的重要数据&#xff0c;所以想卸载一些长时间不用的软件&#xff0c;有什么快速好用的方法能够安利一下吗&#xff1f; 买了新手机&#xff0c;第一件事当然是在手机上下载各种各样的软件供自己使用和娱乐。但当过了一段时间…

Clock Domain Crossing(CDC)跨时钟域

我正在「拾陆楼」和朋友们讨论有趣的话题,你⼀起来吧? 拾陆楼知识星球入口 ​跨时钟域(CDC)指的是信号由一个时钟域进入另一个时钟域,以下图为例。 ● F1属于clk1时钟域 ● Q1属于clk1时钟域的信号 ● F2属于clk2时钟域 ● Q2属于clk2时钟域的信号 ● Q1对于F2来说是…

Unity打包Windows程序,概率性出现无法全屏或分辨率不匹配

排除代码和Resolution and Presentation面板设置问题 如果程序还是不能按照预期的分辨率运行&#xff0c;应该是系统注册表记录了对应的设置。 解决方案&#xff1a; 打开注册表&#xff0c;使用快捷键“Win” "R"组合快捷键。在打开后面键入命令&#xff1a;Rege…

6G太赫兹波频段

6G目前处于非常早期的研究阶段。国际电信联盟所期待的“网络2030”愿景正在逐步实现。虽然该行业距离进入6G标准开发进程还有几年的时间&#xff0c;但亚太赫兹&#xff08;sub-THz&#xff09;技术已经成为研究的重点。 6G一个关键目标和积极研究领域是实现 100 Gbps 至 1 Tb…

枚举的使用优化if-else

文章目录 目录 文章目录 前言 一、用来替代大量请求路径的判断 二、使用枚举来优化if-else结构 总结 前言 枚举是一种常用于替代复杂的if-else结构的优化工具。通过使用枚举&#xff0c;可以将多个条件判断语句转化为简单的case语句&#xff0c;提高代码的可读性和可维护性 一…

问道管理股票分析:股票开户后不交易会扣费吗?怎么注销?

相信日子中有许多人在办理一些如银行账户开户以及其他买卖业务时&#xff0c;会被建议注册一个证券账户&#xff0c;而相当多的人在注册完后就没有再搭理过这个账户了。那么&#xff0c;开户后不买卖会被扣费吗&#xff1f;觉得藏着没用的&#xff0c;该怎样去刊出&#xff1f;…

Linux下的系统编程——vim/gcc(二)

前言&#xff1a; 在Linux操作系统之中有很多使用的工具&#xff0c;我们可以用vim来进行程序的编写&#xff0c;然后用gcc来生成可执行文件&#xff0c;最终运行程序。下面就让我们一起了解一下vim和gcc吧 目录 一、vim编辑 1.vim的三种工作模式 2.基本操作之跳转字符 &a…

每日两题 111二叉树的最小深度 112路径总和(递归)

111 题目 给定一个二叉树&#xff0c;找出其最小深度。 最小深度是从根节点到最近叶子节点的最短路径上的节点数量。 说明&#xff1a;叶子节点是指没有子节点的节点。 示例 1&#xff1a; 输入&#xff1a;root [3,9,20,null,null,15,7] 输出&#xff1a;2示例 2&#x…