我有一台内置读卡器的笔记本电脑。在过去的一年左右的时间里,我一直在处理一个奇怪的问题,这个问题似乎更多地与软件有关,而不是与硬件有关。
我运行了双启动Windows 7的和Ubuntu 14.04,均为 64 位。在 Windows 下,SD 卡运行良好。它运行速度有点慢,但始终能够顺利完成。
在 Ubuntu 下,它突然停止了,当我dmesg
在终端中输入时,我收到以下消息:
[12535.092927] mmcblk0: mmc0:b368 SD 1.88 GiB
[12535.096167] mmcblk0: p1
[12653.904243] mmc0: Timeout waiting for hardware interrupt.
[12653.904974] mmcblk0: error -110 transferring data, sector 158279, nr 1024, cmd response 0x900, card status 0xc00
[12663.930682] mmc0: Timeout waiting for hardware interrupt.
[12663.930823] end_request: I/O error, dev mmcblk0, sector 158279
[12663.930838] end_request: I/O error, dev mmcblk0, sector 158287
[12663.930845] end_request: I/O error, dev mmcblk0, sector 158295
[12663.930852] end_request: I/O error, dev mmcblk0, sector 158303
[12663.930858] end_request: I/O error, dev mmcblk0, sector 158311
[12663.930864] end_request: I/O error, dev mmcblk0, sector 158319
[12663.930871] end_request: I/O error, dev mmcblk0, sector 158327
[12663.930877] end_request: I/O error, dev mmcblk0, sector 158335
[12663.930883] end_request: I/O error, dev mmcblk0, sector 158343
[12663.930889] end_request: I/O error, dev mmcblk0, sector 158351
[12673.957122] mmc0: Timeout waiting for hardware interrupt.
[12674.002269] mmcblk0: error -110 transferring data, sector 159303, nr 1024, cmd response 0x900, card status 0xc00
这发生在任何SD 卡任何存储大小,并且它将发生在任何传输时,尤其是传输大文件或大量文件时,时间会缩短。我右键单击 Ubuntu 面板上的 SD 卡图标,然后Safely remove
在弹出 SD 之前单击,甚至重新格式化 SD,这样它就不会出现错误,但它仍然给我带来问题。我的 USB 闪存驱动器的格式与 SD 卡相同 (FAT32),它们都工作正常。为什么 Windows 可以很好地读取/写入我的卡而 Ubuntu 却不行?
输出lspci
(仅限读卡器):
02:00.0 Ethernet controller: Broadcom Corporation NetLink BCM57785 Gigabit Ethernet PCIe (rev 10)
02:00.1 SD Host controller: Broadcom Corporation BCM57765/57785 SDXC/MMC Card Reader (rev 10)
02:00.2 System peripheral: Broadcom Corporation BCM57765/57785 MS Card Reader (rev 10)
02:00.3 System peripheral: Broadcom Corporation BCM57765/57785 xD-Picture Card Reader (rev 10)
答案1
我没有你的硬件,但 Broadcom 及其驱动程序也遇到了类似的问题。非常令人沮丧。除此之外,这个可能值得一试:
创建一个文件并将此字符串写入其中
options sdhci debug_quirks=0x40
:sudo sh -c 'echo options sdhci debug_quirks=0x40 >> /etc/modprobe.d/sdhci-pci.conf'
现在重新启动,或者重新加载模块:
sudo modprobe -r sdhci-pci sdhci sudo modprobe sdhci-pci
错误跟踪器提到它可能无法让您获得全速,但值得一试。
(从https://bugzilla.kernel.org/show_bug.cgi?id=73241和http://www.linuxtechtips.com/2013/08/sd-mmc-ms-pro-card-reader-not-working.html)
答案2
我在 linuxlite 上遇到过这个问题。解决方案是创建一个/etc/modprobe.d/sdhci-pci.conf
包含以下内容的文件:
options sdhci debug_quirks=0x40 debug_quirks2=0x4
该选项0x4
会将速度从超高速降低到高速,但最好不是可操作的卡。
答案3
快速谷歌搜索一下您的卡控制器的信息,就会返回其他帖子,这些帖子来自那些指出内核是罪魁祸首的人。我手头没有具体的错误报告可以参考,所以我不能肯定地说上游是否存在修复程序,但有一种简单的方法可以找出它是否可用。安装并启动较新的内核,看看 SD 卡问题是否有所改善。这不会对您的计算机造成任何损害,如果您不需要它,您可以随时将其删除。
运行apt-cache search linux-generic-lts
以查看其他可用的内核包。我在存储库中看到的最新版本是 linux-generic-lts-wily。sudo apt-get install linux-generic-lts-wily
然后您可以重新启动进入新内核并再次测试 SD 驱动器。