pATAq 发表于 2025-7-21 23:55:33

跟思兼学Klipper(37) M8P v2.0+CB2/BTTPi2 新版系统使用简明指南


### 跟思兼学Klipper(37) M8P v2.0+CB2/BTTPi2 新版系统使用简明指南

# 前言

原创文章,转载引用务必注明链接,水平有限,如有疏漏,欢迎指正交流。

文章如有更新请访问 (https://mc.dfrobot.com.cn/thread-363184-1-1.html?fromuid=725344)及 (https://www.cnblogs.com/sjqlwy/p/18994796/m8p),前者内容较全,后者排版及阅读体验更佳。

感谢必趣科技(Bigtreetech)和魔核科技(MagicMaker)的硬件赞助。后来才知道很多人的入门打印机小鲁班也是魔核出品的,接触下来魔核的老板做事很严谨,比如 OrcaSlicer 唯一的 PEEK 打印参数,点个赞。

最近必趣更新了 CB2/BTTPi2 的操作系统,提升很大。趁着准备给魔核科技的 黑爵士UM2 打印机升级,就写一下相关教程。我个人从第一台 Anet A8 开始,已经购买、玩过 20 余台不同型号的 3D 打印机,其中尤其喜欢 UM2 架构的打印机,之前调教的最好的一台就是珍妮(JennyPrinter)的 Z370,不过拆装一次之后,铝塑板变形,就很是头疼。不过这台黑爵士采用同步带 Z,全金属结构件,真是一机传三代,人走机还在。本着好马配好鞍的原则,心头好 UM2 就要配顶级的 Manta M8P v2(STM32F723)+ 顶级的 CB2 上位机模块,至于性能配置是否冗余,可以不用,但不能没有。不过 CB2 之前的操作系统不太好用,所以一直没做介绍。这次趁着更新契机,将一些内容整合分享如下。未来计划更新 《2025 版 Klipper 摄像头不完全使用指南》,拭目以待。

本文涉及的内容:

1. Manta M8P v2 + CB2 使用基本步骤
2. CB2 新的 UMS 模式介绍
3. 编译使用 ffmpeg-rkmpp 调用 GPU 实现硬件加速视频渲染(修改 timelapse 组件)
4. 使用 panfrost 显卡驱动来直接渲染 KlipperScreen 界面,降低 CPU 占用

硬件列表:

1. BTT Manta M8P v2.0
2. 必趣 TFT 35_SPI v2.1
3. 微雪 HDMI TouchScreen
4. DFRobot DSI 树莓派触摸屏

其他一些注意点:

1. 【更新】M8P v2.0/CB2 相关文档未及时更新,请参考 BTTPi2 文档
2. 【勘误】CB2 烧录系统到 eMMC 后,需要将 3/4 拨码都会到 OFF 才会启动,而不是仅 3 。
3. 【建议】Manta M8P v2,overlays 选 HDMI-1,结果要插插 HDMI-0 接口,希望必趣能统一从 0 还是从 1 数数
4. 【TODO】当前系统点亮 DFRobot DSI 树莓派屏之后,几秒后会关闭背光
5. 【更新】新版 Klipper 目前已支持 STM32H723 运行在 520Mhz 主频模式下,既往 H723/H743/H750 虽然支持但最高只能运行在 400Mhz 模式下(后两者目前依然如此)。
   1. (https://github.com/Klipper3d/klipper/commit/cf3bedfbdc744325e0039e35f37a8e12c0c63bc0)
   2. (https://github.com/Klipper3d/klipper/commit/554ae78d8c85e27fdfb1447bb6fb700e0fd786ff)

# 一、使用新版系统

## 1.1 新版系统的亮点:

1. 新增 UMS 模式,支持将 eMMC 挂载为移动存储模式
2. 内核大更新:4.19 ——> 6.1
3. 支持调用 RKMPP 加速视频图像处理
4. 支持调用 RKNPU 神经网络处理单元
5. 支持 GPU Panfrost 驱动
6. 支持 imx219 和 ov5647 树莓派摄像头
7. 支持树莓派 DSI 屏
8. 支持从 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位处理器            |

* 取 AnTuTu 综合评分,数据来自 https://gadgetversus.com/processor/

### !(https://s2.loli.net/2025/07/19/Xj8IiETNMRvfyze.png)

## 1.1 BTTPi2 烧录新版系统(简介)

Pi2 主要区别是进入 Recovery 模式的拨码,如下图所示:

![](https://bttwiki.com/zh/img/Pi2/Pi2_System1.png)

按住 Recovery 键通过 TypeC 数据线连接电脑即可。

另一个区别是支持 M.2 接口,从而支持一系列外设和固态硬盘启动。同时其优秀的编解码能力,也可以做一台 Jellyfin 影音服务器,具体可以查看 UP 主 [索拉里斯风](https://space.bilibili.com/15392425) 的视频:[《激动啊!Arm设备真的可以jellyfin转码了,功耗低超级低。性能很惊喜。》](https://www.bilibili.com/video/BV1Gu48eYE6h/)

## 1.2 M8P v2.0 使用新版系统

此主板延续了必趣一贯的大而全的特点,是一款非常优秀的二合一主板,其基础操作参考 [官方文档](https://bttwiki.com/zh/CB2.html#emmc)。本着一文搞定的原则,简述相关步骤如下。

### 1.2.1 软件系统准备

1. 操作系统下载地址 https://github.com/bigtreetech/CB2 ,当前(2025年7月19日)最新版本是 (https://github.com/bigtreetech/CB2/releases/tag/V3.0.2) ,下载 `CB2_Debian12_Klipper_kernel6.1_20250529_without_obico.img.xz`解压缩到合适位置,得到 img 系统镜像文件。
2. 烧录工具下载:从上述仓库下载专用版 (https://github.com/bigtreetech/CB2/blob/master/RKDevTool.zip),解压到合适目录
3. 从上述烧录工具包中使用 DriverAssitant_v5.12 先卸载再安装驱动

### 1.2.2 CB2 进入烧录模式并烧录系统到 eMMC

CB2 和 Pi2 进入 Recovery 模式拨码位置不同,可以如下理解:

> * The `RPIBOOT` is the `Recovery` button on PI2
>
> * The `USBOTG` is the `OTG` on PI2
>
> * The button on CB2 is the `eMMC-EN` on PI2
>
>   Source: https://github.com/bigtreetech/CB2/issues/94

具体步骤:

1. 移除 microSD 卡
2. 将 TypeC 接口旁边的 2P 排针使用跳帽短接,从而使能 USB 供电,此时无需连接 24V 供电。
3. 将 4P 拨码开关的 3(RPIBOOT) 和 4(USBOTG) 调节到 ON 位置,1、2 保持 OFF
4. 使用 TypeC 数据线连接 M8P 到电脑
5. 电脑打开 RKDevTool,更改、选择刚下载的镜像
6. 如图设置,并点击 RUN 开始烧录

![](https://bttwiki.com/zh/img/CB2/CB2_System4.png)

![](https://bttwiki.com/zh/img/CB2/CB2_System6.png)

![](https://bttwiki.com/zh/img/CB2/CB2_System8.png)

### 1.2.3 UMS/MSC 模式

这个改动太重要了,可以直接修改配置文件

> 若 eMMC 中已经烧录过 V3.0.1及其之后版本的系统,电脑会将 eMMC 识别为 MSC 设备(类似U盘一样的设备)。UMS模式相对于Loader模式有以下好处:
>
> * 可以直接修改 /boot/ 分区中的配置信息【配网终于不再反人类了】
> * 可以直接像 Micro SD 卡那样,直接烧录系统到eMMC 【虽然速度变慢了】
> * 可以通过软件擦除 eMMC 中的所有内容

不过仍有几点需要注意:

1. 后续想要重新烧录系统,调节拨码后无法再使用 RKDevTool,而是和 microSD 卡相同,使用 USBImager 烧录,速度较之前速度慢不少。
2. 使用 USBImager 等工具烧录系统前,可能需要使用 sdformater 格式化两次,启用逻辑大小调整。
3. 想要进入 loader 模式,需要在 Linux 下操作,手动关闭 MSC 磁盘模式,再使用命令进入 Loader 模式
4. 烧录新版系统后会自动启动进入 MSC 模式,此时会在系统中显示 `boot` 磁盘分区,我们可以打开并修改 armbianEnv.txt 和 system.cfg 文件。
5. 弹出磁盘,将 3/4 拨码拨回 OFF,重新插电即可正常启动。**【这里 CB2 官方文档有误且未更新 UMS 模式内容,需要查阅 BTTPi2 文档】**

# 二、使用触摸屏

## 2.1 TFT35 SPI V2.1 触摸屏

![](https://cdn.shopify.com/s/files/1/1619/4791/products/01_eeb3a288-aee8-4e44-bfc9-34e056150b0c.png?v=1716343264&width=1220)

* https://bttwiki.com/zh/TFT35%20SPI.html

* https://github.com/bigtreetech/TFT35-SPI/

本次使用的是 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


注意:

1. ks_rotation 无法影响 tft35_spi,需要在 armbianEnv.txt 修改

### 2.1.2 SPI 屏翻转+触摸校准

由于我要翻转显示使用,但是不想重新布线,物理调整方向,则需要修改上文提到的 `armbianEnv.txt` 中的 spi rotation 参数,改为旋转 180 度。

除此之外我们发现触摸不正确,需要进行校准,步骤如下:

```shell
# 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

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

#
      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='^+$'
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 图形界面,但是系统默认没有启用,需要进行如下设置:

```shell
# 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,需要先后编译组件。

```shell
# 编译 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,如:

1. [支持树莓派硬件加速](https://github.com/mainsail-crew/moonraker-timelapse/compare/main...ayufan-research:klipper-moonraker-timelapse:main)
2. [支持手机 BeamKlipper](https://github.com/mainsail-crew/moonraker-timelapse/compare/main...utkabobr:moonraker-timelapse:main)
3. [支持 gphoto2 控制协议](https://github.com/mainsail-crew/moonraker-timelapse/compare/main...boecko:moonraker-timelapse:feature/gphoto2)
4. [支持多种相机控制协议 (DSLR, Sony HDR, ...)](https://github.com/fbeauKmi/moonraker-timelapse)

这里我参考第一个链接,支持自定义参数配置,默认使用 libx264。同时修改配置文件。

```shell
$ diff timelapse.py timelapse_ori.py
90d89
<             'vcodec': "libx264",
691c690
<               + " -vcodec " + self.config['vcodec'] \
---
>               + " -vcodec libx264" \

# 修改 moonraker.cfg, 指定编码器

## 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 的内容,留在摄像头文章里吧,还要再学习学习。


页: [1]
查看完整版本: 跟思兼学Klipper(37) M8P v2.0+CB2/BTTPi2 新版系统使用简明指南