跟思兼学Klipper(37) M8P v2.0+CB2/BTTPi2 新版系统使用简明指南
前言
原创文章,转载引用务必注明链接,水平有限,如有疏漏,欢迎指正交流。
文章如有更新请访问 DFRobot 社区及 cnblogs 博客园,前者内容较全,后者排版及阅读体验更佳。
感谢必趣科技(Bigtreetech)和魔核科技(MagicMaker)的硬件赞助。后来才知道很多人的入门打印机小鲁班也是魔核出品的,接触下来魔核的老板做事很严谨,比如 OrcaSlicer 唯一的 PEEK 打印参数,点个赞。
最近必趣更新了 CB2/BTTPi2 的操作系统,提升很大。趁着准备给魔核科技的 黑爵士UM2 打印机升级,就写一下相关教程。我个人从第一台 Anet A8 开始,已经购买、玩过 20 余台不同型号的 3D 打印机,其中尤其喜欢 UM2 架构的打印机,之前调教的最好的一台就是珍妮(JennyPrinter)的 Z370,不过拆装一次之后,铝塑板变形,就很是头疼。不过这台黑爵士采用同步带 Z,全金属结构件,真是一机传三代,人走机还在。本着好马配好鞍的原则,心头好 UM2 就要配顶级的 Manta M8P v2(STM32F723)+ 顶级的 CB2 上位机模块,至于性能配置是否冗余,可以不用,但不能没有。不过 CB2 之前的操作系统不太好用,所以一直没做介绍。这次趁着更新契机,将一些内容整合分享如下。未来计划更新 《2025 版 Klipper 摄像头不完全使用指南》,拭目以待。
本文涉及的内容:
- Manta M8P v2 + CB2 使用基本步骤
- CB2 新的 UMS 模式介绍
- 编译使用 ffmpeg-rkmpp 调用 GPU 实现硬件加速视频渲染(修改 timelapse 组件)
- 使用 panfrost 显卡驱动来直接渲染 KlipperScreen 界面,降低 CPU 占用
硬件列表:
- BTT Manta M8P v2.0
- 必趣 TFT 35_SPI v2.1
- 微雪 HDMI TouchScreen
- DFRobot DSI 树莓派触摸屏
其他一些注意点:
- 【更新】M8P v2.0/CB2 相关文档未及时更新,请参考 BTTPi2 文档
- 【勘误】CB2 烧录系统到 eMMC 后,需要将 3/4 拨码都会到 OFF 才会启动,而不是仅 3 。
- 【建议】Manta M8P v2,overlays 选 HDMI-1,结果要插插 HDMI-0 接口,希望必趣能统一从 0 还是从 1 数数
- 【TODO】当前系统点亮 DFRobot DSI 树莓派屏之后,几秒后会关闭背光
- 【更新】新版 Klipper 目前已支持 STM32H723 运行在 520Mhz 主频模式下,既往 H723/H743/H750 虽然支持但最高只能运行在 400Mhz 模式下(后两者目前依然如此)。
- stm32: Enable VOS0 power mode on stm32h723 if frequency above 400Mhz
- stm32: Run stm32h723 at 520Mhz
一、使用新版系统
1.1 新版系统的亮点:
- 新增 UMS 模式,支持将 eMMC 挂载为移动存储模式
- 内核大更新:4.19 ——> 6.1
- 支持调用 RKMPP 加速视频图像处理
- 支持调用 RKNPU 神经网络处理单元
- 支持 GPU Panfrost 驱动
- 支持 imx219 和 ov5647 树莓派摄像头
- 支持树莓派 DSI 屏
- 支持从 M.2 NVME 固态硬盘启动
1.2 产品特点
- CPU: 瑞芯微 RK3566,四核 Cortex-A55 @1.8GHz
- GPU: Mali-G52 1-Core-2EE
- NPU: 0.8 TOPS NPU
- RAM: 2GB LPDDR4
- 32GB 板载 EMMC 存储
- 支持树莓派 DSI/CSI 摄像头、显示器,性能更好、价格便宜
- PCIe 2.1 1x1 支持 M.2 固态硬盘启动
- 千兆以太网
- 博通 433Mbps WiFi + BT5.0 无线模块
- 40-pin GPIO
- 与树莓派 CM4 完全相同的 BTB 座子
市面上常见 3D 打印机上位机 CPU 对比:
处理器型号 |
CPU架构 |
核心数 |
主频 |
GPU |
性能跑分 |
备注 |
RK3566 |
Cortex-A55 |
4 |
最高1.8GHz |
Mali-G52 2EE |
61 026 |
内置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位处理器 |

1.1 BTTPi2 烧录新版系统(简介)
Pi2 主要区别是进入 Recovery 模式的拨码,如下图所示:

按住 Recovery 键通过 TypeC 数据线连接电脑即可。
另一个区别是支持 M.2 接口,从而支持一系列外设和固态硬盘启动。同时其优秀的编解码能力,也可以做一台 Jellyfin 影音服务器,具体可以查看 UP 主 索拉里斯风 的视频:《激动啊!Arm设备真的可以jellyfin转码了,功耗低超级低。性能很惊喜。》
1.2 M8P v2.0 使用新版系统
此主板延续了必趣一贯的大而全的特点,是一款非常优秀的二合一主板,其基础操作参考 官方文档。本着一文搞定的原则,简述相关步骤如下。
1.2.1 软件系统准备
- 操作系统下载地址 https://github.com/bigtreetech/CB2 ,当前(2025年7月19日)最新版本是 V3.0.2 ,下载
CB2_Debian12_Klipper_kernel6.1_20250529_without_obico.img.xz
解压缩到合适位置,得到 img 系统镜像文件。
- 烧录工具下载:从上述仓库下载专用版 RKDevTool.zip,解压到合适目录
- 从上述烧录工具包中使用 DriverAssitant_v5.12 先卸载再安装驱动
1.2.2 CB2 进入烧录模式并烧录系统到 eMMC
CB2 和 Pi2 进入 Recovery 模式拨码位置不同,可以如下理解:
具体步骤:
- 移除 microSD 卡
- 将 TypeC 接口旁边的 2P 排针使用跳帽短接,从而使能 USB 供电,此时无需连接 24V 供电。
- 将 4P 拨码开关的 3(RPIBOOT) 和 4(USBOTG) 调节到 ON 位置,1、2 保持 OFF
- 使用 TypeC 数据线连接 M8P 到电脑
- 电脑打开 RKDevTool,更改、选择刚下载的镜像
- 如图设置,并点击 RUN 开始烧录



1.2.3 UMS/MSC 模式
这个改动太重要了,可以直接修改配置文件
若 eMMC 中已经烧录过 V3.0.1及其之后版本的系统,电脑会将 eMMC 识别为 MSC 设备(类似U盘一样的设备)。UMS模式相对于Loader模式有以下好处:
- 可以直接修改 /boot/ 分区中的配置信息【配网终于不再反人类了】
- 可以直接像 Micro SD 卡那样,直接烧录系统到eMMC 【虽然速度变慢了】
- 可以通过软件擦除 eMMC 中的所有内容
不过仍有几点需要注意:
- 后续想要重新烧录系统,调节拨码后无法再使用 RKDevTool,而是和 microSD 卡相同,使用 USBImager 烧录,速度较之前速度慢不少。
- 使用 USBImager 等工具烧录系统前,可能需要使用 sdformater 格式化两次,启用逻辑大小调整。
- 想要进入 loader 模式,需要在 Linux 下操作,手动关闭 MSC 磁盘模式,再使用命令进入 Loader 模式
- 烧录新版系统后会自动启动进入 MSC 模式,此时会在系统中显示
boot
磁盘分区,我们可以打开并修改 armbianEnv.txt 和 system.cfg 文件。
- 弹出磁盘,将 3/4 拨码拨回 OFF,重新插电即可正常启动。【这里 CB2 官方文档有误且未更新 UMS 模式内容,需要查阅 BTTPi2 文档】
二、使用触摸屏
2.1 TFT35 SPI V2.1 触摸屏

本次使用的是 SPI 显示触摸屏(BTTPi2 无此接口),毕竟一线连,比 HDMI 接线简单,但随着新版系统也支持树莓派 DSI 屏,由此除了价格便无更多优势。不过未来可能会升级 DSI 屏。注意此 FPC 排线的规格是:9P 1.0 间距 反向,长度选择 15cm 及以上。
2.1.1 启用 TFT35_SPI 屏
修改 /boot
内的配置文件,可以在上文烧录好 eMMC 系统后使用 UMS 模式直接修改
- system.cfg,使能 TFT35_SPI,并设置网络
- hostname
- TimeZone
- ks_src=‘FBTFT’
- WIFI_SSID
- WIFI_PASSWD
- armbianEnv.txt,启用 spi 屏,设置屏幕旋转
- overlays=tft35_spi
- rotation
注意:
- ks_rotation 无法影响 tft35_spi,需要在 armbianEnv.txt 修改
2.1.2 SPI 屏翻转+触摸校准
由于我要翻转显示使用,但是不想重新布线,物理调整方向,则需要修改上文提到的 armbianEnv.txt
中的 spi rotation 参数,改为旋转 180 度。
除此之外我们发现触摸不正确,需要进行校准,步骤如下:
# 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>
# 创建 libinput 坐标转换脚本
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
# 执行坐标转换并自动生效
sudo ./libinput_calibrator.sh 480 320 <click_0 X> <click_0 Y> <click_3 X> <click_3 Y>
# 重启 KlipperScreen 验证
sudo systemctl restart KlipperScreen
2.2 HDMI 屏幕启用 GPU 直接渲染
SPI 屏幕使用 CPU 进行软件渲染,无 GPU 加速,所以界面渲染会增加 CPU 负载。但是 HDMI 和 DSI 屏幕是可以使用 GPU 直接渲染 KlipperScreen 图形界面,但是系统默认没有启用,需要进行如下设置:
# 1. 查看显卡
cat /sys/class/drm/card*/device/modalias
of:NnpuT(null)Crockchip,rk3568-rknpuCrockchip,rknpu
of:NgpuT(null)Carm,mali-bifrost
# 2. 安装驱动
sudo apt install mesa-utils libgl1-mesa-dri
# 3. 检查内核模块
lsmod | grep panfrost
# 4. 验证是否启用 GPU 直接渲染图形界面
DISPLAY=:0 glxinfo | grep -i "renderer\|vendor"
## 或者
DISPLAY=:0 screenfetch
## 显示 GPU: llvmpipe (LLVM 15.0.6, 128 bits) 则代表占用 CPU 进行软件渲染
## 显示 OpenGL renderer string: Mali-G52 r1 (Panfrost) 则代表使用硬件渲染
# 5. 日志查看
less /var/log/Xorg.0.log
# 6. 启用 GPU 硬件渲染并重启 KlipperScreen 生效。【SPI 屏不要使用,会导致 KScreen 无法启动】
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 使用树莓派 DSI 屏
新版系统支持树莓派 DSI 屏,正好手头有一块,插电开机后,屏幕显示几秒后会背光熄灭(evtest 可以看到触摸正常),dmesg 及 sudo less /sys/kernel/debug/regulator/regulator_summary
可以看到 tcs4525/tc358762-power 负责背光的电源关闭了,应该和 /boot/dtb/rockchip/rk3566-bigtreetech-cb2-2.dtb
有关,具体已反馈工程师。
三、使用 ffmpeg-rkmpp 实现硬件编解码
大家使用 timelapse 组件时,大多数情况是使用 CPU 来渲染生成视频,速度慢且占用大量 CPU 资源。目前常用的支持硬件编解码的手段为 x86 的 vaapi、树莓派的 h264_v4l2m2m、Rockchip 的 rkmpp。
参考相关文档:https://github.com/nyanmisaka/ffmpeg-rockchip/wiki/Compilation,需要先后编译组件。
# 编译 rkmpp/rkrga/ffmpeg-rkmpp(略,看上面文档链接)
# 渲染视频测试
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
默认未编译 libx264,因此无法使用 CPU 来渲染视频,当前场景下也不需要,如果想要支持此功能,可以编译 ffmpeg 时添加 --enable-libx264
来启用。
【推荐】直接下载预编译好的 ffmepg-rkmpp
由于想要启用 rkmpp 需要使用 rockchip 官方的内核,最新的是 6.1,所以我们也可以下载预编译的 ffmpeg-rkmpp deb 包,地址如下:
https://github.com/MarcA711/Rockchip-FFmpeg-Builds/releases
由于 ffmpeg 编译需要很长时间,这种预编译的包无疑非常棒。
四、使能 timelapse 组件支持硬件加速
组件地址:https://github.com/mainsail-crew/moonraker-timelapse,此组件不再更新,但是很多 PR 很有意思,可以关注。
也可以关注 https://useful-forks.github.io/?repo=mainsail-crew/moonraker-timelapse,如:
- 支持树莓派硬件加速
- 支持手机 BeamKlipper
- 支持 gphoto2 控制协议
- 支持多种相机控制协议 (DSLR, Sony HDR, ...)
这里我参考第一个链接,支持自定义参数配置,默认使用 libx264。同时修改配置文件。
$ 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通常是一个不错的选择,因为它在压缩和质量之间取得了良好的平衡。
- 如果视频用于专业展示或分析,可能需要选择YUV422P或RGB24,以确保更高的色彩精度和细节。
- 更多 Rockchip 硬件加速和视频格式支持情况的信息,可以关注 Jellyfin 官方文档
总结
本来想写 go2rtc 调用 ffmpeg-rkmpp 的内容,留在摄像头文章里吧,还要再学习学习。