SD 卡无法安装在 Broadcom BCM57765/57785 (Macbook pro) 读卡器中

Pie*_*ÈDE 4 mount kernel sd-card

我有一张微型 SD 卡,SanDisk Ultra 16 GB,超高速,格式化 FAT,位于 SD 适配器中,以及运行 Ubuntu 20.10 的 Macbook pro 8,1。

  • SD 卡无法在内置 SD 卡读卡器中使用:在磁盘中显示为 16 GB 未知。

  • 同一张 SD 卡通过 USB 外部读卡器工作。

  • 使用 Mac 操作系统重新启动后,它也可以在同一台 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
Run Code Online (Sandbox Code Playgroud)

dmesg挂载成功时输出:

[  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:
Run Code Online (Sandbox Code Playgroud)

注意相关性:

  • 超高速->故障,
  • 高速->成功。

手动安装尝试:

% 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.
Run Code Online (Sandbox Code Playgroud)

尽管如此,磁盘基准测试仍然有效。平均读取速率 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)
Run Code Online (Sandbox Code Playgroud)

手动格式化可能有效:

% 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      .
Run Code Online (Sandbox Code Playgroud)

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 <pierre@ossman.eu>

% 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
Run Code Online (Sandbox Code Playgroud)

几周前,即 11 月 23 日之前,我还遇到了其他 SD 卡问题,但我没有注意到当前的问题,所以我敢打赌,在上一次内核修订中涉及了 sdhci。

Pie*_*ÈDE 5

内置读卡器确实有一个缺陷:它并不总是识别超高速,但这个缺陷有一个积极的副作用:允许高速安装。

SD 卡可以始终以高速安装,而不是超高速安装,如下所示:

% sudo rmmod sdhci_pci sdhci
% sudo modprobe sdhci debug_quirks2=4
% sudo modprobe sdhci_pci
Run Code Online (Sandbox Code Playgroud)

(此更改不是永久性的。)

磁盘基准测试结果:

  • 读取:24 MB/秒,
  • 写入:9 MB/秒。

读取速度比超高速差,但幸运的是写入速度要快得多!读取速度为 50 MB/秒,写入速度为 10 MB/秒就很棒了。

关于 Debian 的类似报告

建议的解决方案

debug_quirks2=0x4该问题可以通过传递给 sdhci 内核模块来解决。

Linux 内核中的一个已知错误