ログインしてさらにmixiを楽しもう

コメントを投稿して情報交換!
更新通知を受け取って、最新情報をゲット!

DebianコミュのノートPCの内蔵SDカードスロットを使用したい

  • mixiチェック
  • このエントリーをはてなブックマークに追加
ノートPCの内蔵SDカードスロットを使用したいと思っているのですが、
なかなか使用できるようになりません。

サーチエンジンなどで検索してみても、できそうなできなさそうな…で
いまいちはっきりしませんし。。。

個人的にはできないことはないだろう…と信じてはいるのですが、
今のところ解決には至っていません。

Linuxを使い始めて2ヶ月とまだ日が浅いのですが、
苦労は惜しまないつもりですので、ハードルの高い方法でもかまわないので
ご教授いただければと思います。

なお、使用しているPCですが、東芝のdynabookで型番はPATX860LS(品名はTS/860LS)です。
OSは Debian Gnue/Linux 4.0 r2を使用しています。
提供されている各種バージョンアップについてもすべて適用済みです。

以下にuname -a、lspciおよびlsmodの結果も掲載させていただきます。

その他、不足の情報等がありましたら、お知らせいただければと思います。

---------------------------------------------------------------------
# uname -a
Linux LOVE-X 2.6.18-6-686 #1 SMP Sun Feb 10 22:11:31 UTC 2008 i686 GNU/Linux

---------------------------------------------------------------------
# lspci
00:00.0 Host bridge: ATI Technologies Inc Unknown device 5a31 (rev 01)
00:01.0 PCI bridge: ATI Technologies Inc RS480 PCI Bridge
00:04.0 PCI bridge: ATI Technologies Inc RS480 PCI Bridge
00:12.0 IDE interface: ATI Technologies Inc ATI 4379 Serial ATA Controller (rev 80)
00:13.0 USB Controller: ATI Technologies Inc IXP SB400 USB Host Controller (rev 80)
00:13.1 USB Controller: ATI Technologies Inc IXP SB400 USB Host Controller (rev 80)
00:13.2 USB Controller: ATI Technologies Inc IXP SB400 USB2 Host Controller (rev 80)
00:14.0 SMBus: ATI Technologies Inc IXP SB400 SMBus Controller (rev 82)
00:14.1 IDE interface: ATI Technologies Inc Standard Dual Channel PCI IDE Controller ATI (rev 80)
00:14.2 Audio device: ATI Technologies Inc SB450 HDA Audio (rev 01)
00:14.3 ISA bridge: ATI Technologies Inc IXP SB400 PCI-ISA Bridge (rev 80)
00:14.4 PCI bridge: ATI Technologies Inc IXP SB400 PCI-PCI Bridge (rev 80)
01:05.0 VGA compatible controller: ATI Technologies Inc RC410 [Radeon Xpress 200M]
08:04.0 Ethernet controller: Atheros Communications, Inc. AR5005G 802.11abg NIC (rev 01)
08:06.0 CardBus bridge: Texas Instruments PCIxx12 Cardbus Controller
08:06.1 FireWire (IEEE 1394): Texas Instruments PCIxx12 OHCI Compliant IEEE 1394 Host Controller
08:06.2 Mass storage controller: Texas Instruments 5-in-1 Multimedia Card Reader (SD/MMC/MS/MS PRO/xD)
08:06.3 Generic system peripheral [0805]: Texas Instruments PCIxx12 SDA Standard Compliant SD Host Controller
08:07.0 Ethernet controller: Realtek Semiconductor Co., Ltd. RTL-8139/8139C/8139C+ (rev 10)

---------------------------------------------------------------------
# lsmod
Module Size Used by
rfcomm 34712 0
l2cap 21760 5 rfcomm
bluetooth 46020 4 rfcomm,l2cap
vboxdrv 47552 0
ppdev 8676 0
parport_pc 32132 0
lp 11012 0
parport 33256 3 ppdev,parport_pc,lp
button 6672 0
ac 5188 0
battery 9636 0
ipv6 226272 174
wlan_wep 6560 1
sbp2 20840 0
loop 15048 0
joydev 9088 0
pcmcia 34140 0
firmware_class 9600 1 pcmcia
wlan_scan_sta 12064 1
snd_hda_intel 17332 0
snd_hda_codec 137856 1 snd_hda_intel
ath_rate_sample 11136 1
snd_pcm_oss 38368 0
snd_mixer_oss 15200 1 snd_pcm_oss
sdhci 16844 0
mmc_core 23168 1 sdhci
snd_pcm 68676 3 snd_hda_intel,snd_hda_codec,snd_pcm_oss
snd_timer 20996 1 snd_pcm
snd 47012 6 snd_hda_intel,snd_hda_codec,snd_pcm_oss,snd_mixer_oss,snd_pcm,snd_timer
ath_pci 82656 0
wlan 177572 5 wlan_wep,wlan_scan_sta,ath_rate_sample,ath_pci
ath_hal 191504 3 ath_rate_sample,ath_pci
rtc 12372 0
yenta_socket 24460 1
rsrc_nonstatic 11840 1 yenta_socket
pcmcia_core 36852 3 pcmcia,yenta_socket,rsrc_nonstatic
psmouse 35016 0
serio_raw 6660 0
i2c_piix4 8268 0
pcspkr 3072 0
i2c_core 19680 1 i2c_piix4
ati_agp 8652 0
agpgart 29896 1 ati_agp
soundcore 9248 1 snd
snd_page_alloc 10184 2 snd_hda_intel,snd_pcm
shpchp 33024 0
pci_hotplug 28704 1 shpchp
tsdev 7520 0
eth1394 18212 0
evdev 9088 1
ext3 119240 3
jbd 52456 1 ext3
mbcache 8356 1 ext3
dm_mirror 19152 0
dm_snapshot 15552 0
dm_mod 50232 9 dm_mirror,dm_snapshot
ide_generic 1408 0 [permanent]
sd_mod 19040 3
ide_cd 36064 0
cdrom 32544 1 ide_cd
8139too 25120 0
usbhid 37248 0
generic 4868 0 [permanent]
8139cp 21920 0
mii 5344 2 8139too,8139cp
ohci1394 30800 0
ieee1394 86904 3 sbp2,eth1394,ohci1394
atiixp 6128 0 [permanent]
ide_core 110504 4 ide_generic,ide_cd,generic,atiixp
ehci_hcd 28136 0
ohci_hcd 18276 0
sata_sil 11464 2
usbcore 112644 4 usbhid,ehci_hcd,ohci_hcd
libata 89396 1 sata_sil
scsi_mod 124168 3 sbp2,sd_mod,libata
thermal 13608 0
processor 28840 1 thermal
fan 4804 0

コメント(5)

SDカードのスロットサポートがカーネルに入っていますが、お持ちのマシンで使われている TIのXX12 チップは、運悪くまだサポート対象になっていません。

lspciの必要な部分

08:06.0 CardBus bridge: Texas Instruments PCIxx12 Cardbus Controller
08:06.1 FireWire (IEEE 1394): Texas Instruments PCIxx12 OHCI Compliant IEEE 1394 Host Controller
08:06.2 Mass storage controller: Texas Instruments 5-in-1 Multimedia Card Reader (SD/MMC/MS/MS PRO/xD)
08:06.3 Generic system peripheral [0805]: Texas Instruments PCIxx12 SDA Standard Compliant SD Host Controller

できれば、lspci -nとかを示した方が、調べやすいかも。:)

同一チップでは、うまくいかないレポート
http://www.linuxquestions.org/questions/linux-hardware-18/fix-for-texas-instruments-6-in-1-pcixx21-flash-media-reader-497403/

カーネルソースに入っているsdhci.cの一部
.vendor = PCI_VENDOR_ID_TI,
.device = PCI_DEVICE_ID_TI_XX21_XX11_SD,
パナソニックのレッツノートのようにRICOH製のチップは動くようです。ここにあるようにXX21とか、XX11というチップは対応しているのですが、XX12はだめみたいですね。

動く保証もありませんし、最悪ハードウエアを壊す可能性もありますが、このsdhci.c (/usr/src/linux/driver/mmc/host/にある)のソースの、上記の構造体へ
{
.vendor = PCI_VENDOR_ID_TI,
.device = PCI_DEVICE_ID_TI_XX12_SD,
.subvendor = PCI_ANY_ID,
.subdevice = PCI_ANY_ID,
.driver_data = SDHCI_QUIRK_FORCE_DMA,
},

を挿入し、
/usr/src/linux/include/linux/pci_ids.hの
#define PCI_DEVICE_ID_TI_XX12 0x8039
#define PCI_DEVICE_ID_TI_XX12_FM 0x803b
の前後に
#define PCI_DEVICE_ID_TI_XX12_SD 0x????

(ただし設定する値は、lspci -vで取得すること。)
を挿入して、コンパイルし直して、ドライバsdhci.koを作成、インストールして、modprobe sdhci として導入してみて動くかどうか試してみるという方法があります。 

XX12というチップがXX11とコンパチであれば、動くかもしれませんし、動かないかもしれません.
動かなかった場合も、引用したLinuxQuestion.orgの掲示板にあるような

#setpci -v -s 08:06.2 4c=0x22

によって、動作するかもしれませんし、動作しないかもしれません。これで動作したら、ぜひLinux Kernel開発MLに英語でレポートすれば、開発に貢献したことになります。
ありがとうございます。
自分の能力的に少しばかり敷居が高いのですが
ちゃんと理解してやろうと思いますので、少しばかりお時間をいただければと思います。

可否や結果については、こちらに書くようにいたしますね。
http://gentoo-wiki.com/HOWTO_SD_and_MMC_card_readers

これによると tifm ドライバで動いたという報告がありますね。2.6.24以降のカーネルでの報告のようです。
また、setpciコマンドの意味としては、チップをSDHCIモードに変更するということのようです。この結果として、sdhciドライバが使えるようになるという記述があります。

いずれにせよ、新しいカーネルにしてみることが、一つよいチャレンジのようです。

tifmドライバについていえば、/usr/src/linux/driver/misc/tifm_7xx1.cに
PCI_VENDOR_ID_TI, PCI_DEVICE_ID_TI_XX12_FM
という記述がみえました。おそらく、サポートされていると思います。
modprobe tifm_core
mopprobe tifm_7xx1
とするのが良いようです。
お返事遅くなりました。

いろいろ読んでみた結果、まずは新しいカーネルを入れてみようかな?と思い
現在コンパイル中です。

初めてですが、かなり時間かかりますね、カーネルのコンパイル。

やってみて結果がでましたらまた書き込もうと思います。
カーネルをアップデートして、うまくできるようになりましたのでご報告。

以下に方法をざっくりと、記載しておきますね。
今回はカーネル2.6.24で実施しています。

1. カーネルソースをダウンロードし、/usr/srcに展開する。
2. /usr/src直下に「linux-2.6.24」というディレクトリができるので、これを同ディレクトリに「linux」という
 名前でソフトリンク
 ※こんな感じになります。
 # ls -l
 lrwxrwxrwx 1 root src 12 2008-03-09 15:38 linux -> linux-2.6.24
 drwxr-xr-x 22 root root 4096 2008-03-10 21:58 linux-2.6.24

3. カーネルコンフィグの作成(すべてデフォルトで作成)
4. make menulistでコンフィグの編集。
 このとき、Device Drivers >Devicde Drivers > MMC/SD card supportの
 TI Flash Media MMC/SD Interface support (EXPERIMENTAL)をモジュールとして組み込む。
 その他適宜編集する。
5.カーネルのコンパイル。
6.できあがった.debファイルのインストール
7.再起動

この時点で、SDカードをスロットに差し込むと変化が現れていました。
dmsegに以下のような記述あり
tifm_core: MMC/SD card detected in socket 0:1

ただし、現時点で/dev配下にそれらしきものも見あたらず。
tifm関連のモジュールは起動していた。
# lsmod |grep tifm
tifm_7xx1 7744 0
tifm_core 10372 1 tifm_7xx1

SDカードについて調査している際によく出てきたmmc_blockモジュールについては
この時点で起動していない。

ここで、setpciの実行
# setpci -v -s 08:06.2 4c=0x22

これによりmmc_block関連のモジュールが起動しました。
 # lsmod |grep mmc_bloc
 mmc_block 13572 0
 mmc_core 47748 2 mmc_block,sdhci

また、/devに以下のようなデバイスが新たに作成されました。
brw-rw---- 1 root floppy 179, 0 Mar 13 23:21 mmcblk0
brw-rw---- 1 root floppy 179, 1 Mar 13 23:21 mmcblk0p1

ここで作成されたmmcblk0p1をマウントすることでSDカードの内容を読むことが可能になりました。

書き込みや自動マウントについてはこれからやってみようと思いますが
とりいそぎ、うまくいきましたのでご報告です。

最後になりましたが、momokuriさん、初心者の私に様々な的確なアドバイスを
ありがとうございました。

また、この書き込みが他の同じコトで困っている方がいらっしゃった際に
参考になればと思います。

ありがとうございました。

ログインすると、みんなのコメントがもっと見れるよ

mixiユーザー
ログインしてコメントしよう!

Debian 更新情報

Debianのメンバーはこんなコミュニティにも参加しています

星印の数は、共通して参加しているメンバーが多いほど増えます。

人気コミュニティランキング