如何为PRUSA打印机的Ubuntu Pi映像编译cdc-acm.ko内核模块



我有一台PRUSA打印机,它不允许与树莓派CM4上的Ubuntu 21.10服务器进行USB/串行通信。

我正在尝试将串行端口传递给Docker映像。

我已经尝试过传递/dev/ttyACM0和/dev/ttyACM 1,但它不起作用,因为它们不是正确的设备。

经过研究,发现PRUSA需要cdc-acm.ko内核模块进行通信。默认情况下,此模块不包含在Ubuntu Server Raspberry Pi中,并且现有的串行端口不是正确的端口。

每次进行小内核更新时,都必须重复此过程。因为源代码是基于父树的,如果你想的话,你可以从源代码中使用git pull进行更新。然而,就我而言,这个模块不会更新太多,所以当apt安装新内核时,我可以重新运行make-and-make-install组件。

在主文件夹中安装内核源

cd ~
apt-get source linux-image-$(uname -r)
sudo apt-get install linux-headers-$(uname -r)
cd $(uname -r)
make oldconfig
make prepare

准备构建/安装

这是为了防止消息";module_layout没有符号版本";当使用insmod或modprobe加载模块时。

$ cd ~/linux-3.13.0
$ sudo cp -v /usr/src/linux-headers-$(uname -r)/Module.symvers .

备份现有文件(如果已构建另一个版本(

sudo mv -v /lib/modules/$(uname -r)/kernel/drivers/usb/class/cdc-acm.ko /lib/modules/$(uname -r)/kernel/drivers/usb/class/cdc-acm.ko.backup

更改为包含cdc-acm模块源文件的目录

cd drivers/usb/class

在目录中构建模块

make -C /lib/modules/$(uname -r)/build M=$(pwd) modules

安装模块

sudo make -C /lib/modules/$(uname -r)/build M=$(pwd) modules_install

确保模块加载

insmod cdc-acm.ko

检查dmesg,查看是否将串行端口添加为设备

[342064.530529] usb 1-1.3: USB disconnect, device number 3
[342068.876355] usb 1-1.3: new full-speed USB device number 4 using xhci_hcd
[342068.992089] usb 1-1.3: New USB device found, idVendor=2c99, idProduct=0002, bcdDevice= 1.30
[342068.992120] usb 1-1.3: New USB device strings: Mfr=1, Product=2, SerialNumber=3
[342068.992135] usb 1-1.3: Product: Original Prusa i3 MK3
[342068.992147] usb 1-1.3: Manufacturer: Prusa Research (prusa3d.com)
[342068.992159] usb 1-1.3: SerialNumber: CZPX4121X00XXXXXXXXX
[344887.408684] cdc_acm 1-1.3:1.0: ttyACM0: USB ACM device
[344887.408815] usbcore: registered new interface driver cdc_acm
[344887.408824] cdc_acm: USB Abstract Control Model driver for USB modems and ISDN adapters

通过ID验证串行设备,这样您就可以传递到Docker容器等

ls -al /dev/serial/by-id/*
lrwxrwxrwx 1 root root 13 Apr 11 13:31 /dev/serial/by-id/usb-Prusa_Research__prusa3d.com__Original_Prusa_i3_MK3_CZPX4121X00XXXXXXXXX-if00 -> ../../ttyACM0

为了获得额外的积分,以下是您如何将此串行端口传递给Docker以进行OctoPrint

devices:
- /dev/serial/by-id/usb-Prusa_Research__prusa3d.com__Original_Prusa_i3_MK3_CZPX4121X00XXXXXXXXX-if00:/dev/ttyACM0

最新更新