我有一张微型 SD 卡,SanDisk Ultra 16 GB,超高速,格式化为 FAT,位于一个 SD 适配器中,还有一台运行 Ubuntu 20.10 的 Macbook pro 8,1。
SD 卡无法在内部 SD 卡读卡器中工作:它在“磁盘”中显示为未知的 16 GB。
同一张 SD 卡可以通过 USB 外置读卡器工作。
在使用 Mac OS 重新启动后,它也可以在同一台 Mac 的同一个内部读卡器中使用。
由于卡和读卡器可以工作,我怀疑 Ubuntu 错过了一些东西。
重新格式化(再次为 FAT)后,该卡似乎可以工作(在磁盘中显示为 16 GB FAT),但当尝试通过从桌面拖放将文件复制到该卡时,光标箭头变成手形,Ubuntu 冻结。我可以通过重新启动来恢复,但此后 SD 卡在磁盘中显示为:16 GB 未知。
我尝试了另一张 SDXC 128 GB ExFAT 卡,结果相同(也许除了重新格式化,我没有尝试,因为卡上有有用的数据)。
有什么建议可以让 Ubuntu 的内部 SD 卡读卡器正常运作吗?
更新
(在 mook765 的评论之后。)
当 SD 卡插入 Macbook pro 内部 SD 卡读卡器时,它几乎从未安装,在磁盘中显示为未知。 dmesg
输出:
[29944.127784] mmc0: new ultra high speed SDR104 SDHC card at address e624
[29944.129766] mmcblk0: mmc0:e624 SC16G 14.8 GiB
[29954.151831] mmc0: Timeout waiting for hardware interrupt.
[29954.151847] mmc0: sdhci: ============ SDHCI REGISTER DUMP ===========
[29954.151927] mmc0: sdhci: Sys addr: 0x000010c8 | Version: 0x00001502
[29954.151940] mmc0: sdhci: Blk size: 0x00007200 | Blk cnt: 0x00000000
[29954.151976] mmc0: sdhci: Argument: 0x00000000 | Trn mode: 0x0000003b
[29954.151981] mmc0: sdhci: Present: 0x1fff0000 | Host ctl: 0x0000001f
[29954.151987] mmc0: sdhci: Power: 0x0000000f | Blk gap: 0x00000000
[29954.151992] mmc0: sdhci: Wake-up: 0x00000000 | Clock: 0x00000007
[29954.151998] mmc0: sdhci: Timeout: 0x0000000a | Int stat: 0x00000000
[29954.152004] mmc0: sdhci: Int enab: 0x03ff008b | Sig enab: 0x03ff008b
[29954.152009] mmc0: sdhci: ACmd stat: 0x00000000 | Slot int: 0x00000000
[29954.152014] mmc0: sdhci: Caps: 0x176ec8b0 | Caps_1: 0x03002177
[29954.152019] mmc0: sdhci: Cmd: 0x0000123a | Max curr: 0x00000000
[29954.152023] mmc0: sdhci: Resp[0]: 0x00000900 | Resp[1]: 0x00000900
[29954.152028] mmc0: sdhci: Resp[2]: 0x00000900 | Resp[3]: 0x00000900
[29954.152031] mmc0: sdhci: Host ctl2: 0x0000804b
[29954.152037] mmc0: sdhci: ADMA Err: 0x00000001 | ADMA Ptr: 0x000000045bfcd204
[29954.152039] mmc0: sdhci: ============================================
[29954.152111] mmc0: Unexpected interrupt 0x04000000.
[29954.152112] mmc0: sdhci: ============ SDHCI REGISTER DUMP ===========
[29954.152118] mmc0: sdhci: Sys addr: 0x00000000 | Version: 0x00001502
[29954.152123] mmc0: sdhci: Blk size: 0x00007200 | Blk cnt: 0x00000000
[29954.152129] mmc0: sdhci: Argument: 0x00000000 | Trn mode: 0x00000033
[29954.152135] mmc0: sdhci: Present: 0x1fff0001 | Host ctl: 0x0000001f
[29954.152141] mmc0: sdhci: Power: 0x0000000f | Blk gap: 0x00000000
[29954.152146] mmc0: sdhci: Wake-up: 0x00000000 | Clock: 0x00000007
[29954.152151] mmc0: sdhci: Timeout: 0x0000000a | Int stat: 0x00000000
[29954.152156] mmc0: sdhci: Int enab: 0x03ff008b | Sig enab: 0x03ff008b
[29954.152161] mmc0: sdhci: ACmd stat: 0x00000000 | Slot int: 0x00000000
[29954.152167] mmc0: sdhci: Caps: 0x176ec8b0 | Caps_1: 0x03002177
[29954.152172] mmc0: sdhci: Cmd: 0x00000c1a | Max curr: 0x00000000
[29954.152177] mmc0: sdhci: Resp[0]: 0x00000900 | Resp[1]: 0x00000900
[29954.152182] mmc0: sdhci: Resp[2]: 0x00000900 | Resp[3]: 0x00000900
[29954.152185] mmc0: sdhci: Host ctl2: 0x0000800b
[29954.152192] mmc0: sdhci: ADMA Err: 0x00000001 | ADMA Ptr: 0x000000045bfcd204
[29954.152193] mmc0: sdhci: ============================================
[29960.352164] mmc0: card e624 removed
dmesg
mount成功时输出:
[ 104.086813] mmc0: Skipping voltage switch
[ 105.010489] mmc0: new high speed SDHC card at address e624
[ 105.011082] mmcblk0: mmc0:e624 SC16G 14.8 GiB
[ 139.106588] mmcblk0:
注意相关性:
- 超高速 -> 失败,
- 高速->成功。
手动挂载尝试:
% sudo mount -v -t vfat /dev/mmcblk0 /mnt
mount: /mnt: wrong fs type, bad option, bad superblock on /dev/mmcblk0, missing codepage or helper program, or other error.
尽管如此,Disks 基准测试还是有效的。平均读取速度为 50 MB/s(受内置 USB 2 限制),平均写入速度为 1 MB/s(这是 Apple 硬件的糟糕性能)。
磁盘格式化经常失败,原因如下:
Error formatting volume Error after formatting with type vfat: Timed-out waiting for object (udisk-error-quark 0)
手动格式化可能会起作用:
% sudo mkfs.vfat -v -F 32 -n LUMIX -I /dev/mmcblk0
mkfs.fat 4.1 (2017-01-24)
attribute "partition" not found
/dev/mmcblk0 has 4 heads and 16 sectors per track,
hidden sectors 0x0000;
logical sector size is 512,
using 0xf8 media descriptor, with 31116288 sectors;
drive number 0x80;
filesystem has 2 32-bit FATs and 16 sectors per cluster.
FAT size is 15184 sectors, and provides 1942868 clusters.
There are 32 reserved sectors.
Volume ID is 01436e04, volume label LUMIX .
SD 卡曾经自动挂载过。我至少连续失败了 30 次。重新格式化后通常会成功。
一旦卡已安装并保持插入状态,重新安装总会成功。
内部 SD 卡读卡器可能有缺陷。由于相同的硬件与 Mac OS 完美兼容,我猜想 Apple 已经找到了一种解决方法,而 Ubuntu 却忽略了它。
内部 SD 卡读卡器的属性:
% sudo lspci -s 02:00.1 -v
02:00.1 SD Host controller: Broadcom Inc. and subsidiaries BCM57765/57785 SDXC/MMC Card Reader (rev 10) (prog-if 01)
Subsystem: Broadcom Inc. and subsidiaries BCM57765/57785 SDXC/MMC Card Reader
Flags: bus master, fast devsel, latency 0, IRQ 17
Memory at a0420000 (64-bit, prefetchable) [size=64K]
Capabilities: [48] Power Management version 3
Capabilities: [58] MSI: Enable- Count=1/1 Maskable- 64bit+
Capabilities: [ac] Express Endpoint, MSI 00
Capabilities: [100] Advanced Error Reporting
Capabilities: [150] Power Budgeting <?>
Capabilities: [160] Virtual Channel
Kernel driver in use: sdhci-pci
Kernel modules: sdhci_pci
% /sbin/modinfo sdhci-pci
filename: /lib/modules/5.8.0-31-generic/kernel/drivers/mmc/host/sdhci-pci.
ko
license: GPL
description: Secure Digital Host Controller Interface PCI driver
author: Pierre Ossman <[email protected]>
% uname -a
Linux mac2011-linux 5.8.0-31-generic #33-Ubuntu SMP Mon Nov 23 18:44:54 UTC 2020 x86_64 x86_64 x86_64 GNU/Linux
几个星期前,也就是 11 月 23 日之前,我遇到了其他 SD 卡问题,但我没有注意到当前的问题,所以我敢打赌,sdhci 在上次内核修订中受到了影响。
答案1
内部读卡器确实存在缺陷:它并不总是识别超高速,但这个缺陷有一个积极的副作用:允许以高速安装。
SD 卡可以始终以高速安装,而不是超高速安装,如下所示:
% sudo rmmod sdhci_pci sdhci
% sudo modprobe sdhci debug_quirks2=4
% sudo modprobe sdhci_pci
(此改变不是永久性的。)
磁盘基准测试结果:
- 读取:24 MB/s,
- 写入:9 MB/s。
读取速度不如超高速,但幸运的是写入速度快得多!读取速度为 50 MB/s,写入速度为 10 MB/s 就很棒了。
debug_quirks2=0x4
该问题可以通过传递给 sdhci 内核模块来解决。
答案2
Add the following to /etc/modprobe.d/sdhci.conf:
options sdhci debug_quirks2=4
Re-generate initrd:
sudo update-initramfs -u -k all
Reboot or reload sdhci module:
sudo rmmod sdhci-pci sdhci
sudo modprobe sdhci