跟思兼學(xué)Klipper(37) M8P v2.0+CB2/BTTPi2 新版系統(tǒng)使用簡(jiǎn)明指南
前言
原創(chuàng)文章,轉(zhuǎn)載引用務(wù)必注明鏈接,水平有限,如有疏漏,歡迎指正交流。
文章如有更新請(qǐng)?jiān)L問(wèn) DFRobot 社區(qū)及 cnblogs 博客園,前者內(nèi)容較全,后者排版及閱讀體驗(yàn)更佳。
感謝必趣科技(Bigtreetech)和魔核科技(MagicMaker)的硬件贊助。后來(lái)才知道很多人的入門(mén)打印機(jī)小魯班也是魔核出品的,接觸下來(lái)魔核的老板做事很?chē)?yán)謹(jǐn),比如 OrcaSlicer 唯一的 PEEK 打印參數(shù),點(diǎn)個(gè)贊。
最近必趣更新了 CB2/BTTPi2 的操作系統(tǒng),提升很大。趁著準(zhǔn)備給魔核科技的 黑爵士UM2 打印機(jī)升級(jí),就寫(xiě)一下相關(guān)教程。我個(gè)人從第一臺(tái) Anet A8 開(kāi)始,已經(jīng)購(gòu)買(mǎi)、玩過(guò) 20 余臺(tái)不同型號(hào)的 3D 打印機(jī),其中尤其喜歡 UM2 架構(gòu)的打印機(jī),之前調(diào)教的最好的一臺(tái)就是珍妮(JennyPrinter)的 Z370,不過(guò)拆裝一次之后,鋁塑板變形,就很是頭疼。不過(guò)這臺(tái)黑爵士采用同步帶 Z,全金屬結(jié)構(gòu)件,真是一機(jī)傳三代,人走機(jī)還在。本著好馬配好鞍的原則,心頭好 UM2 就要配頂級(jí)的 Manta M8P v2(STM32F723)+ 頂級(jí)的 CB2 上位機(jī)模塊,至于性能配置是否冗余,可以不用,但不能沒(méi)有。不過(guò) CB2 之前的操作系統(tǒng)不太好用,所以一直沒(méi)做介紹。這次趁著更新契機(jī),將一些內(nèi)容整合分享如下。未來(lái)計(jì)劃更新 《2025 版 Klipper 攝像頭不完全使用指南》,拭目以待。
本文涉及的內(nèi)容:
- Manta M8P v2 + CB2 使用基本步驟
- CB2 新的 UMS 模式介紹
- 編譯使用 ffmpeg-rkmpp 調(diào)用 GPU 實(shí)現(xiàn)硬件加速視頻渲染(修改 timelapse 組件)
- 使用 panfrost 顯卡驅(qū)動(dòng)來(lái)直接渲染 KlipperScreen 界面,降低 CPU 占用
硬件列表:
- BTT Manta M8P v2.0
- 必趣 TFT 35_SPI v2.1
- 微雪 HDMI TouchScreen
- DFRobot DSI 樹(shù)莓派觸摸屏
其他一些注意點(diǎn):
- 【更新】M8P v2.0/CB2 相關(guān)文檔未及時(shí)更新,請(qǐng)參考 BTTPi2 文檔
- 【勘誤】CB2 燒錄系統(tǒng)到 eMMC 后,需要將 3/4 撥碼都會(huì)到 OFF 才會(huì)啟動(dòng),而不是僅 3 。
- 【建議】Manta M8P v2,overlays 選 HDMI-1,結(jié)果要插插 HDMI-0 接口,希望必趣能統(tǒng)一從 0 還是從 1 數(shù)數(shù)
- 【TODO】當(dāng)前系統(tǒng)點(diǎn)亮 DFRobot DSI 樹(shù)莓派屏之后,幾秒后會(huì)關(guān)閉背光
- 【更新】新版 Klipper 目前已支持 STM32H723 運(yùn)行在 520Mhz 主頻模式下,既往 H723/H743/H750 雖然支持但最高只能運(yùn)行在 400Mhz 模式下(后兩者目前依然如此)。
一、使用新版系統(tǒng)
1.1 新版系統(tǒng)的亮點(diǎn):
- 新增 UMS 模式,支持將 eMMC 掛載為移動(dòng)存儲(chǔ)模式
- 內(nèi)核大更新:4.19 ——> 6.1
- 支持調(diào)用 RKMPP 加速視頻圖像處理
- 支持調(diào)用 RKNPU 神經(jīng)網(wǎng)絡(luò)處理單元
- 支持 GPU Panfrost 驅(qū)動(dòng)
- 支持 imx219 和 ov5647 樹(shù)莓派攝像頭
- 支持樹(shù)莓派 DSI 屏
- 支持從 M.2 NVME 固態(tài)硬盤(pán)啟動(dòng)
1.2 產(chǎn)品特點(diǎn)
- CPU: 瑞芯微 RK3566,四核 Cortex-A55 @1.8GHz
- GPU: Mali-G52 1-Core-2EE
- NPU: 0.8 TOPS NPU
- RAM: 2GB LPDDR4
- 32GB 板載 EMMC 存儲(chǔ)
- 支持樹(shù)莓派 DSI/CSI 攝像頭、顯示器,性能更好、價(jià)格便宜
- PCIe 2.1 1x1 支持 M.2 固態(tài)硬盤(pán)啟動(dòng)
- 千兆以太網(wǎng)
- 博通 433Mbps WiFi + BT5.0 無(wú)線模塊
- 40-pin GPIO
- 與樹(shù)莓派 CM4 完全相同的 BTB 座子
市面上常見(jiàn) 3D 打印機(jī)上位機(jī) CPU 對(duì)比:
| 處理器型號(hào) | CPU架構(gòu) | 核心數(shù) | 主頻 | GPU | 性能跑分 | 備注 |
|---|---|---|---|---|---|---|
| RK3566 | Cortex-A55 | 4 | 最高1.8GHz | Mali-G52 2EE | 61 026 | 內(nèi)置NPU,支持硬件編解碼 |
| H616 | Cortex-A53 | 4 | 最高1.5GHz | Mali-G31 MP2 | 40 029 | |
| RK3328 | Cortex-A53 | 4 | 最高1.5GHz | Mali-450 MP2 | 34 413 | |
| H5 | Cortex-A53 | 4 | 最高1.5GHz | Mali-450 MP6 | 25 273 | |
| H3 | Cortex-A7 | 4 | 最高1.2GHz | Mali-400 MP2 | 16 424 | 32位處理器 |
- 取 AnTuTu 綜合評(píng)分,數(shù)據(jù)來(lái)自 https://gadgetversus.com/processor/
1.1 BTTPi2 燒錄新版系統(tǒng)(簡(jiǎn)介)
Pi2 主要區(qū)別是進(jìn)入 Recovery 模式的撥碼,如下圖所示:

按住 Recovery 鍵通過(guò) TypeC 數(shù)據(jù)線連接電腦即可。
另一個(gè)區(qū)別是支持 M.2 接口,從而支持一系列外設(shè)和固態(tài)硬盤(pán)啟動(dòng)。同時(shí)其優(yōu)秀的編解碼能力,也可以做一臺(tái) Jellyfin 影音服務(wù)器,具體可以查看 UP 主 索拉里斯風(fēng) 的視頻:《激動(dòng)啊!Arm設(shè)備真的可以jellyfin轉(zhuǎn)碼了,功耗低超級(jí)低。性能很驚喜。》
1.2 M8P v2.0 使用新版系統(tǒng)
此主板延續(xù)了必趣一貫的大而全的特點(diǎn),是一款非常優(yōu)秀的二合一主板,其基礎(chǔ)操作參考 官方文檔。本著一文搞定的原則,簡(jiǎn)述相關(guān)步驟如下。
1.2.1 軟件系統(tǒng)準(zhǔn)備
- 操作系統(tǒng)下載地址 https://github.com/bigtreetech/CB2 ,當(dāng)前(2025年7月19日)最新版本是 V3.0.2 ,下載
CB2_Debian12_Klipper_kernel6.1_20250529_without_obico.img.xz解壓縮到合適位置,得到 img 系統(tǒng)鏡像文件。 - 燒錄工具下載:從上述倉(cāng)庫(kù)下載專(zhuān)用版 RKDevTool.zip,解壓到合適目錄
- 從上述燒錄工具包中使用 DriverAssitant_v5.12 先卸載再安裝驅(qū)動(dòng)
1.2.2 CB2 進(jìn)入燒錄模式并燒錄系統(tǒng)到 eMMC
CB2 和 Pi2 進(jìn)入 Recovery 模式撥碼位置不同,可以如下理解:
The
RPIBOOTis theRecoverybutton on PI2The
USBOTGis theOTGon PI2The button on CB2 is the
eMMC-ENon PI2
具體步驟:
- 移除 microSD 卡
- 將 TypeC 接口旁邊的 2P 排針使用跳帽短接,從而使能 USB 供電,此時(shí)無(wú)需連接 24V 供電。
- 將 4P 撥碼開(kāi)關(guān)的 3(RPIBOOT) 和 4(USBOTG) 調(diào)節(jié)到 ON 位置,1、2 保持 OFF
- 使用 TypeC 數(shù)據(jù)線連接 M8P 到電腦
- 電腦打開(kāi) RKDevTool,更改、選擇剛下載的鏡像
- 如圖設(shè)置,并點(diǎn)擊 RUN 開(kāi)始燒錄



1.2.3 UMS/MSC 模式
這個(gè)改動(dòng)太重要了,可以直接修改配置文件
若 eMMC 中已經(jīng)燒錄過(guò) V3.0.1及其之后版本的系統(tǒng),電腦會(huì)將 eMMC 識(shí)別為 MSC 設(shè)備(類(lèi)似U盤(pán)一樣的設(shè)備)。UMS模式相對(duì)于Loader模式有以下好處:
- 可以直接修改 /boot/ 分區(qū)中的配置信息【配網(wǎng)終于不再反人類(lèi)了】
- 可以直接像 Micro SD 卡那樣,直接燒錄系統(tǒng)到eMMC 【雖然速度變慢了】
- 可以通過(guò)軟件擦除 eMMC 中的所有內(nèi)容
不過(guò)仍有幾點(diǎn)需要注意:
- 后續(xù)想要重新燒錄系統(tǒng),調(diào)節(jié)撥碼后無(wú)法再使用 RKDevTool,而是和 microSD 卡相同,使用 USBImager 燒錄,速度較之前速度慢不少。
- 使用 USBImager 等工具燒錄系統(tǒng)前,可能需要使用 sdformater 格式化兩次,啟用邏輯大小調(diào)整。
- 想要進(jìn)入 loader 模式,需要在 Linux 下操作,手動(dòng)關(guān)閉 MSC 磁盤(pán)模式,再使用命令進(jìn)入 Loader 模式
- 燒錄新版系統(tǒng)后會(huì)自動(dòng)啟動(dòng)進(jìn)入 MSC 模式,此時(shí)會(huì)在系統(tǒng)中顯示
boot磁盤(pán)分區(qū),我們可以打開(kāi)并修改 armbianEnv.txt 和 system.cfg 文件。 - 彈出磁盤(pán),將 3/4 撥碼撥回 OFF,重新插電即可正常啟動(dòng)。【這里 CB2 官方文檔有誤且未更新 UMS 模式內(nèi)容,需要查閱 BTTPi2 文檔】
二、使用觸摸屏
2.1 TFT35 SPI V2.1 觸摸屏

本次使用的是 SPI 顯示觸摸屏(BTTPi2 無(wú)此接口),畢竟一線連,比 HDMI 接線簡(jiǎn)單,但隨著新版系統(tǒng)也支持樹(shù)莓派 DSI 屏,由此除了價(jià)格便無(wú)更多優(yōu)勢(shì)。不過(guò)未來(lái)可能會(huì)升級(jí) DSI 屏。注意此 FPC 排線的規(guī)格是:9P 1.0 間距 反向,長(zhǎng)度選擇 15cm 及以上。
2.1.1 啟用 TFT35_SPI 屏
修改 /boot 內(nèi)的配置文件,可以在上文燒錄好 eMMC 系統(tǒng)后使用 UMS 模式直接修改
- system.cfg,使能 TFT35_SPI,并設(shè)置網(wǎng)絡(luò)
- hostname
- TimeZone
- ks_src=‘FBTFT’
- WIFI_SSID
- WIFI_PASSWD
- armbianEnv.txt,啟用 spi 屏,設(shè)置屏幕旋轉(zhuǎn)
- overlays=tft35_spi
- rotation
注意:
- ks_rotation 無(wú)法影響 tft35_spi,需要在 armbianEnv.txt 修改
2.1.2 SPI 屏翻轉(zhuǎn)+觸摸校準(zhǔn)
由于我要翻轉(zhuǎn)顯示使用,但是不想重新布線,物理調(diào)整方向,則需要修改上文提到的 armbianEnv.txt 中的 spi rotation 參數(shù),改為旋轉(zhuǎn) 180 度。
除此之外我們發(fā)現(xiàn)觸摸不正確,需要進(jìn)行校準(zhǔn),步驟如下:
# https://bttwiki.com/libinput_calibration.html#install-xinput_calibrator
sudo sed -i 's/deb.debian.org/mirrors.ustc.edu.cn/g' /etc/apt/sources.list.d/debian.sources
sudo sed -i 's|security.debian.org|mirrors.ustc.edu.cn/debian-security|g' /etc/apt/sources.list.d/debian.sources
sudo sed -i 's|apt.armbian.com|mirrors.ustc.edu.cn/armbian|g' /etc/apt/sources.list.d/armbian.sources
sudo sed -i 's|github|cors.isteed.cc/https://github|g' /etc/apt/sources.list.d/armbian-config.sources
sudo rm /etc/pip.conf > /dev/null 2>&1
mkdir -p $HOME/.config/pip
cat << _EOF_ > $HOME/.config/pip/pip.conf
[global]
index-url=https://pypi.tuna.tsinghua.edu.cn/simple
# index-url=https://mirrors.aliyun.com/pypi/simple/
# extra-index-url=https://www.piwheels.org/simple
timeout = 600
_EOF_
gh_proxy=cors.isteed.cc
cat << _EOF_ > $HOME/.gitconfig
[url "https://${gh_proxy}/https://github.com/"]
#[url "https://hub.0z.gs/"]
insteadOf = https://github.com/
_EOF_
sudo apt update
sudo apt install xinput-calibrator fonts-wqy-zenhei
DISPLAY=:0 xinput_calibrator --list
DISPLAY=:0 xinput_calibrator -v --device <id>
# 創(chuàng)建 libinput 坐標(biāo)轉(zhuǎn)換腳本
cat << _EOF_ > $HOME/libinput_calibrator.sh
#!/bin/bash
#according to https://wiki.archlinux.org/title/Talk:Calibrating_Touchscreen#Libinput%5Fbreaks%5Fxinput%5Fcalibrator
screen_width=$1
screen_height=$2
click_0_X=$3
click_0_Y=$4
click_3_X=$5
click_3_Y=$6
re='^[0-9]+$'
if ! [[ $screen_width =~ $re ]] ; then
echo "error: screen_width=\"$screen_width\" Not a number" >&2; exit 1
fi
if ! [[ $screen_height =~ $re ]] ; then
echo "error: screen_height=\"$screen_height\" Not a number" >&2; exit 1
fi
if ! [[ $click_0_X =~ $re ]] ; then
echo "error: click_0_X=\"$click_0_X\" Not a number" >&2; exit 1
fi
if ! [[ $click_0_Y =~ $re ]] ; then
echo "error: click_0_Y=\"$click_0_Y\" Not a number" >&2; exit 1
fi
if ! [[ $click_3_X =~ $re ]] ; then
echo "error: click_3_X=\"$click_3_X\" Not a number" >&2; exit 1
fi
if ! [[ $click_3_Y =~ $re ]] ; then
echo "error: click_3_Y=\"$click_3_Y\" Not a number" >&2; exit 1
fi
#a = (screen_width * 6 / 8) / (click_3_X - click_0_X)
#c = ((screen_width / 8) - (a * click_0_X)) / screen_width
#e = (screen_height * 6 / 8) / (click_3_Y - click_0_Y)
#f = ((screen_height / 8) - (e * click_0_Y)) / screen_height
a=$(awk "BEGIN { printf(\"%.6f\", ($screen_width * 6 / 8) / ($click_3_X - $click_0_X))}")
c=$(awk "BEGIN { printf(\"%.6f\", (($screen_width / 8) - ($a * $click_0_X)) / $screen_width)}")
e=$(awk "BEGIN { printf(\"%.6f\", ($screen_height * 6 / 8) / ($click_3_Y - $click_0_Y))}")
f=$(awk "BEGIN { printf(\"%.6f\", (($screen_height / 8) - ($e * $click_0_Y)) / $screen_height)}")
CONFIG_OPTION="Option \"CalibrationMatrix\" "
CONFIG_LINE="\"$a 0.000000 $c 0.000000 $e $f 0.000000 0.000000 1.000000\""
echo "${CONFIG_OPTION}${CONFIG_LINE}"
echo ""
CONFIG_OPTION="Option \"CalibrationMatrix\" "
CONFIG="/usr/share/X11/xorg.conf.d/40-libinput.conf"
INPUT_CLASS="Identifier \"libinput touchscreen catchall\""
if [ -e "${CONFIG}" ]; then
ks_restart=0
grep -e "^\ ${CONFIG_OPTION}${CONFIG_LINE}" ${CONFIG} > /dev/null
STATUS=$?
if [ $STATUS -eq 1 ]; then
sudo sed -i "/${CONFIG_OPTION}/d" ${CONFIG}
sudo sed -i "/${INPUT_CLASS}/a\ ${CONFIG_OPTION}${CONFIG_LINE}" ${CONFIG}
echo "Written to file:"
echo " ${CONFIG}"
echo ""
ks_restart=1
fi
# restart KlipperScreen
if [ ${ks_restart} -eq 1 ];then
sudo service KlipperScreen restart
fi
echo "run:"
echo " DISPLAY=:0 xinput list-props <device>"
echo "to check if the calibration parameters are effective"
echo ""
fi
_EOF_
chmod +x libinput_calibrator.sh
# 執(zhí)行坐標(biāo)轉(zhuǎn)換并自動(dòng)生效
sudo ./libinput_calibrator.sh 480 320 <click_0 X> <click_0 Y> <click_3 X> <click_3 Y>
# 重啟 KlipperScreen 驗(yàn)證
sudo systemctl restart KlipperScreen
2.2 HDMI 屏幕啟用 GPU 直接渲染
SPI 屏幕使用 CPU 進(jìn)行軟件渲染,無(wú) GPU 加速,所以界面渲染會(huì)增加 CPU 負(fù)載。但是 HDMI 和 DSI 屏幕是可以使用 GPU 直接渲染 KlipperScreen 圖形界面,但是系統(tǒng)默認(rèn)沒(méi)有啟用,需要進(jìn)行如下設(shè)置:
# 1. 查看顯卡
cat /sys/class/drm/card*/device/modalias
of:NnpuT(null)Crockchip,rk3568-rknpuCrockchip,rknpu
of:NgpuT(null)Carm,mali-bifrost
# 2. 安裝驅(qū)動(dòng)
sudo apt install mesa-utils libgl1-mesa-dri
# 3. 檢查內(nèi)核模塊
lsmod | grep panfrost
# 4. 驗(yàn)證是否啟用 GPU 直接渲染圖形界面
DISPLAY=:0 glxinfo | grep -i "renderer\|vendor"
## 或者
DISPLAY=:0 screenfetch
## 顯示 GPU: llvmpipe (LLVM 15.0.6, 128 bits) 則代表占用 CPU 進(jìn)行軟件渲染
## 顯示 OpenGL renderer string: Mali-G52 r1 (Panfrost) 則代表使用硬件渲染
# 5. 日志查看
less /var/log/Xorg.0.log
# 6. 啟用 GPU 硬件渲染并重啟 KlipperScreen 生效
sudo tee /etc/X11/xorg.conf.d/20-panfrost.conf > /dev/null <<EOF
Section "Device"
Identifier "Panfrost"
Driver "modesetting"
EndSection
EOF
sudo systemctl restart KlipperScreen.service
- 注意 Manta M8P v2,overlays 選 HDMI-1,插 HDMI-0 接口
2.3 使用樹(shù)莓派 DSI 屏
新版系統(tǒng)支持樹(shù)莓派 DSI 屏,正好手頭有一塊,插電開(kāi)機(jī)后,屏幕顯示幾秒后會(huì)背光熄滅(evtest 可以看到觸摸正常),dmesg 及 sudo less /sys/kernel/debug/regulator/regulator_summary 可以看到 tcs4525/tc358762-power 負(fù)責(zé)背光的電源關(guān)閉了,應(yīng)該和 /boot/dtb/rockchip/rk3566-bigtreetech-cb2-2.dtb 有關(guān),具體已反饋工程師。
三、使用 ffmpeg-rkmpp 實(shí)現(xiàn)硬件編解碼
大家使用 timelapse 組件時(shí),大多數(shù)情況是使用 CPU 來(lái)渲染生成視頻,速度慢且占用大量 CPU 資源。目前常用的支持硬件編解碼的手段為 x86 的 vaapi、樹(shù)莓派的 h264_v4l2m2m、Rockchip 的 rkmpp。
參考相關(guān)文檔:https://github.com/nyanmisaka/ffmpeg-rockchip/wiki/Compilation,需要先后編譯組件。
# 編譯 rkmpp/rkrga/ffmpeg-rkmpp(略,看上面文檔鏈接)
# 渲染視頻測(cè)試
time ffmpeg -r 25 -i /home/biqu/pics/printer/frame%6d.jpg -c:v h264_rkmpp -pix_fmt yuv420p -b:v 2M hardware_h264.mp4
time ffmpeg -r 25 -i /home/biqu/pics/printer/frame%6d.jpg -c:v hevc_rkmpp -pix_fmt yuv420p -b:v 2M hardware_hevc.mp4
time ffmpeg -r 25 -i /home/biqu/pics/printer/frame%6d.jpg -c:v libx264 -preset medium -crf 23 -pix_fmt yuv420p soft.mp4
默認(rèn)未編譯 libx264,因此無(wú)法使用 CPU 來(lái)渲染視頻,當(dāng)前場(chǎng)景下也不需要,如果想要支持此功能,可以編譯 ffmpeg 時(shí)添加 --enable-libx264 來(lái)啟用。
【推薦】直接下載預(yù)編譯好的 ffmepg-rkmpp
由于想要啟用 rkmpp 需要使用 rockchip 官方的內(nèi)核,最新的是 6.1,所以我們也可以下載預(yù)編譯的 ffmpeg-rkmpp deb 包,地址如下:
https://github.com/MarcA711/Rockchip-FFmpeg-Builds/releases
由于 ffmpeg 編譯需要很長(zhǎng)時(shí)間,這種預(yù)編譯的包無(wú)疑非常棒。
四、使能 timelapse 組件支持硬件加速
組件地址:https://github.com/mainsail-crew/moonraker-timelapse,此組件不再更新,但是很多 PR 很有意思,可以關(guān)注。
也可以關(guān)注 https://useful-forks.github.io/?repo=mainsail-crew/moonraker-timelapse,如:
這里我參考第一個(gè)鏈接,支持自定義參數(shù)配置,默認(rèn)使用 libx264。同時(shí)修改配置文件。
$ diff timelapse.py timelapse_ori.py
90d89
< 'vcodec': "libx264",
691c690
< + " -vcodec " + self.config['vcodec'] \
---
> + " -vcodec libx264" \
# 修改 moonraker.cfg, 指定編碼器
[timelapse]
## x86
# vcodec: h264_vaapi
# extraoutputparams: -vaapi_device /dev/dri/renderD128 -vf 'format=nv12,hwupload'
## Rockchip rkmpp, 支持 h264 或 h265(hevc)
vcodec: hevc_rkmpp
extraoutputparams: -r 30 -pix_fmt yuv420p -b:v 2M
# 720p 2M, 1080p 4~8M
# -vf format=yuv420p 取代
注意:
- 如果視頻主要用于社交媒體分享,YUV420P通常是一個(gè)不錯(cuò)的選擇,因?yàn)樗趬嚎s和質(zhì)量之間取得了良好的平衡。
- 如果視頻用于專(zhuān)業(yè)展示或分析,可能需要選擇YUV422P或RGB24,以確保更高的色彩精度和細(xì)節(jié)。
- 更多 Rockchip 硬件加速和視頻格式支持情況的信息,可以關(guān)注 Jellyfin 官方文檔
總結(jié)
本來(lái)想寫(xiě) go2rtc 調(diào)用 ffmpeg-rkmpp 的內(nèi)容,留在攝像頭文章里吧,還要再學(xué)習(xí)學(xué)習(xí)。


浙公網(wǎng)安備 33010602011771號(hào)