太长了;博士

太长了;博士

我有一台 MSI Optix MAG245R 23.8" 显示器。它具有 USB 连接。

当我启动基于 Debian 的计算机 (BunsenLabs) 时,我收到警告:

May  4 19:41:51 localname kernel: [  240.573980] sd 9:0:0:0: [sdc] Unaligned partial completion (resid=4060, sector_sz=512)
May  4 19:41:51 localname kernel: [  240.573986] sd 9:0:0:0: [sdc] tag#0 FAILED Result: hostbyte=DID_ERROR driverbyte=DRIVER_OK
May  4 19:41:51 localname kernel: [  240.573988] sd 9:0:0:0: [sdc] tag#0 CDB: Read(10) 28 00 00 00 00 00 00 00 08 00
May  4 19:41:51 localname kernel: [  240.573990] print_req_error: I/O error, dev sdc, sector 0
May  4 19:41:51 localname kernel: [  240.673838] sd 9:0:0:0: [sdc] Unaligned partial completion (resid=2012, sector_sz=512)
May  4 19:41:51 localname kernel: [  240.673846] sd 9:0:0:0: [sdc] tag#0 FAILED Result: hostbyte=DID_ERROR driverbyte=DRIVER_OK
May  4 19:41:51 localname kernel: [  240.673850] sd 9:0:0:0: [sdc] tag#0 CDB: Read(10) 28 00 00 00 00 00 00 00 04 00
May  4 19:41:51 localname kernel: [  240.673852] print_req_error: I/O error, dev sdc, sector 0
May  4 19:41:51 localname kernel: [  240.673859] Buffer I/O error on dev sdc, logical block 0, async page read
May  4 19:41:51 localname kernel: [  240.860367] Buffer I/O error on dev sdc, logical block 1, async page read
May  4 19:41:52 localname kernel: [  241.500663] sd 9:0:0:0: [sdc] Unaligned partial completion (resid=4060, sector_sz=512)
May  4 19:41:52 localname kernel: [  241.612517] sd 9:0:0:0: [sdc] Unaligned partial completion (resid=4060, sector_sz=512)
May  4 19:41:52 localname kernel: [  241.697840] sd 9:0:0:0: [sdc] Unaligned partial completion (resid=2012, sector_sz=512)
May  4 19:41:52 localname kernel: [  241.785872] sd 9:0:0:0: [sdc] Unaligned partial completion (resid=2012, sector_sz=512)
May  4 19:41:52 localname kernel: [  241.818899] sd 9:0:0:0: [sdc] Unaligned partial completion (resid=16348, sector_sz=512)
May  4 19:41:52 localname kernel: [  241.909838] sd 9:0:0:0: [sdc] Unaligned partial completion (resid=2012, sector_sz=512)
May  4 19:41:52 localname kernel: [  241.993839] sd 9:0:0:0: [sdc] Unaligned partial completion (resid=2012, sector_sz=512)
May  4 19:41:55 localname kernel: [  244.842973] sd 9:0:0:0: [sdc] Unaligned partial completion (resid=16348, sector_sz=512)
May  4 19:41:55 localname kernel: [  244.942219] sd 9:0:0:0: [sdc] Unaligned partial completion (resid=2012, sector_sz=512)
May  4 19:41:55 localname kernel: [  245.034140] sd 9:0:0:0: [sdc] Unaligned partial completion (resid=2012, sector_sz=512)
May  4 19:41:56 localname kernel: [  245.473992] sd 9:0:0:0: [sdc] Unaligned partial completion (resid=2012, sector_sz=512)
May  4 19:41:56 localname kernel: [  245.557874] sd 9:0:0:0: [sdc] Unaligned partial completion (resid=2012, sector_sz=512)
May  4 19:41:57 localname kernel: [  246.425872] sd 9:0:0:0: [sdc] Unaligned partial completion (resid=2012, sector_sz=512)
May  4 19:41:57 localname kernel: [  246.425881] sd 9:0:0:0: [sdc] tag#0 FAILED Result: hostbyte=DID_ERROR driverbyte=DRIVER_OK
May  4 19:41:57 localname kernel: [  246.425884] sd 9:0:0:0: [sdc] tag#0 CDB: Read(10) 28 00 00 00 00 00 00 00 04 00

然后,我继续启动 GParted 来检查我的存储卷。我知道什么/dev/sda/dev/sdb是什么;这些都是我所期望的。因此我很惊讶为什么a/dev/sdc被检测到。

在此输入图像描述

在那里,设备信息显示它是 MSI Optix 驱动程序。我尝试仅隔离显示器的 USB 连接(无键盘连接、加密狗等),并且这被检测为/dev/sdc.

我可以做什么来消除这些错误?我的非专家想法是找到某种方法来告诉我的机器这个带有 UUID0123456789 的设备不是存储设备,所以不要费心将其作为存储设备进行测试。我怎么做?

或者有其他办法吗?

答案1

显示器似乎是双模式设备,默认模式是存储设备,其中包含适用于该设备的 Windows 和/或 Mac 驱动程序。如今,越来越多需要驱动程序的 USB 设备似乎都这样做。

如果你运行ls -l /sys/block/sdc,你会看到它是一个指向类似路径的符号链接

../devices/<PCI device path for the USB controller>/usb#/<USB device path>/host#/target#:#:#/#:#:#:#/block/sdc

...其中 # 是数字,具体取决于您的确切硬件配置,在这里并不重要。

您需要移动到该host#部分之前的目录:

cd /sys/devices/<PCI device path for the USB controller>/usb#/<USB device path>/

...然后查看该目录是否包含名为bNumConfigurations和 的文件bConfigurationValue。如果没有,请上移一级 ( cd ..) 并再次检查。

一旦找到正确的目录,cat bNumConfigurations就会告诉您 USB 设备有多少种可能的配置(模式)。提供自己的驱动程序的 USB 设备很可能至少有两种模式,因此该命令可能会输出2.

cat bConfigurationValue会告诉您当前配置的编号。存储设备配置很可能是第一个,1

要将 USB 设备切换到第二个配置,请运行:

echo 2 | sudo tee bConfigurationValue

(或者,如果您以 root 身份运行,则只需。请注意和echo 2 > bConfigurationValue之间的空格,因为它对许多 shell 具有特殊含义。)2>2>

这应该会导致“USB 存储设备”消失并被相关 USB 设备的实际功能所取代。

为了自动化这个过程,大多数现代发行版都有一个usb-modeswitch组件/实用程序。事实上,它尚未切换您的设备,这意味着您需要将有关设备的信息添加到其配置中。一旦您知道所需的配置号,您就可以创建一个文本文件,/etc/usb_modeswitch.d/XXXX:YYYY其中 XXXX:YYYY 是需要切换的 USB 设备的供应商:产品 ID。文件的内容应该是标识您想要的配置的行。例如,如果您发现配置 2 提供了设备的实际功能,您可以编写如下行:

Configuration=2

就是这样。 (您实际上可能希望将文件的副本发送给 usb-modeswitch 开发人员,以便他们可以将信息添加到该实用程序的未来版本中。)

有些设备可能使用不同的切换方法,这更难弄清楚。如果 sysfs 文件bNumConfigurations指示相关 USB 设备只有一种配置,则您需要构建一个 Windows VM,向其提供 USB 设备,安装设备提供的驱动程序,然后在VM 正在启动以捕获 Windows 驱动程序发送到设备的 USB 消息以触发配置切换。该usb-modeswitch实用程序可以配置为自动发送此类消息,并且其数据文件将包括此类情况的许多现有示例。

一般来说,Windows 显示器“驱动程序”可能只包含*.icc颜色校准配置文件,该配置文件也可以在 Linux 中使用。如果显示器针对高刷新率进行了优化(= 游戏显示器)或由于某些其他原因具有奇怪的颜色再现字符,您可以通过在 Windows 驱动程序包中查找颜色校准配置文件来改善显示器的颜色再现,并告诉您的桌面环境将其与显示器一起使用。

答案2

感谢@telcoM 提供的线索。我已经解决了这个问题。

太长了;博士

使用规则取消对有问题的 USB 设备的授权udev

怎么做

  1. 以跟随模式运行dmesg
$ dmesg -w
  1. 断开并重新连接显示器的 USB 电缆。
  2. 在 的输出中dmesg,记下要禁用的设备的总线编号(以黄色覆盖)

在此输入图像描述

  1. dmesg使用 CTRL+C退出。
  2. 现在运行以下命令来获取设备属性。替换xxxusbxxx为您获得的巴士号码dmesg
$ udevadm info -a -p /sys/bus/usb/devices/xxxusbxxx
  1. 这是输出的第一部分,也是您关心的部分。记下以下属性和红框中覆盖的路径。
DRIVER=="usb-storage"
ATTR{bInterfaceClass}=="aa"
ATTR{bInterfaceNumber}=="bb"
ATTR{bInterfaceProtocol}=="cc"
ATTR{bInterfaceSubClass}=="dd"

在此输入图像描述

  1. 现在创建一个新文件/etc/udev/rules.d/10-disable-MSI-optix-storage.rules。该数字10表示该规则先于其他具有更高数字的规则执行。保留.rules扩展名。文件名的其余部分并不重要。这些应该是文件的内容。相应地替换字符串。

在此输入图像描述

  1. 重新启动计算机,即可看到读取错误消息不再出现。

这实际上做了什么

udev当检测到与规则文件中指定的属性相匹配的 USB 设备时,其authorized标志会立即设置为0并且不能再使用。

相关内容