Вопрос или проблема
После возобновления из режима ожидания внутренний ридер SD-карт больше не распознается. Устройство отсоединяется во время процесса пробуждения ([105.537469] в dmesg).
- MacBookPro12,1 начало 2015 года
- Kernel: 6.8.0-53-generic
- GNOME v: 46.0
- Distro: Ubuntu 24.04.2 LTS (Noble Numbat)
Я ищу решение, чтобы предотвратить отсоединение устройства во время пробуждения. Любая помощь или руководство будут очень признательны.
Перед режимом ожидания
$ lsusb
Bus 002 Device 002: ID 05ac:8406 Apple, Inc. Internal Memory Card Reader
$ lsusb -t
/: Bus 002.Port 001: Dev 001, Class=root_hub, Driver=xhci_hcd/4p, 5000M
|__ Port 003: Dev 002, If 0, Class=Mass Storage, Driver=usb-storage, 5000M
$ lsscsi
[0:0:0:0] диск APPLE SD Card Reader 3.00 /dev/sda
$ lspci
00:14.0 USB контроллер: Intel Corporation Wildcat Point-LP USB xHCI Controller (rev 03)
В файле dmesg:
Во время свежего запуска и до перехода в режим ожидания все ок
[1.273878] usb 2-3: Product: Card Reader
[3.469052] usb-storage 2-3:1.0: USB Mass Storage device detected
[3.562711] scsi host0: usb-storage 2-3:1.0
[4.573754] scsi 0:0:0:0: Direct-Access APPLE SD Card Reader 3.00 PQ: 0 ANSI: 6
Переход в режим ожидания или закрытие крышки, затем пробуждение:
[ 81.999606] PM: suspend entry (deep)
[ 82.011337] Filesystems sync: 0.011 seconds
[ 82.016738] Freezing user space processes
[ 82.019055] Freezing user space processes completed (elapsed 0.002 seconds)
[ 82.019060] OOM killer disabled.
[ 82.019061] Freezing remaining freezable tasks
[ 82.020238] Freezing remaining freezable tasks completed (elapsed 0.001 seconds)
[ 82.020280] printk: Suspending console(s) (use no_console_suspend to debug)
[ 82.021325] FWMSG: [ISP] CMD = 0x0001 [CISP_CMD_STOP]
[ 82.032592] facetimehd 0000:02:00.0: fthd_hw_deinit
[ 82.032797] pcieport 0000:00:1c.0: Enabling MPC IRBNCE
[ 82.032801] pcieport 0000:00:1c.0: Intel PCH root port ACS workaround enabled
[ 82.097964] ACPI: EC: interrupt blocked
[ 82.206838] ACPI: PM: Preparing to enter system sleep state S3
[ 82.314666] ACPI: EC: event blocked
[ 82.314668] ACPI: EC: EC stopped
[ 82.314669] ACPI: PM: Saving platform NVS memory
[ 82.314689] Disabling non-boot CPUs ...
[ 82.316145] smpboot: CPU 1 is now offline
[ 82.318463] smpboot: CPU 2 is now offline
[ 82.320667] smpboot: CPU 3 is now offline
[ 82.322250] ACPI: PM: Low-level resume complete
[ 82.322285] ACPI: EC: EC started
[ 82.322286] ACPI: PM: Restoring platform NVS memory
[ 82.322712] Enabling non-boot CPUs ...
[ 82.322909] smpboot: Booting Node 0 Processor 1 APIC 0x2
[ 82.337957] hrtimer: interrupt took 2580576 ns
[ 84.282921] CPU1 is up
[ 84.283872] smpboot: Booting Node 0 Processor 2 APIC 0x1
[ 84.289170] CPU2 is up
[ 84.289191] smpboot: Booting Node 0 Processor 3 APIC 0x3
[ 102.719982] CPU3 is up
[ 102.730428] ACPI: PM: Waking up from system sleep state S3
[ 102.732317] ACPI: EC: interrupt unblocked
[ 102.732592] pcieport 0000:00:1c.1: Enabling MPC IRBNCE
[ 102.732598] pcieport 0000:00:1c.1: Intel PCH root port ACS workaround enabled
[ 102.732646] pcieport 0000:00:1c.4: Enabling MPC IRBNCE
[ 102.732651] pcieport 0000:00:1c.0: Enabling MPC IRBNCE
[ 102.732651] pcieport 0000:00:1c.4: Intel PCH root port ACS workaround enabled
[ 102.732654] pcieport 0000:00:1c.0: Intel PCH root port ACS workaround enabled
[ 102.733140] pcieport 0000:00:1c.5: Enabling MPC IRBNCE
[ 102.733145] pcieport 0000:00:1c.5: Intel PCH root port ACS workaround enabled
[ 102.733190] pcieport 0000:00:1c.2: Enabling MPC IRBNCE
[ 102.733194] pcieport 0000:00:1c.2: Intel PCH root port ACS workaround enabled
[ 102.752762] ACPI: EC: event unblocked
[ 102.753713] facetimehd 0000:02:00.0: Found FaceTime HD camera with device id: 1570
[ 102.753834] facetimehd 0000:02:00.0: Setting 64bit DMA mask
[ 102.759684] facetimehd 0000:02:00.0: S2 PCIe link init succeeded
[ 102.759725] facetimehd 0000:02:00.0: Refclk: 25MHz (0xa)
[ 102.762005] nvme nvme0: 4/0/0 default/read/poll queues
[ 102.766685] nvme nvme0: Ignoring bogus Namespace Identifiers
[ 102.769741] facetimehd 0000:02:00.0: PLL reset finished
[ 102.769743] facetimehd 0000:02:00.0: Waiting for S2 PLL to lock at 450 MHz
[ 102.769756] facetimehd 0000:02:00.0: S2 PLL is locked after 10 us
[ 102.779761] facetimehd 0000:02:00.0: S2 PLL is in bypass mode
[ 102.799794] facetimehd 0000:02:00.0: DDR40 PHY PLL locked on safe settings
[ 102.799808] facetimehd 0000:02:00.0: STRAP valid
[ 102.799808] facetimehd 0000:02:00.0: Configuring DDR PLLs for 450 MHz
[ 102.799816] facetimehd 0000:02:00.0: DDR40 PLL is locked after 0 us
[ 102.799825] facetimehd 0000:02:00.0: First DDR40 VDL calibration completed after 2 us
[ 102.799836] facetimehd 0000:02:00.0: Second DDR40 VDL calibration completed after 2 us
[ 102.799837] facetimehd 0000:02:00.0: Using step size 149
[ 102.799842] facetimehd 0000:02:00.0: VDL set to: coarse=0x10008, fine=0x1011a
[ 102.799847] facetimehd 0000:02:00.0: Virtual VTT enabled
[ 102.820365] facetimehd 0000:02:00.0: S2 DRAM memory address: 0x22159559
[ 102.820379] facetimehd 0000:02:00.0: Rewrite DDR mode registers succeeded
[ 102.820573] facetimehd 0000:02:00.0: Full memory verification succeeded! (0)
[ 102.939363] facetimehd 0000:02:00.0: Loaded firmware, size: 1392kb
[ 103.088252] facetimehd 0000:02:00.0: ISP woke up after 0ms
[ 103.088260] facetimehd 0000:02:00.0: Number of IPC channels: 7, queue size: 44865
[ 103.088264] facetimehd 0000:02:00.0: Firmware requested heap size: 3072kb
[ 103.098280] facetimehd 0000:02:00.0: ISP second int after 0ms
[ 103.098283] facetimehd 0000:02:00.0: Channel description table at 00800000
[ 103.108532] facetimehd 0000:02:00.0: magic value: 00000000 after 0 ms
[ 103.108534] facetimehd 0000:02:00.0: Enabling interrupts
[ 103.108705] FWMSG:
[ 103.108739] FWMSG: - APOLLO-ISP-APPLE ------------------------------------------------------------
[ 103.108749] FWMSG:
[ 103.108763] FWMSG: Restart count : 0
[ 103.108850] FWMSG: Platform : mode = TARGET, ID = 0x00000000, HW = 00020018.00000000
[ 103.108868] FWMSG: System Clock : 200000000 Hz
[ 103.108885] FWMSG: Processor mode : SUPERVISOR
[ 103.108905] FWMSG: Cache architecture type : SEPARATE
[ 103.108922] FWMSG: Cache type : WRITEBACK
[ 103.108940] FWMSG: Data Cache Line : 32 [0x20]
[ 103.108957] FWMSG: Boot arguments entries : 2
[ 103.108994] FWMSG: 0000: 0x00000000 0x00000000
[ 103.109028] FWMSG: Physical memory base : 0x00000000 [TLB base 0x00160000]
[ 103.109048] FWMSG: Main memory : base : 0x00000000
[ 103.109123] FWMSG: size : 8388608 [0x00800000] [8.0 MB]
[ 103.109149] FWMSG: Extra heap : base : 0x2080b000 [phy = 0x0080b000]
[ 103.109175] FWMSG: size : 3145728 [0x00300000] [3.0 MB]
[ 103.109198] FWMSG: Shared window : base : 0x00800000 [static wiring]
[ 103.109275] FWMSG: size : 125829120 [0x07800000] [120.0 MB]
[ 103.109294] FWMSG: Shared memory : base : 0x00800000
[ 103.109321] FWMSG: size : 260046848 [0x0f800000] [248.0 MB]
[ 103.109420] FWMSG: TEXT : 1421992 [0x15b2a8] - text 667256, cstring 38749, const 715528
[ 103.109450] FWMSG: DATA : 8076 [0x1f8c] - data 0, bss 460, common 1452, noinit 6144
[ 103.109471] FWMSG: Heap free space : 10002626 [0x0098a0c2]
[ 103.109512] FWMSG: Heap allocated space : 94656 [0x000171c0]
[ 103.109538] FWMSG: Disclaimer : Copyright (c) APPLE Inc. All Rights Reserved.
[ 103.109556] FWMSG: Application : adc [release]
[ 103.109576] FWMSG: Linked on : Jul 25 2015 - 08:48:55
[ 103.109594] FWMSG: Release : S2ISP-01.43.00
[ 103.109609] FWMSG: H4ISPAPPLE : 11536
[ 103.109623] FWMSG: H4ISPCD : 4081
[ 103.109658] FWMSG: ffw : 4143
[ 103.109702] FWMSG: Tool-chain : iPhone OS - 7.0.3 [clang/clang++]
[ 103.109712] FWMSG:
[ 103.109744] FWMSG: -------------------------------------------------------------------------------
[ 103.109753] FWMSG:
[ 103.182972] FWMSG: [ISP] CMD = 0x0004 [CISP_CMD_PRINT_ENABLE]
[ 103.183122] FWMSG: [ISP] CMD = 0x0003 [CISP_CMD_CONFIG_GET]
[ 103.183318] FWMSG: [ISP] CH = 0 CMD = 0x010d [CISP_CMD_CH_INFO_GET]
[ 103.183511] facetimehd 0000:02:00.0: Direct firmware load for facetimehd/1871_01XX.dat failed with error -2
[ 105.532726] OOM killer enabled.
[ 105.532729] Restarting tasks ...
[ 105.537469] usb 2-3: USB disconnect, device number 2
[ 105.544713] done.
[ 105.544727] random: crng reseeded on system resumption
[ 105.578645] bcm5974: bad trackpad package, length: 8
[ 105.666873] PM: suspend exit
Просматривая GitHub, я нашел патч, который, по-видимому, работает, он был реализован в 2018-2019 годах с ядром Linux версии 5.0.0-rc8+, но я не смог его реализовать, так как сейчас ядро немного другое.
https://github.com/im-0/investigate-card-reader-suspend-problem-on-mbp11.4.
.
Ответ или решение
Обнаружение проблемы с встроенным кардридером после выхода из режима сна на вашем MacBookPro12,1 (выпущенного в 2015 году) может быть тревожным, особенно если ваш ноутбук используется для обработки данных с SD-карт. Рассмотрим вашу ситуацию детально и предложим комплексное решение.
Теория:
Современные ноутбуки требуют поддержки периферийных устройств, таких как кардридеры, которые могут испытывать проблемы из-за особенностей работы системы управления питанием, процессов и драйверов. Устройство управления ввода-вывода (ACPI) обеспечивает управление энергопотреблением, когда система переходит в различные состояния энергосбережения, такие как режим сна или гибернации. Однако, при переходе в режим сна и выходе из него, могут возникать сбои в подаче питания и подключении устройств.
В вашей ситуации, после резюме из режима сна, встроенный кардридер становится недоступным. Анализ логов dmesg
показывает, что устройство теряет подключение — «usb 2-3: USB disconnect, device number 2». Это может происходить из-за сбоя в драйвере либо вследствие проблемной поддержки прерывистых сигналов (интерпретируемых компонентом ACPI) при восстановлении системы из низкоэнергетического режима.
Пример:
Ваши логи и команда lsusb
до перехода в режим сна демонстрируют, что кардридер отображается как устройство Apple с ID 05ac:8406. Однако, после пробуждения, кардридер не обнаруживается, что подтверждается сообщением об отключении USB в логе системы.
Вы также упомянули патч, найденный в GitHub, который работает для более ранних версий ядра Linux. Этот патч управляет реконфигурацией и повторным подключением устройств после выхода из режима сна, решая проблему на более ранних версиях ядра (5.x). Несмотря на то, что вы не смогли внедрить его, этот пример показывает, что проблема может быть связана с несовместимостью или устареванием поддержки в вашей текущей системе.
Применение:
-
Обновление ядра и дистрибутива: Прежде всего, убедитесь, что вы используете самую последнюю версию ядра, доступную в вашей системе, и обновите его при необходимости. Новые версии ядра могут содержать исправления, касающиеся управления различными устройствами.
-
Проверка настроек управления питанием: Проанализируйте ваши настройки питания в BIOS/UEFI и системе (например, параметры suspend и hibernate). Попробуйте отключить глубокий сон (deep sleep) или выполнить настройку "существующего постоянного питания для USB" (wake-on-USB), если это поддерживается вашей системой.
-
Проверка драйверов: Убедитесь, что вы используете обновленные версии драйверов для вашего кардридера. В некоторых случаях можно попробовать использовать генерализованные драйверы USB для Mass Storage.
-
Установка патча: Если у вас есть опыт работы с ядром Linux, попробуйте вручную интегрировать патч из репозитория GitHub, адаптировав его к вашей текущей версии ядра. Это предполагает перекомпиляцию ядра с внесением необходимых изменений.
-
Диагностика Log-Сообщений: Используйте возможности диагностики, чтобы интерпретировать сообщения из журналов, особенно в контексте ACPI и контроллеров USB, для выявления и устранения причин сбоя.
-
Создание скриптов или хуков для автоматизации: Разработайте скрипт, использующий
udevadm
для автоматического переподключения устройства после выхода из спящего режима. Это временное решение может помочь восполнить пробелы в управлении энергопитанием.
Заключительно, важно учитывать, что поддержка на уровне оборудования и операционной системы, исполняющаяся на MacBook под Ubuntu, всегда будет зависеть от совместимости и специфики реализации. Некоторые проблемы могут быть специфичны именно для вашего аппаратного обеспечения и требовать специфических решений или решений на уровне драйвера. Надеюсь, приведенные решения помогут вам вернуть ваш кардридер в рабочее состояние после резюме из режима сна.