これから、これまで説明してきた内容をLinuxでどうやって実装していくのかを解説していきたいと思います。ただし、本解説では実装概要を述べるにとどめ、具体的な実装までは言及しておりません。
そのため、今回作成したソース(dnw.zip)を公開しますので、細かな点に興味のある方はこちらを参照ください。ファイル構成としては、ユーザーのアプリケーション層(app)とドライバ層(knl)に分かれております(注5)。ここでは、knl側の解説をしています。
ディレクトリ | 格納ファイル | ファイル情報 |
---|---|---|
app | Makefile | 「dnw.c」をコンパイルするmakeファイル |
dnw.c | データ転送用アプリケーション | |
knl | Makefile | 「androidbulk.c」をコンパイルするmakeファイル |
androidbulk.c | データ転送用USBデバイスドライバ | |
表1 USBデバイスドライバのソース |
ドライバをUSBコアに登録するためには、USBコアが要望している要件:(3)(4)(5)を満たす必要があります。USBコアは、そのためのデータ構造として「USBドライバ情報(usb_driver構造体)」を用意してくれています。
USBドライバ情報として定義する内容を以下に示します。
これで、USBドライバ情報の準備ができました。後は登録するだけですね。USBコアはドライバの登録関数として、「usb_register()」を用意してくれていますので、これを利用します。一方、解除の場合は、「usb_deregister()」利用します。
USBデバイスにデータ転送するには、USBデバイスファイルを使用する必要があります。
そのため、「probe()」処理にてデバイスファイルを作成するときには、USBコアが提供している「USBデバイス情報(usb_class_driver構造体)」に必要な情報を設定した上で、USBコアのデバイス登録関数(usb_register_dev())を呼び出します。なお、デバイスファイルを削除する場合は「usb_deregister_dev()」を使用します。
デバイスファイル情報として定義する内容は、以下の通りです。
これで、要件を満たす実装内容についての解説は終わりです。各実装箇所について詳細が気になる場合は、実際に実装した「androidbulk.c」を参照ください。
今回は、再構築したカーネルイメージをターゲットボードにUSB転送するために必要となるUSBデバイスドライバの作成方法について解説しました。次回は、実際にこのドライバを使用して、ターゲットボードにデータを転送します。そして、カーネルを変更し、リモートデバッグを行います。お楽しみに! (次回に続く)
Copyright © ITmedia, Inc. All Rights Reserved.