2018年4月29日日曜日

Linux kernel 4.16.5でRealtekのUSB SD/MMC card readerを使う

以前は普通に使えていた気がするのだが、いつの間にやらSD cardを挿入しても認識しなくなっていた (`/dev/mmcblk0p1`のようなdevice fileが作られない)ので、原因を調べてみた。

結論から言うと、必要なdevice driversが組み込まれていなかったのが原因だった。

環境


* ASUS X200LA
* Debian GNU/Linux (amd64, sid)
* Linux kernel 4.16.5
* Realtek RTS5129 card reader controller


実際の手順


何を探せばいい?


`lsusb`を使うと実際に使えるかどうかは別として接続されている (認識している?)devicesを表示してくれるので、それを元にしてkernelに組み込むべきdevice driver(s)を探せばいい。

今回の場合は:

% lsusb
...
Realtek Semiconductor Corp. RTS5129 Card Reader Controller
...

RealtekのRTS5129というdeviceに対するdriverを探す。

対応しているdriverやmoduleは?


kernelを自前でbuildしているので、取り敢えず`make menuconfig`を使い、それっぽいoptionがないかを探してみる。"realtek"で検索してみたところ、それっぽいoptionが見付かった:

`MMC_REALTEK_USB` ("Device Drivers" → "MMC/SD/SDIO card support" → "Realtek USB SD/MMC Card Interface Driver") = `rtsx_usb_sdmmc`

そのまんまな名前だ。helpにもそれっぽいことが書かれているので試してみる価値はあると思ったのだが、なぜかmenuに表示されておらず、故にy/mで選択もできない。その原因は依存関係が満たされていないためだった:

`MISC_RTSX_USB` ("Device Drivers" → "Misc devices" → "Realtek USB card reader") = `rtsx_usb`

このoptionをy/m何れかに設定すると、`MMC_REALTEK_USB`を選択する項目が表示されこちらもy/m何れか選択できるようになる。

動作確認


Kernelをrebuildしてinstall、rebootした後に、SD cardを差し込んで認識されることを確認。`lsmod`でも見てみる:

% lsmod | rg mmc
mmc_block
rtsx_usb_sdmmc
mmc_core
rtsx_usb

0 件のコメント:

コメントを投稿