泰山派开发之—Ubuntu24.04下Linux开发环境搭建

简介

最近翻到了吃灰已久的泰山派,是刚出来的时候用优惠券买的,当时价格挺便宜的,最近给它翻出来了,打算试试做个项目。买的泰山派容量是2G+16G,SOC芯片使用的是RK3566,搭载1TOP算力的NPU,并且具有丰富的接口,详细参数如下:
在这里插入图片描述

官方的参考文档如下:https://wiki.lckfb.com/zh-hans/tspi-rk3566/
由于官方给的是基于Ubuntu18.04的开发环境搭建步骤,然而Ubuntu目前稳定版已经出到了24.04,重新专门为它安装一个18.04版本的系统显然不合适。因此,在这里记录了一下基于Ubuntu24.04进行泰山派Linux开发环境搭建的步骤。

环境准备

  • Ubuntu24.04
  • 泰山派
  • tspi_linux_sdk_repo_20240131.tar.gz
  • buildroot_dl_4c7c9df616fb.tar.gz

python2安装

由于python2目前官方已经结束支持,Ubuntu24.04中已经不再默认安装python2了。然而泰山派的SDK编译依然要用到python2,因此我们这里首先进行python2的安装。

安装python2.7

首先运行如下命令,进行系统的更新。

sudo apt update && sudo apt upgrade

之后安装相关依赖

sudo apt install -y build-essential checkinstall libncursesw5-dev libssl-dev libsqlite3-dev tk-dev libgdbm-dev libc6-dev libbz2-dev libffi-dev

然后我们下载python2的安装包,这里我选择的是2.7.18版本,也是python2的最后一个版本。
下载页面:https://www.python.org/downloads/release/python-2716/
下载链接:https://www.python.org/ftp/python/2.7.18/Python-2.7.18.tgz
下载完成后,我们对压缩包进行解压

tar -xvf Python-2.7.18.tgz

之后,我们进入解压后的目录,检查依赖项和编译器设置,使用configure命令生成 Makefile 文件,并且使用CFLAGS=-fPIC设置编译器生成位置无关的代码,否则可能会报错

cd Python-2.7.18
./configure --enable-optimizations CFLAGS=-fPIC

在完成上述准备后,我们就能够执行如下命令进行编译安装了

sudo make altinstall

其中altinstall可以保证不会覆盖系统默认的 python 命令,从而避免影响系统自带的python3。
最后,我们使用whereis命令,查看安装好的pyhon2.7的路径

whereis python2.7

在这里插入图片描述

可以看到我们的python2.7已经成功安装到了/usr/local目录下。
下面我们运行如下命令,进入到python环境中,测试python2.7是否能够正常使用

python2.7

在这里插入图片描述

可以看到我们的python2.7已经能够正常运行。

pip安装

目前我们仅仅是安装了python2.7本体,还有许多python的功能包需要使用pip工具进行安装。接下来我们就来安装python2.7的pip工具,运行命令如下:

sudo apt install curl
curl https://bootstrap.pypa.io/pip/2.7/get-pip.py -o get-pip.py
sudo python2.7 get-pip.py

安装完成后,我们运行如下命令进行测试

pip2.7 --version

添加python2软链接

虽然我们上面完成了python2.7的安装,但是系统默认依然还是python3。
在这里插入图片描述

我们还需要使用如下命令添加软连接,使得python3和python2分别对应不同版本的python

sudo ln -s /usr/local/bin/python2.7 python2

其中的/usr/local/bin/python2.7对应于你自己实际的python2.7安装路径

SDK编译

解压SDK

首先运行如下命令,解压下载的SDK压缩包

tar -xvzf tspi_linux_sdk_repo_20240131.tar.gz

之后运行如下命令,进行同步

.repo/repo/repo sync -l -j88

同步完成后,会出现如下successfully界面
在这里插入图片描述

dl库替代

由于buildroot编译时需要下载很多库,而如果网络不好的话,可能会出现buildroot的库下载失败报错的问题,因此我们使用了立创提供的已经下载好的库,直接进行替换即可。

首先将buildroot_dl_4c7c9df616fb.tar.gz复制到SDK目录中,并运行如下命令,解压buildroot_dl_4c7c9df616fb文件到buildroot/dl目录下

tar -xzf buildroot_dl_4c7c9df616fb.tar.gz

解压完成后,buildroot/dl目录下的部分文件展示如下:
在这里插入图片描述

编译准备

在完成上述步骤后,我们就能够进行编译环境的安装了。

安装环境依赖

首先运行如下命令,安装编译环境所需要的依赖。

sudo apt install -y git make openjdk-8-jdk git-core gnupg flex bison gperf build-essential zip curl zlib1g-dev libgl1-mesa-dev gcc-multilib g++-multilib libc6-dev-i386 x11proto-core-dev libx11-dev lib32z1-dev libxml2-utils xsltproc unzip bc imagemagick ccache schedtool libssl-dev clang
sudo apt-get install whiptail ssh libssl-dev liblz4-tool expect patchelf chrpath gawk texinfo chrpath diffstat binfmt-support qemu-user-static live-build bison flex fakeroot cmake gcc-multilib g++-multilib unzip device-tree-compiler ncurses-dev

板级配置

运行如下命令进行泰山派SDK的板级配置,并在弹出来的选项卡中选择BoardConfig-rk3566-tspi-v10.mk

./build.sh lunch

在这里插入图片描述

编译buildroot系统

在完成以上准备后,我们就能够编译buildroot系统了。

由于buildroot中使用的python3.8.6,因此我们在编译时也必须使用python3.8环境才能正常进行,否则在编译时可能会报错
在这里插入图片描述

这里我们使用pyenv工具,安装python3.8.19并使其生效。

pyenv install 3.8.19
pyenv local 3.8.19  # 仅当前目录生效

之后需要设置环境变量RK_ROOTFS_SYSTEM为buildroot

export RK_ROOTFS_SYSTEM=buildroot

为避免编译buildroot时报错multiple definition of bwriter_buffer,可以将如下代码添加到buildroot/package/squashfs/0001-include-sysmacros.patch文件的末尾(未验证是否为必须步骤)

diff -ruN squashfs-3de1687d7432ea9b302c2db9521996f506c140a3/squashfs-tools/mksquashfs.h squashfs-3de1687d7432ea9b302c2db9521996f506c140a3-patch/squashfs-tools/mksquashfs.h
--- squashfs-3de1687d7432ea9b302c2db9521996f506c140a3/squashfs-tools/mksquashfs.h       2015-12-07 09:42:03.000000000 +0800
+++ squashfs-3de1687d7432ea9b302c2db9521996f506c140a3-patch/squashfs-tools/mksquashfs.h 2025-01-02 16:59:52.994326895 +0800
@@ -133,7 +133,7 @@#define BLOCK_OFFSET 2extern struct cache *reader_buffer, *fragment_buffer, *reserve_cache;
-struct cache *bwriter_buffer, *fwriter_buffer;
+extern struct cache *bwriter_buffer, *fwriter_buffer;extern struct queue *to_reader, *to_deflate, *to_writer, *from_writer,*to_frag, *locked_fragment, *to_process_frag;extern struct append_file **file_mapping;

最后运行如下命令,进行全编译。

./build.sh all

如果只编译(u-Boot,kernel,Rootfs,Recovery),则在编译完成以后还需要再执⾏./mkfirmware.sh 进⾏固件打包,与./build.sh updateimg生成镜像,否则rockdev目录下生成img镜像不是最新的。

电源配置

在首次进行编译时,会遇到电源配置选项。这里除了VCCIO4和VCCIO6选1.8V其他都选3V3。如果没有弹出电源选择框,则需要安装sudo apt install whiptail后再重新进行编译。
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在Ubuntu24.04环境下,可能会在编译完kernel或buildroot后中断并且无报错信息,这时只需要重新执行build命令即可。
编译成功后的输出如下:
在这里插入图片描述

打包固件

之后运行如下命令进行固件打包

./mkfirmware.sh

在这里插入图片描述
运行如下命令查看固件,可以看到固件已经是最新的了。

ls ./rockdev -l

在这里插入图片描述

打包镜像

生成的固件是零散的,并且不便于下载,因此我们可以使用如下命令将打包好的固件生成一个update.img镜像,便于后续的镜像下载。

./build.sh updateimg

在这里插入图片描述

执行完毕后,就能够在rockdev生成update.img镜像文件了。

小结

至此,我们就完成了Ubuntu24.04环境下泰山派的SDK搭建。其中最值得注意的是在Ubuntu24.04环境下执行build命令可能会意外中断,如果未出现error报错,则无需执行clean操作,只需直接重新执行build命令即可。这样可以避免全量编译,从而大幅缩短构建时间,尤其是buildroot根文件系统的编译过程,因为它需要对所有功能包逐一编译,极为耗时。下一博客中,我们将介绍如何在linux下进行固件的烧录。

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

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

相关文章

HTTP 协议中常见的错误状态码(详细介绍)

以下是 HTTP 协议中常见的错误状态码及其原因的总结,按错误类型分类整理: 4xx 客户端错误 400 Bad Request 原因:请求格式错误,服务器无法解析。常见场景: 请求头或请求体语法错误(如 JSON/XML 格式错误…

kkFileView文件预览组件部署说明

kkFileView组件部署流程指南 在数字化办公与文件管理场景中,在线文件预览功能极为关键。kkFileView作为一款优秀的开源在线文件预览组件,支持多种格式文件的预览,为企业和开发者提供了便捷的解决方案。下面将详细介绍其部署步骤。 一、前期准…

[React Native]Stack、Tab和Drawer导航器详解

对于StackNavigator,网页[1]提到它用于页面间的层级跳转,使用栈结构管理页面。网页[4]和[8]详细说明了navigationOptions的配置,比如标题、头部样式等。网页[3]展示了如何在Stack中嵌入Tab导航,这可以作为组合使用的例子。 TabNa…

激光雷达产业观察--速腾聚创发展脉络2025.3.14

一.发展历程 1.1 企业创立 速腾聚创的创立可追溯至2014年8月28日,这家充满活力的高科技企业诞生于中国深圳。公司创始人邱纯鑫是一位富有远见的企业家,他的创业之路充满了创新精神和技术洞察力。 邱纯鑫的创业灵感源于他在哈尔滨工业大学深圳校区的学…

Kubernetes 网络方案全解析:Flannel、Calico 与 Cilium 对比与选择

文章目录 Kubernetes 网络方案全解析:Flannel、Calico 与 Cilium 对比与选择Flannel —— 轻量级基础网络简介核心特性适用场景 Calico —— 高性能与安全兼备的成熟方案简介核心特性适用场景 Cilium —— 基于 eBPF 的下一代网络方案简介核心特性适用场景 深入对比…

OpenCV实现图像分割与无缝合并

一、图像分割核心方法 1、阈值分割 #include <opencv2/opencv.hpp> using namespace cv; int main() {Mat img imread("input.jpg", IMREAD_GRAYSCALE);Mat binary;threshold(img, binary, 127, 255, THRESH_BINARY); // 固定阈值分割imwrite("binary.…

计算机视觉算法实战——驾驶员分心检测(主页有源码)

✨个人主页欢迎您的访问 ✨期待您的三连 ✨ ✨个人主页欢迎您的访问 ✨期待您的三连 ✨ ✨个人主页欢迎您的访问 ✨期待您的三连✨ ​ ​​​ 1. 领域简介&#xff1a;驾驶员分心检测的意义与挑战 驾驶员分心检测是智能驾驶安全领域的重要研究方向。据统计&#xff0c;全球每…

scoop退回软件版本的方法

title: scoop退回软件版本的方法 date: 2025-3-11 23:53:00 tags: 其他 前言 在软件更新后&#xff0c;如果出现了很影响使用体验的问题&#xff0c;那么可以把软件先退回以前的版本进行使用&#xff0c; 但是scoop本身并没有提供直接让软件回退版本的功能&#xff0c;因此…

OpenRewrite配方之import语句的顺序——org.openrewrite.java.OrderImports

org.openrewrite.java.OrderImports 是 OpenRewrite 工具库中的一个重要规则(Recipe),专为 Java 项目设计,用于自动化调整 import 语句的顺序,使其符合预定义的代码规范。从而提高代码的一致性和可读性。 核心功能 排序规则: 静态导入优先:默认将静态导入(import stati…

搭建活动报名新神器

用户痛点 以往&#xff0c;依靠传统的手动报名方式&#xff0c;像 Excel 表格登记或者邮件收集信息&#xff0c;在活动规模较小时或许还能应付。可一旦参与人数增多&#xff0c;问题就接踵而至&#xff1a;信息分散在不同文档和邮件中&#xff0c;难以集中管理&#xff1b;人工…

MySQL增删改查操作 -- CRUD

个人主页&#xff1a;顾漂亮 目录 1.CRUD简介 2.Create新增 使用示例&#xff1a; 注意点&#xff1a; 3.Retrieve检索 使用示例&#xff1a; 注意点&#xff1a; 4.where条件查询 前置知识&#xff1a;-- 运算符 比较运算符 使用示例&#xff1a; 注意点&#xf…

设计模式C++

针对一些经典的常见的场景, 给定了一些对应的解决方案&#xff0c;这个就叫设计模式。 设计模式的作用&#xff1a;使代码的可重用性高&#xff0c;可读性强&#xff0c;灵活性好&#xff0c;可维护性强。 设计原则&#xff1a; 单一职责原则&#xff1a;一个类只做一方面的…

STM32上实现简化版的AUTOSAR DEM模块

文章目录 摘要摘要 在一些可以不使用AUTOSAR的项目中,往往也有故障检测和DTC存储的需求,开发一套类似于AUTOSAR DEM模块的软件代码,能够满足DTC的检出和存储,使用FalshDB代替Nvm模块,轻松构建持久化存储,如果你也有这样的需求,请阅读本篇,希望能够帮到你。 /*********…

html css网页制作成品——糖果屋网页设计(4页)附源码

目录 一、&#x1f468;‍&#x1f393;网站题目 二、✍️网站描述 三、&#x1f4da;网站介绍 四、&#x1f310;网站效果 五、&#x1fa93; 代码实现 &#x1f9f1;HTML 六、&#x1f947; 如何让学习不再盲目 七、&#x1f381;更多干货 一、&#x1f468;‍&#x1f…

Postman下载安装及简单入门

一&#xff0e;Postman简介 Postman是一款API测试工具&#xff0c;可以帮助开发、测试人员发送HTTP请求&#xff0c;与各种API进行交互&#xff0c;并分析响应 二&#xff0e;下载与安装 访问Postman官网&#xff08;https://www.postman.com/&#xff09;&#xff0c;下载适…

免费blender模型网站推荐

前言:博主最近在玩blender建模,有时为了节省时间想用现成的模型,网上零零碎碎的大多多需要付费,自己找了些好用且免费的blender素材库网站,希望对你有帮助 综合资源网站 Blender布的 网址:https://blenderco.cn/ 简介:提供上万个Blender模型、插件、贴图资源,更新频率高…

基于C语言的简单HTTP Web服务器实现

1. 概述 本案例使用C语言实现了一个简单的HTTP服务器&#xff0c;能够处理客户端的GET请求&#xff0c;并返回静态文件&#xff08;如HTML、图片等&#xff09;。在此案例中案例&#xff0c;我们主要使用的知识点有&#xff1a; Socket编程&#xff1a;基于TCP协议的Socket通信…

大型语言模型与强化学习的融合:迈向通用人工智能的新范式

1. 引言 大型语言模型&#xff08;LLM&#xff09;在自然语言处理领域的突破&#xff0c;展现了强大的知识存储、推理和生成能力&#xff0c;为人工智能带来了新的可能性。强化学习&#xff08;RL&#xff09;作为一种通过与环境交互学习最优策略的方法&#xff0c;在智能体训…

langchain--LCEL

文章目录 介绍优势运行接口 介绍 LCEL的全称是Lang Chain Expression Language。其实他的用处就是使用“|”运算符链接LangChain应用的各个组件。 是一种声明式的方法来链接Langchain组件。LCEL从第一天起就被设计为支持将原型投入生产&#xff0c;无需代码更改&#xff0c;从…

PyQt基础——简单的窗口化界面搭建以及槽函数跳转

一、代码实现 import sysfrom PyQt6.QtGui import QPixmap from PyQt6.QtWidgets import QApplication, QWidget, QPushButton, QLabel, QLineEdit, QMessageBox from PyQt6.uic import loadUi from PyQt6.QtCore import Qtclass LoginWindow(QWidget):def __init__(self):sup…