Option serial in section mcu must be specifiled
1.问题描述
1.1 故障原因
在打印机保存调平数据时候进行了断电操作,致使固件收损,再次上电时发现无法正常进入系统
1.2 故障现象
开机Klipper报错,无法进入系统,其面板报错代码如下
Option serial in section mcu must be specifiled..Once the underlying issue is corrected,use the RESTART. command to reload the config and restart the host software..Printer is halted.
2. 问题分析
自主方案:冯诺依曼读取执行存储的体系来讲,应该是某一个配置文件在保存的时候发生了损坏。粗略的分析显而易见拥有以下两种解决方案
1. 重置打印机系统
2. 修复相应配置文件
他人方案:没有直接发现此类故障的修复方法,但是有以下相近故障作为解决的参考依据
由于方案一的难度明显小于方案二,我这里优先选择执行自主方案的方案一,在方案一尝试没有办法后再来执行方案二,但是在执行方案一的过程中发生了一些其他的非预料之内的问题,但是在假设-验证思想下也都一一验证解决了。
3. 方案尝试

2.打开后敲击回车输入账户密码
# 海王星4PRO 默认Linux账户及密码(su权限密码)
account:mks
password:makerbase
3.打印内核日志:终端输入dmesg
查看设备从启动到目前状态的设备日志,得到如下结果
[ 1218.749781] usb 4-1: new high-speed USB device number 4 using xhci-hcd
[ 1218.898142] usb 4-1: New USB device found, idVendor=abcd, idProduct=1234, bcd Device= 1.00
[ 1218.898161] usb 4-1: New USB device strings: Mfr=1, Product=2, SerialNumber=3
[ 1218.898169] usb 4-1: Product: UDisk
[ 1218.898175] usb 4-1: Manufacturer: General
[ 1218.898181] usb 4-1: SerialNumber: Љ
[ 1218.899120] usb-storage 4-1:1.0: USB Mass Storage device detected
[ 1218.899622] scsi host0: usb-storage 4-1:1.0
[ 1219.906261] scsi 0:0:0:0: Direct-Access General UDisk 5.00 PQ : 0 ANSI: 2
[ 1219.906786] sd 0:0:0:0: Attached scsi generic sg0 type 0
[ 1219.907358] sd 0:0:0:0: [sda] 3891200 512-byte logical blocks: (1.99 GB/1.86 GiB)
[ 1219.907682] sd 0:0:0:0: [sda] Write Protect is off
[ 1219.907705] sd 0:0:0:0: [sda] Mode Sense: 0b 00 00 08
[ 1219.907976] sd 0:0:0:0: [sda] No Caching mode page found
[ 1219.907994] sd 0:0:0:0: [sda] Assuming drive cache: write through
[ 1219.912540] sda:
[ 1219.914316] sd 0:0:0:0: [sda] Attached SCSI removable disk
对该日志进行解读
1. `[ 1218.749781] usb 4-1: new high-speed USB device number 4 using xhci-hcd`
- 这条消息表明一个高速USB设备被连接到了USB端口4-1,并使用`xhci-hcd`(USB 3.0主机控制器驱动)进行管理。
2. `[ 1218.898142] usb 4-1: New USB device found, idVendor=abcd, idProduct=1234, bcdDevice=1.00`
- 系统发现了一个新的USB设备,提供了供应商ID(`idVendor`)、产品ID(`idProduct`)以及设备版本(`bcdDevice`)。
3. `[ 1218.898161] usb 4-1: New USB device strings: Mfr=1, Product=2, SerialNumber=3`
- 这条消息说明USB设备提供了制造商(Mfr)、产品(Product)和序列号(SerialNumber)字符串。
4. `[ 1218.898169] usb 4-1: Product: UDisk`
- 设备的产品名称是“UDisk”,这通常指的是一个USB闪存驱动器。
5. `[ 1218.898175] usb 4-1: Manufacturer: General`
- 设备的制造商名称是“General”。
6. `[ 1218.898181] usb 4-1: SerialNumber: Љ`
- 设备的序列号是“Љ”,这看起来像是一个编码错误,因为这不是有效的ASCII字符。
7. `[ 1218.899120] usb-storage 4-1:1.0: USB Mass Storage device detected`
- 系统检测到这是一个USB大容量存储设备。
8. `[ 1218.899622] scsi host0: usb-storage 4-1:1.0`
- SCSI主机0(通常对应系统的SCSI子系统)识别了这个USB存储设备。
9. `[ 1219.906261] scsi 0:0:0:0: Direct-Access General UDisk 5.00 PQ : 0 ANSI: 2`
- 这条消息表明SCSI子系统识别了这个设备,并提供了设备的类型(Direct-Access,即直接访问设备,通常是指硬盘或闪存驱动器)和一些其他信息。
10. `[ 1219.906786] sd 0:0:0:0: Attached scsi generic sg0 type 0`
- SCSI设备(sd)被附加到系统上,`sg0`是这个设备的通用设备名。
11. `[ 1219.907358] sd 0:0:0:0: [sda] 3891200 512-byte logical blocks: (1.99 GB/1.86 GiB)`
- 系统识别了这个设备(`sda`)的物理参数,包括逻辑块的数量和大小,以及总的存储容量。
12. `[ 1219.907682] sd 0:0:0:0: [sda] Write Protect is off`
- 设备的写保护是关闭的,这意味着可以向设备写入数据。
13. `[ 1219.907705] sd 0:0:0:0: [sda] Mode Sense: 0b 00 00 08`
- 这是一个SCSI命令,用于获取设备的支持模式。
14. `[ 1219.907976] sd 0:0:0:0: [sda] No Caching mode page found`
- 系统没有找到设备的缓存模式页面。
15. `[ 1219.907994] sd 0:0:0:0: [sda] Assuming drive cache: write through`
- 系统假设设备的缓存模式是写入式(write through)。
16. `[ 1219.912540] sda:`
- 这行日志可能是一个分隔符或者是一个日志条目的开始。
17. `[ 1219.914316] sd 0:0:0:0: [sda] Attached SCSI removable disk`
- 系统确认这个设备是一个可移动的SCSI存储设备。
分析该日志:可以看到USB设备正常挂载,为进一步验证,输入df
命令查看挂载,终端运行命令后输出如下
mks@mkspi:~$ df
Filesystem 1K-blocks Used Available Use% Mounted on
udev 426032 0 426032 0% /dev
tmpfs 99980 10476 89504 11% /run
/dev/mmcblk1p2 6868908 5599228 1180572 83% /
tmpfs 499888 0 499888 0% /dev/shm
tmpfs 5120 4 5116 1% /run/lock
tmpfs 499888 0 499888 0% /sys/fs/cgroup
tmpfs 499888 0 499888 0% /tmp
/dev/mmcblk1p1 261864 109048 152816 42% /boot
/dev/zram1 49584 18164 27836 40% /var/log
/dev/sda 1945344 4768 1940576 1% /home/mks/gcode_files/sda
tmpfs 99976 0 99976 0% /run/user/1000
分析:/dev/sda设备就是我们的U盘,而他挂载到了/home/mks/gcode_files/sda目录下
结论:猜想错误,那么我认为很可能和updata.sh命令本身有关系,接下来我们来验证猜想
步骤三:分析命令运行失败的原因,使其正常执行
输入命令sudo ./updata.sh
,观察控制台输出如下
dpkg: error: cannot access archive '/home/mks/gcode_files/sda1/ELEGOO_UPDATE_DIR/ELEGOO_APP.deb': No such file or directory
分析输出:我们发现终端的报错关键信息在于sda1
,但是实际上我们的设备是挂载到了sda
下面,所以我们要修改updata.sh
的命令适配实际的挂载地址
修改命令:终端输入vim updata.sh,终端输出信息如下
-- INSERT -- W10: Warning: Changing a readonly file
E325: ATTENTION
Found a swap file by the name ".update.sh.swp"
owned by: mks dated: Fri Dec 27 16:58:42 2024
file name: ~mks/update.sh
modified: YES
user name: mks host name: mkspi
process ID: 4164 (STILL RUNNING)
While opening file "update.sh"
dated: Mon May 20 16:34:46 2024
(1) Another program may be editing the same file. If this is the case,
be careful not to end up with two different instances of the same
file when making changes. Quit, or continue with caution.
(2) An edit session for this file crashed.
If this is the case, use ":recover" or "vim -r update.sh"
to recover the changes (see ":help recovery").
If you did this already, delete the swap file ".update.sh.swp"
to avoid this message.
解读上述信息如下:
- 突发问题:USB终端在此时发生了故障无论如何也无法重新连接Putty了
- 通过LAN调试打印机:将打印机LAN口接入局域网,进入管理后台查看局域网地址并且在Putty使用IP链接

<center>图:Putty局域网SSH配置</center>
注意:此处的打印机局域网地址得你自己登录路由器的后台自己查看,名字叫做mkspi
的设备就是你的3D打印机
发现:此时浏览器直接输入打印机局域网地址能进入fluidd控制台,可以查看到更加详细的问题,且为开始的方案二提供了减少实现难度的另外一个路径。此处我仅做一个记录,先实现原有方案先

<center>图:此时局域网下的fluidd界面</center>
- 输入用户名以及密码
# 海王星4PRO 默认Linux账户及密码(su权限密码)
account:mks
password:makerbase

<center>图:输入用户名密码成功后的终端输出</center>
- 再次尝试修改命令:终端输入vim updata.sh,终端输出信息如下
Found a swap file by the name ".update.sh.swp"
owned by: mks dated: Fri Dec 27 16:58:42 2024
file name: ~mks/update.sh
modified: YES
user name: mks host name: mkspi
process ID: 4164 (STILL RUNNING)
While opening file "update.sh"
dated: Fri Dec 27 18:52:18 2024
NEWER than swap file!
(1) Another program may be editing the same file. If this is the case,
be careful not to end up with two different instances of the same
file when making changes. Quit, or continue with caution.
(2) An edit session for this file crashed.
If this is the case, use ":recover" or "vim -r update.sh"
to recover the changes (see ":help recovery").
If you did this already, delete the swap file ".update.sh.swp"
to avoid this message.
Swap file ".update.sh.swp" already exists!
[O]pen Read-Only, (E)dit anyway, (R)ecover, (Q)uit, (A)bort:
输入E回车,终端显示如下终端命令
sudo dpkg -i --force-overwrite /home/mksg/gcode_files/sda1/ELEGOO_UPDATE_DIR/ELEGOO_APP.deb && echo Update completed
切换英文输入法输入字母I,进入修改模式,修改sda1
为当前U盘实际的挂载目录sda
(这个地方得根据第五步的反馈结果去写!),修改后的内容如下
sudo dpkg -i --force-overwrite /home/mksg/gcode_files/sda/ELEGOO_UPDATE_DIR/ELEGOO_APP.deb && echo Update completed
按一下ENTER退出编辑模式,在输入:wq
(:q!
不做修改强制退出,这个命令有可能你用得上)保存修改并且退出VIM
- 重新运行固件更新命令:终端输入
sudo ./updata.sh
观察到新的报错
root@mkspi:/home/mks# ./update.sh
dpkg: error: cannot access archive '/home/mks/gcode_files/sda/ELEGOO_UPDATE_DIR/ELEGOO_APP.deb': No such file or directory
分析:更新的系统版本包名不对,得使用相应系统的系统包,下面两幅图展示了不同版本包的deb文件名的区别,这是由于此updata.sh命令是低版本的,使用的版本固件太新了没ELEGOO_APP.deb这个包(图1),在更低版本的固件中我发现了有个固件包含ELEGOO_APP.deb这个包(图2、图3)

<center>图2:1.1.3.1固件包内容(不含ELEGOO_APP.deb)</center>

<center>图2:1.1.2.41固件包内容(含ELEGOO_APP.deb)</center>

<center>图3:1.1.2.53固件包内容(含ELEGOO_APP.deb)</center>
选择:因为我忘记了原来的固件版本号,为了避免发生朝低版本错误升级的情况发生,在都包含ELEGOO_APP.deb的情况下,尽可能选择高版本。
提示:至于是1.2A机型的固件还是0.8A机型的固件,得去手册中查找相应的内容,在你不清楚自己的机器是1.2A还是0.8A的情况下千万不要混用升级
- 更换升级文件夹

<center>图:将1.1.2.53固件包DIR目录复制到U盘</center>
- 插入U盘,再次运行固件更新命令
sudo ./updata.sh
root@mkspi:/home/mks# ./update.sh
(Reading database ... 147542 files and directories currently installed.)
Preparing to unpack .../ELEGOO_APP.deb ...
touch: cannot touch '/home/mks/gcode_files/sda1/ELEGOO_UPDATE_DIR/update.log': No such file or directory
/var/lib/dpkg/tmp.ci/preinst: line 12: /home/mks/gcode_files/sda1/ELEGOO_UPDATE_DIR/update.log: No such file or directory
/var/lib/dpkg/tmp.ci/preinst: line 15: /home/mks/gcode_files/sda1/ELEGOO_UPDATE_DIR/update.log: No such file or directory
/var/lib/dpkg/tmp.ci/preinst: line 20: /home/mks/gcode_files/sda1/ELEGOO_UPDATE_DIR/update.log: No such file or directory
ls: cannot access '/home/mks/gcode_files/sda1/ELEGOO_UPDATE_DIR': No such file or directory
/var/lib/dpkg/tmp.ci/preinst: line 49: /home/mks/gcode_files/sda1/ELEGOO_UPDATE_DIR/update.log: No such file or directory
/var/lib/dpkg/tmp.ci/preinst: line 56: /home/mks/gcode_files/sda1/ELEGOO_UPDATE_DIR/update.log: No such file or directory
/var/lib/dpkg/tmp.ci/preinst: line 66: /home/mks/gcode_files/sda1/ELEGOO_UPDATE_DIR/update.log: No such file or directory
/var/lib/dpkg/tmp.ci/preinst: line 73: /home/mks/gcode_files/sda1/ELEGOO_UPDATE_DIR/update.log: No such file or directory
/var/lib/dpkg/tmp.ci/preinst: line 80: /home/mks/gcode_files/sda1/ELEGOO_UPDATE_DIR/update.log: No such file or directory
Unpacking makerbase-client (0.1.0) over (0.1.0) ...
Setting up makerbase-client (0.1.0) ...
/var/lib/dpkg/info/makerbase-client.postinst: line 7: /home/mks/gcode_files/sda1/ELEGOO_UPDATE_DIR/update.log: No such file or directory
Update completed
分析:就算我们把updata.sh中的sda1改成了sda,但是其他的附属命令仍然在用sda1,所以我们得复原update.sh,然后把挂载的文件夹名字从sda改成sda1,这样的话就会好很多
- 复原updata.sh,修改文件夹名:
复原updata.sh
输入命令
cd /home/mks && vim updata.sh
输入E回车,终端显示如下终端命令
sudo dpkg -i --force-overwrite /home/mksg/gcode_files/sda1/ELEGOO_UPDATE_DIR/ELEGOO_APP.deb && echo Update completed
切换英文输入法输入字母I,进入修改模式,修改sda1
为当前U盘实际的挂载目录sda
(这个地方得根据第五步的反馈结果去写!),修改后的内容如下
sudo dpkg -i --force-overwrite /home/mksg/gcode_files/sda1/ELEGOO_UPDATE_DIR/ELEGOO_APP.deb && echo Update completed
修改文件夹名
cd /home/mks/gcode_files && mv sda sda1
终端输出信息如下
root@mkspi:/home/mks/gcode_files# mv: cannot move 'sda' to 'sda1': Device or resource busy
bash: mv:: command not found
解释:输出解释
分析:因为该U盘是是挂载的文件系统,Linux更改挂载文件系统的挂载点的名字得先卸载该文件系统。所以接下来的操作应该是把该卸载该U盘挂载在sda下的文件系统,然后挂载该U盘设备系统至sda1上
卸载文件系统
umount /dev/sda
挂载文件系统
确认U盘设备名称: 使用lsblk
或fdisk -l
命令来确认你的U盘设备名称。通常U盘会显示为/dev/sdb1
、/dev/sdc1
等,但具体名称可能因系统而异。
创建挂载点: 你需要在/home/mks/gcode_files/
下创建一个名为sda1
的目录作为挂载点。使用以下命令创建目录:
bash
mkdir -p /home/mks/gcode_files/sda1
挂载U盘: 使用mount
命令将U盘挂载到你刚刚创建的目录。假设你的U盘设备是/dev/sdb1
,你可以使用以下命令:
bash
mount /dev/sda /home/mks/gcode_files/sda1
请将/dev/sdb1
替换为你的实际U盘设备名称。
检查挂载: 使用df -h
命令来检查U盘是否已经成功挂载到指定目录:
bash
df -h

<center>图:成功挂载到sda1成功后的终端输出</center>
- 再次运行固件更新命令
sudo ./updata.sh
cd /home/mks && ./updata.sh
可以发现这次成功了,下面是这次成功输出的信息
root@mkspi:/home/mks# ./update.sh
(Reading database ... 147558 files and directories currently installed.)
Preparing to unpack .../ELEGOO_APP.deb ...
/home/mks/klipper/klippy/extras/bltouch.py
/etc/init.d/taskset-client.sh
/home/mks/klipper/klippy/toolhead.py
/etc/fstab
/home/mks/klipper/klippy/extras/save_variables.py
/home/mks/moonraker/moonraker/components/klippy_apis.py
/home/mks/Desktop/myfile/znp/znp_tjc_klipper/c_helper.so
/home/mks/Desktop/myfile/znp/znp_tjc_klipper/elegoo_plr.ini
/home/mks/klipper/klippy/extras/probe.py
/home/mks/sled1.sh
/home/mks/sled2.sh
Unpacking makerbase-client (0.1.0) over (0.1.0) ...
Setting up makerbase-client (0.1.0) ...
/home/mks/klipper/klippy/extras/bltouch.py
/etc/init.d/taskset-client.sh
/home/mks/klipper/klippy/toolhead.py
/etc/fstab
/home/mks/klipper/klippy/extras/save_variables.py
/home/mks/moonraker/moonraker/components/klippy_apis.py
/home/mks/Desktop/myfile/znp/znp_tjc_klipper/c_helper.so
/home/mks/Desktop/myfile/znp/znp_tjc_klipper/elegoo_plr.ini
/home/mks/klipper/klippy/extras/probe.py
/home/mks/sled1.sh
/home/mks/sled2.sh
Update completed
4.方案检验
重启打印机,验证方案。在科学的分析方法下,成功使用方案一完成修复

<center>图:成功修复后的系统界面</center>