На днях купил новую 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сли кому-то пригодилось — буду рад.
Комментарии