© 2018 WebHive

Заставляем работать SD card reader на Acer Aspire V3-571G

На днях купил новую SD карточку от компании Sandisk на 64 Гб. Терзаемый смутными предчувствиями воткнул её в кард-ридер ноутбука и получил облом — карта не читается. Конечно же проблема в итоге была решена о чём я и спешу поведать.

Итак не обнаружив никаких признаков жизни карты вполне ожидаемо полез смотреть логи ядра.

$ dmesg
...
[  378.772603] mmc0: new high speed SDXC card at address aaaa
[  378.773009] mmcblk0: mmc0:aaaa SE64G 59.5 GiB

Ну что — в принципе уже неплохо. По крайней мере она определилась. После извлечения dmesg выдаёт какие-то ужасные дампы и регистры и ругань на тайм-ауты. Даже разбираться с этим не хочу. Лучше погуглить.

Ну и естественно методом нехитрого гугления был обнаружен следующий рецепт https://gist.github.com/samgooi4189/2e6e18fd1d562acaf39246e5e386d7cb В общем там поссылке какое-то лютое шаманство с setpci. Если на пальцах то нам надо сначала найти идентификатор устройства на шине PCI.

$ lspci
...
02:00.2 System peripheral: Broadcom Limited BCM57765/57785 MS Card Reader (rev 10)
...

Ну вот эти цифирьки в начале это он и есть. Далее прописываем в автозагрузку setpci -s 02:00.2 0x50.B=0x41. Ну я думаю видно куда я подставил идентификатор, а дальнейшие параметры команды это уже шаманство, поэтому скачать, что это значит я не могу.

Ну и создаём файлик для установки параметров модуля

$ cat /etc/modprobe.d/sdhci.conf
options sdhci debug_quirks2=4

Теперь перезагрузка. Да-да — я знаю можно выгрузить модули, загрузить модули — к чорту. Просто тупо перезагружаюсь и втыкаю карту.

$ dmesg
[  378.772603] mmc0: new high speed SDXC card at address aaaa
[  378.773009] mmcblk0: mmc0:aaaa SE64G 59.5 GiB
[  378.773840]  mmcblk0: p1

Уже лучше — как минимум виден раздел. Но любая попытка обратиться к нему выдаёт ошибку насчёт отсутствия поддержки ядром файловой системы ExFat. Я почему-то думал, что ядро Linux такие штуки поддерживает, но вот нате вам. Как оказалось ExFat у нас подключается через богомерзкий FUSE, но оказалось, что есть даже ядрёные модули, которые и были немедленно установлены.

$ yay -S exfat-dkms-git exfat-utils-nofuse

Теперь втыкаю карточку и «бинго!» — всё работает.

$ dmesg
[  378.772603] mmc0: new high speed SDXC card at address aaaa
[  378.773009] mmcblk0: mmc0:aaaa SE64G 59.5 GiB
[  378.773840]  mmcblk0: p1
[  379.007135] exFAT: Version 1.2.9
[  379.007366] [EXFAT] trying to mount...
[  379.052493] [EXFAT] mounted successfully

Eсли кому-то пригодилось — буду рад.

Комментарии