
У меня есть ноутбук со встроенным картридером. В течение последнего года или около того я сталкивался с любопытной проблемой, которая, похоже, больше связана с программным обеспечением, чем с оборудованием.
Я использую двойную загрузкуWindows 7иУбунту 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-карталюбойразмер хранилища, и это произойдет влюбойвремя при передаче, особенно с большими файлами или большим количеством файлов. Я щелкнул правой кнопкой мыши по значку SD-карты на панели Ubuntu и щелкнул Safely remove
перед извлечением SD, и даже переформатировал SD, чтобы на ней не было ошибок, но она все еще вызывает у меня проблемы. Мои USB-флешки отформатированы в том же формате (FAT32), что и SD-карта, и все они работают нормально.Почему 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
Быстрый поиск в Google информации о контроллере вашей карты возвращает другие сообщения от людей, указывающих на ядро как на виновника. У меня нет конкретного отчета об ошибке, на который можно сослаться, поэтому я не могу точно сказать, существует ли исправление в upstream, но есть простой способ узнать, доступно ли оно. Установите и загрузите более новое ядро и посмотрите, улучшилась ли проблема с SD-картой. Вашему компьютеру это не навредит, и вы всегда можете удалить ее, если она вам не нужна.
Запустите apt-cache search linux-generic-lts
, чтобы увидеть другие доступные пакеты ядра. Последний, который я вижу в репозитории, это linux-generic-lts-wily. Вы можете sudo apt-get install linux-generic-lts-wily
перезагрузиться в новое ядро и снова проверить SD-накопитель.