Armadilloフォーラム

USBガジェットのg_mass_storageでSDカードが認識しない

h-yamamoto

2017年2月9日 20時35分

表題の件ですが、以下の通りまとめさせていただきましたので、
何かご教示いただければ幸いと存じます。

<目的>
USBガジェットの「mass storage」を使用して、Armadillo 810とUSB接続されたWindows上からSDカードに対してファイルの読み書きを行いたい

<現象>
ArmadilloにはSDカードが挿入されているにもかかわらず、
Windowsのエクスプローラ上からDドライブにアクセスすると「ディスクを挿入してください」と警告が出て
SDカードが認識されない

<現象の前提条件>
・USBガジェットの「mass storage」を有効にしたカーネルとユーザーランドを書き換えました。
・WindowsマシンとArmadillo810をUSBケーブルで接続しました。
・Windows上からはLinux起動中にDドライブが認識されています。

<手順>
1.以下のURLのPDFの「11.1. Linuxカーネル/ユーザーランドをビルドする 」を参考にカーネルとユーザーランドのビルドを行いました。
http://armadillo.atmark-techno.com/files/downloads/armadillo-810/docume…
 ※ソースコードなどは、以下のURLからダウンロードしました。
  http://armadillo.atmark-techno.com/armadillo-810/downloads

2.make menuconfigを実行し、ビルドの設定をしました
 2.1 Vendor/Product Selectionの設定はそれぞれ以下を設定
      →AtmarkTechno
      →Armadillo-810
 2.2 Kernel/Library/Defaults Selectionの設定は
     Customize Kernel Settingsを選択
 2.3 Exitで一旦抜けて、kernel Configurationを続けて設定
 2.4 Device Drivers -> USB support -> USB Gadget Support -> USB Gadget Drivers -> Mass Storage Gadget を選択
 2.5 設定は以上で終了する
3.設定完了後、makeコマンドよりビルドを実施しました。
4.作成したkernel/ユーザーランドのイメージをフラッシュにそれぞれ書き込みました。
  (SDカードに書き込んだイメージファイルをフラッシュへ書き込みました)
5.rebootコマンドで動作を確認すると、表題のような現象が発生しました。

製品のマニュアルにマスストレージについて記載がなかったので、
以下のサイト群を参考にしました。
http://armadillo.atmark-techno.com/howto/a800eva-use-usb-gadget
http://armadillo.atmark-techno.com/howto/a840-use-usb-gadget
http://manual.atmark-techno.com/armadillo-810/armadillo-810_product_man…

上記の現象、手順や設定項目に不足はございませんでしょうか?
目的のために講じるべき手段などを御教示いだければと思います。

以上です。
宜しくお願いいたします。

コメント

at_takashi.sasayama

2017年2月10日 11時00分

笹山です。

以下の手順で動作確認をしてみてください。

■カーネルコンフィギュレーション

Linux/arm 3.4-at19 Kernel Configuration
Device Drivers  --->
    [*] USB support  --->
        <*>   USB Gadget Support  --->
            <M>   USB Gadget Drivers        # <M> にします
                <M>     Mass Storage Gadget # <M> にします

カーネルコンフィギュレーション完了後、make を行い、カーネルイメージを作成します。
この際、以下のパスに g_mass_storage.ko が作成されます。

atmark-dist/linux-3.x/drivers/usb/gadget/g_mass_storage.ko

作成したカーネルイメージを Armadillo-810 に書き込み、起動します。

■g_mass_storage.ko
Armadillo-810 起動後、先に作成された g_mass_storage.ko を Armadillo-810 に転送します。
転送後、以下のオプションで insmod すると、SDカードの中身に Windows からもアクセスできるようになります。

insmod g_mass_storage.ko file=/dev/mmcblk0 stall=0

■参考情報
Howto : Armadillo-410 液晶モデル開発セット で USB デバイス機能を使用する
http://armadillo.atmark-techno.com/howto/a400-use-usb-gadget

笹山様

お世話になっております。
上記、御指南有難う御座います。

上記手順にて実施したところ、WindowsにてSDの認識ができるようになりました。
kernelのdrivers/usb/の下にも、「g_mass_storage.ko 」のファイルが置いてあったので、
rc.localに起動時にinsmodするようにしたところ起動するだけでUSBの認識までできるようになりました。

本件、上記にて解決いたしましたので、クローズさせていただきます。
笹山様には厚く御礼申し上げます。

> 笹山です。
>
> 以下の手順で動作確認をしてみてください。
>
> ■カーネルコンフィギュレーション
>

> Linux/arm 3.4-at19 Kernel Configuration
> Device Drivers  --->
>     [*] USB support  --->
>         <*>   USB Gadget Support  --->
>             <M>   USB Gadget Drivers        # <M> にします
>                 <M>     Mass Storage Gadget # <M> にします
> 

>
> カーネルコンフィギュレーション完了後、make を行い、カーネルイメージを作成します。
> この際、以下のパスに g_mass_storage.ko が作成されます。
>

> atmark-dist/linux-3.x/drivers/usb/gadget/g_mass_storage.ko
> 

>
> 作成したカーネルイメージを Armadillo-810 に書き込み、起動します。
>
>
> ■g_mass_storage.ko
> Armadillo-810 起動後、先に作成された g_mass_storage.ko を Armadillo-810 に転送します。
> 転送後、以下のオプションで insmod すると、SDカードの中身に Windows からもアクセスできるようになります。
>
>

> insmod g_mass_storage.ko file=/dev/mmcblk0 stall=0
> 

>
> ■参考情報
> Howto : Armadillo-410 液晶モデル開発セット で USB デバイス機能を使用する
> http://armadillo.atmark-techno.com/howto/a400-use-usb-gadget

追加で質問が発生しましたので、こちらに追記させていただきます。

Windows上にてSDカードは認識はできるようになりましたが、
Windows上でSDカードのフォルダを開いたままSDカードを取り外し、
WindowsでSDカードのフォルダをF5などで最新状態に更新しても、
SDカードが挿入されているかのように動作しエクスプローラ上の見え方が変わりません。
「SDカードが挿入されていません」などのメッセージも表示されません。

この動作は、上述の手順で作成したモジュールですと、正しい動作になりますでしょうか。

以上です。
宜しくお願いいたします。

> 笹山様
>
> お世話になっております。
> 上記、御指南有難う御座います。
>
> 上記手順にて実施したところ、WindowsにてSDの認識ができるようになりました。
> kernelのdrivers/usb/の下にも、「g_mass_storage.ko 」のファイルが置いてあったので、
> rc.localに起動時にinsmodするようにしたところ起動するだけでUSBの認識までできるようになりました。
>
> 本件、上記にて解決いたしましたので、クローズさせていただきます。
> 笹山様には厚く御礼申し上げます。
>
>
>
> > 笹山です。
> >
> > 以下の手順で動作確認をしてみてください。
> >
> > ■カーネルコンフィギュレーション
> >

> > Linux/arm 3.4-at19 Kernel Configuration
> > Device Drivers  --->
> >     [*] USB support  --->
> >         <*>   USB Gadget Support  --->
> >             <M>   USB Gadget Drivers        # <M> にします
> >                 <M>     Mass Storage Gadget # <M> にします
> > 

> >
> > カーネルコンフィギュレーション完了後、make を行い、カーネルイメージを作成します。
> > この際、以下のパスに g_mass_storage.ko が作成されます。
> >

> > atmark-dist/linux-3.x/drivers/usb/gadget/g_mass_storage.ko
> > 

> >
> > 作成したカーネルイメージを Armadillo-810 に書き込み、起動します。
> >
> >
> > ■g_mass_storage.ko
> > Armadillo-810 起動後、先に作成された g_mass_storage.ko を Armadillo-810 に転送します。
> > 転送後、以下のオプションで insmod すると、SDカードの中身に Windows からもアクセスできるようになります。
> >
> >

> > insmod g_mass_storage.ko file=/dev/mmcblk0 stall=0
> > 

> >
> > ■参考情報
> > Howto : Armadillo-410 液晶モデル開発セット で USB デバイス機能を使用する
> > http://armadillo.atmark-techno.com/howto/a400-use-usb-gadget

at_takashi.sasayama

2017年3月1日 10時10分

笹山です。

> Windows上でSDカードのフォルダを開いたままSDカードを取り外し、
> WindowsでSDカードのフォルダをF5などで最新状態に更新しても、
> SDカードが挿入されているかのように動作しエクスプローラ上の見え方が変わりません。
> 「SDカードが挿入されていません」などのメッセージも表示されません。

下記手順の様に、SDカードを取り外した後、ファイルなどへのアクセスが必要なようです。
そうすると、SDカードが取り外されている旨のメッセージが表示されました。

1.SDカードを取り外す
2.ファイルを開く、作成するなどの操作を試行する(エラーになります)
3.「最新の情報に更新」を行う
4.SDカードが取り外されている旨のメッセージが表示される

なおSDカードを取り外した後、再度ホストPCに認識させるには、
以下の操作を行ってください。

rmmod g_mass_storage
insmod g_mass_storage.ko file=/dev/mmcblk0 stall=0

>笹山様

御教示いただきありがとうございます。

再度ホストPCに認識させようとご教示いただいたコマンドを入力しましたが、以下のエラーが出て正常に実行できませんでした。

[root@armadillo810-0 (ttySC2) /tmp]# insmod g_mass_storage.ko file=/dev/mmcblk0
stall=0
 lun0: unable to open backing file: /dev/mmcblk0
g_mass_storage renesas_usbhs: failed to start g_mass_storage: -2
insmod: can't insert 'g_mass_storage.ko': unknown symbol in module or invalid parameter

init.rdに以下を追加しているのですが、そちらが影響していることはございますでしょうか。

insmod /lib/modules/3.4-at20/kernel/drivers/usb/gadget/g_mass_storage.ko  file=/dev/mmcblk0 stall=0

at_takashi.sasayama

2017年3月1日 17時54分

笹山です。

> [root@armadillo810-0 (ttySC2) /tmp]# insmod g_mass_storage.ko file=/dev/mmcblk0
> stall=0
>  lun0: unable to open backing file: /dev/mmcblk0
> g_mass_storage renesas_usbhs: failed to start g_mass_storage: -2
> insmod: can't insert 'g_mass_storage.ko': unknown symbol in module or invalid parameter
 

上記のエラーメッセージは SDカードが Armadillo に認識されていない時に出力されます。
SDカードの接続をご確認いただければと思います。