当前位置: 首页 > article >正文

泰山派开发之—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下进行固件的烧录。

相关文章:

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

简介 最近翻到了吃灰已久的泰山派,是刚出来的时候用优惠券买的,当时价格挺便宜的,最近给它翻出来了,打算试试做个项目。买的泰山派容量是2G16G,SOC芯片使用的是RK3566,搭载1TOP算力的NPU,并且具…...

哈尔滨算力服务器托管推荐-青蛙云

哈尔滨年平均气温3.5摄氏度,有发展云计算和算力数据中心的天然优势 ,今天为哈尔滨算力服务器托管服务商:青蛙云,黑龙江经营17年的老牌IDC服务商。 先来了解下算力服务器: 算力服务器,尤其是那些用于运行人…...

openharmony体验

openharmony5 去年已经出来了 如果以前做过android开发的,学起来不难,关键 1:环境 DevEco Studio 5.0.3 Beta2 https://developer.huawei.com/consumer/cn/deveco-studio/ win10_64bit CPU amd64(不是arm的) 2:安装 执行EXE 安装就行&#x…...

[Ai 力扣题单] 数组基本操作篇 27/704/344/386

题单分类:DeepSeek刷力扣辅助题单 存留记录-CSDN博客 27 27. 移除元素 - 力扣(LeetCode) 这道题就一个点 1.数组在内存上连续 所以要么赋值覆盖,要么移动覆盖,但是它要求了前 k 个元素 所以只能移动覆盖 所以我有了如下思考过程: 3223 , 3举例 如果是…...

⭐算法OJ⭐汉明距离【位操作】(C++ 实现)Hamming Distance

Hamming Distance(汉明距离)是用于衡量两个等长字符串在相同位置上不同字符的个数的度量。它通常用于比较两个二进制字符串或编码序列的差异。 定义 给定两个长度相同的字符串 A A A 和 B B B,它们的汉明距离 D ( A , B ) D(A,B) D(A,B)…...

了解一下HTTP的短连接和长连接

在 HTTP 协议中,连接的方式主要分为长连接和短连接。这两种连接方式的主要区别在于连接的生命周期和数据传输的效率。理解它们的差异对于优化 Web 应用的性能和资源利用至关重要。以下是 HTTP 长连接和短连接的详细解释。 1. 短连接(HTTP/1.0&#xff0…...

蓝桥杯刷题 Day1 高精度加法

蓝桥杯刷题 Day1 提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 蓝桥杯刷题 Day1前言一、大数加法1. 解题思路2. 代码2.1主函数2.2 去除前导02.3 大数相加2.4 完整代码 二、KMP字符串匹配0. 知识点速记1. 解题思路…...

大语言模型的潜力是否被高估

关于大语言模型(LLM)的潜力是否被高估,目前学术界和产业界存在显著分歧。以下从技术能力、应用局限性和未来发展方向三个方面综合分析: 一、技术能力的争议:潜力与局限并存 对现实世界的理解与模拟 MIT的研究表明…...

Linux入门 全面整理终端 Bash、Vim 基础命令速记

Linux入门 2025 超详细全面整理 Bash、Vim 基础命令速记 刚面对高级感满满的 终端窗口是不是有点懵?于是乎,这份手册就是为你准备的高效学习指南!我把那些让人头大的系统设置、记不住的命令都整理成了对你更友好的格式,让你快速学…...

AI智能代码疫苗技术,赋能数字化应用内生安全自免疫

“DevSecOps市占率持续领先,IAST探针覆盖率十倍增长,代码疫苗技术已成功帮助上千家行业用户成功抵御‘Log4j2.x’等重大未知漏洞的利用攻击。”子芽在腾讯专访中透露。 这是2021年悬镜安全交出的一张成绩单。悬镜安全是DevSecOps敏捷安全先行者&#xf…...

《SQL性能优化指南:新手如何写出高效的数据库查询

新手程序员如何用三个月成为SQL高手?万字自学指南带你弯道超车 在数据为王的时代,掌握SQL已成为职场新人的必修课。你可能不知道,仅用三个月系统学习,一个零基础的小白就能完成从数据库萌新到SQL达人的蜕变。去年刚毕业的小王就是…...

【PyMySQL】Python操作MySQL

1、安装pymysql pip install pymysql2、导包 import pymysql3、连接MySQL数据库 db pymysql.connect(hostlocalhost # 本地localhost,或服务器IP地址,userroot # 用户名,passwordpassword # 密码,databasemysql) #数据库名4、创建游标 cursor db.cursor()5、增…...

使用RabbitMQ实现流量削峰填谷

原理 流量削峰填谷是指在面对突发的高流量时,通过消息队列将瞬时大量请求暂时存储起来,并逐步处理这些请求,从而避免系统过载。RabbitMQ 作为消息中间件可以很好地支持这一需求,特别是结合其延时消息插件(rabbitmq_de…...

【TES817】基于XCZU19EG FPGA的高性能实时信号处理平台

板卡概述 TES817是一款基于ZU19EG FPGA的高性能实时信号处理平台,该平台采用1片高性能的FPGA:XCZU19EG-2FFVC1760I作为主处理器,FPGA的PL端外挂1组72位DDR4 SDRAM,用来实现超大容量数据缓存,FPGA的PS端外挂1组72位的D…...

Python 进程与线程-分布式进程

目录 分布式进程 小结 分布式进程 在Thread和Process中,应当优选Process,因为Process更稳定,而且,Process可以分布到多台机器上,而Thread最多只能分布到同一台机器的多个CPU上。 Python的multiprocessing模块不但支…...

OpenCV实现视频背景提取

在计算机视觉领域,背景减除(Background Subtraction)是一种常用的技术,用于从视频序列中提取前景对象。 背景减除的核心思想是通过建模背景,然后将当前帧与背景模型进行比较,从而分离出前景对象。 OpenCV…...

初阶数据结构(C语言实现)——5.2 二叉树的顺序结构及堆的实现

1.二叉树的顺序结构及实现 1.1 二叉树的顺序结构 普通的二叉树是不适合用数组来存储的,因为可能会存在大量的空间浪费。而完全二叉树更适合使用顺序结构存储。现实中我们通常把堆(一种二叉树)使用顺序结构的数组来存储,需要注意的是这里的堆和操作系统…...

深度学习篇---Opencv中Haar级联分类器的自定义

文章目录 1. 准备工作1.1安装 OpenCV1.2准备数据集1.2.1正样本1.2.2负样本 2. 数据准备2.1 正样本的准备2.1.1步骤2.1.2生成正样本描述文件2.1.3示例命令2.1.4正样本描述文件格式 2.2 负样本的准备2.2.1步骤2.2.2负样本描述文件格式 3. 训练分类器3.1命令格式3.2参数说明 4. 训…...

ArcGIS Pro 车牌分区数据处理与地图制作全攻略

在大数据时代,地理信息系统(GIS)技术在各个领域都有着广泛的应用,而 ArcGIS Pro 作为一款功能强大的 GIS 软件,为数据处理和地图制作提供了丰富的工具和便捷的操作流程。 车牌数据作为一种重要的地理空间数据&#xf…...

文件解析漏洞靶场通关合集

一、IIS解析漏洞 &#xff08;一&#xff09;iis6的目录解析漏洞(.asp目录中的所有文件都会被当做asp文件执行) 第一步&#xff1a;在网站根目录下创建了一个x.asp文件夹&#xff0c;并在文件夹中创建一个名为1.txt的文本文档 第二步&#xff1a;文本文档中输入<% now()%&…...

塔能IVO-SCY智能机箱:点亮智慧城市的电力“智慧核芯”

在智慧城市建设的宏大征程中&#xff0c;稳定且智能的电力供应犹如坚固基石&#xff0c;支撑着各类设备高效、稳定地运行。塔能科技的IVO-SCY智能机箱&#xff0c;凭借其卓越的电源管理系统&#xff0c;当之无愧地成为了整个智慧城市电力保障体系中的“智慧心脏”&#xff0c;源…...

【Oracle】19c数据库控制文件多路径配置

一、关闭数据库&#xff08;2个节点实例都要关闭&#xff09; srvctl stop database -d ora19c 二、多路径控制文件 打开其中一个节点到nomount状态 sqlplus / as sysdba startup nomount; [oracleora19c1:/home/oracle]$ rman target / RMAN> restore controlfile to…...

深度解析前端页面性能优化

1. 优化页面加载性能 1.1 减少 HTTP 请求 问题&#xff1a;过多的 HTTP 请求会增加页面加载时间。解决方案&#xff1a; 合并 CSS 和 JavaScript 文件。使用 CSS Sprites 合并小图标。使用字体图标&#xff08;如 Font Awesome&#xff09;代替图片图标。 代码示例&#xf…...

C#中类‌的核心定义

‌C# 类‌是面向对象编程&#xff08;OOP&#xff09;中的核心概念之一&#xff0c;用于定义对象的模板或蓝图&#xff0c;包含数据成员&#xff08;字段、属性&#xff09;和函数成员&#xff08;方法、事件等&#xff09;。类提供了封装机制&#xff0c;将数据和操作数据的方…...

Android Media3 ExoPlayer 开发全攻略:从基础集成到高级功能实战

目录 1. 引言 2. 添加依赖 3. 初始化ExoPlayer并播放视频 3.1 XML 布局 3.2 初始化ExoPlayer 4. 控制播放 5. 监听播放状态 6. 播放网络流&#xff08;HLS / DASH / RTSP&#xff09; 7. ExoPlayer 进阶 7.1 手动切换功能 7.2 DRM 保护 8. 释放播放器资源 9. 从旧…...

Trae与Builder模式初体验

说明 下载的国际版&#xff1a;https://www.trae.ai/ 建议 要选新模型 效果 还是挺不错的&#xff0c;遇到问题反馈一下&#xff0c;AI就帮忙解决了&#xff0c;真是动动嘴&#xff08;打打字就行了&#xff09;&#xff0c;做些小的原型效果或演示Demo很方便呀&#xff…...

鸿蒙编译框架插件HvigorPlugin接口的用法介绍

鸿蒙系统中HvigorPlugin接口实现自定义编译插件&#xff0c;实现编译前后自定义功能。 在鸿蒙&#xff08;HarmonyOS&#xff09;开发中&#xff0c;HvigorPlugin 是用于扩展 Hvigor 构建工具功能的接口。通过实现此接口&#xff0c;开发者可以自定义构建任务、修改构建流程或…...

如何通过修改hosts文件、启动Apache服务器、修改httpd.conf文件、配置虚拟主机、创建站点目录和文件等步骤来配置虚拟主机并发布PHP站点

Web服务器配置——修改hosts文件&#xff0c;将域名解析到本地 核心内容&#xff1a;介绍了如何通过修改hosts文件来实现将任意域名解析到本地&#xff0c;以便在开发过程中使用自定义域名访问本地站点。步骤&#xff1a; 打开位于C:\Windows\System32\drivers\etc的hosts文件…...

kotlin与MVVM的结合使用总结(二)

在 MVVM&#xff08;Model - View - ViewModel&#xff09;架构中&#xff0c;M 层即 Model 层&#xff0c;主要负责数据的管理、存储和获取&#xff0c;它与业务逻辑和数据处理相关。在 Kotlin 中实现 MVVM 的 M 层&#xff0c;通常会涉及数据类的定义、数据的本地存储与远程获…...

MOEFeedForward 模块

代码 class FeedForward(nn.Module):def __init__(self, config: LMConfig):super().__init__()if config.hidden_dim is None:hidden_dim 4 * config.dimhidden_dim int(2 * hidden_dim / 3)config.hidden_dim config.multiple_of * ((hidden_dim config.multiple_of - 1…...