簡介
最近翻到了吃灰已久的泰山派,是剛出來的時候用優惠券買的,當時價格挺便宜的,最近給它翻出來了,打算試試做個項目。買的泰山派容量是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下進行固件的燒錄。