泰山派開發之—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.pswp.cn/bicheng/73277.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/73277.shtml
英文地址,請注明出處:http://en.pswp.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…