Android USBガジェットを使ってみよう!:実践しながら学ぶ Android USBガジェットの仕組み(1)(4/4 ページ)
本連載では「AndroidのUSB機能」をテーマに、Android搭載の組み込みボードを実際に用いながら、その仕組みなどについて詳しく解説する。今回は、AndroidのUSBガジェットドライバが提供する代表的な機能「USBマスストレージ」と「ADB(Android Debug Bridge)」をLinux上で使えるようにする。
デモ内容:メモリ使用状況監視プログラム
それでは、今回の総仕上げとして「adb」のシェル機能を使ったデモをやってみましょう。
Android端末の開発では、スマートフォンを数日間使用し、メモリリークが起きていないかをテストします。この際、シェル機能を使えば、メモリ使用状況は監視できますが、スマートフォンをずっとUSB接続し続けているのでは、携帯端末としてのテストになりません。
そこで、手軽にメモリ使用状況を監視するシェルプログラムをAndroid端末に放り込んで、バックグラウンド実行させるデモをお見せします(注14)。今回作成するプログラムの動作としては、メモリ使用状態を1分間隔で監視し、そのデータをSDカードに保存し続けるものです。詳細は以下の通りです。
プログラム名 | monitorMemory.sh |
---|---|
動作仕様 | 1分間隔でメモリ使用状態を取得し、そのデータを待避し続ける |
待避データ | (1)システム全体のメモリ使用状況(/proc/meminfo) (2)ページ単位のメモリ使用状況(/proc/pagetypeinfo) (3)プロセス単位でのメモリ使用状況(psコマンド実行結果) |
データ待避先 | SDカード内のファイルシステムの以下のパスに待避する /testData/monitorMemory.txt |
データフォーマット | ***** <データ待避時刻1(dateコマンドの実行結果)> ***** // ここに待避実データを設定 ***** <データ待避時刻2(dateコマンドの実行結果)> ***** // ここに待避実データを設定 : |
開始方法 | sh monitorMemory.sh & |
停止方法 | ps | grep monitorMemory | grep -v grep | awk ‘{print $1}’| xargs kill -9 |
表8 メモリ使用状況監視プログラム |
手順は以下の通りです。
- PC上でシェルプログラムを作成
- PC上で「adb」コマンドで作成したプログラムを組み込みボード上にコピー
- 組み込みボード上でシェルプログラムをバックグラウンド実行
- 組み込みボードからUSBを抜いて数分放置
- 組み込みボードにUSBを挿して、ポップアップ画面から結果を取得
- 組み込みボード上で実行中のシェルプログラムを停止
1.PC上でシェルプログラムを作成
まず、PC上でメモリ使用状況を監視するシェルプログラムを記述します。「vi」などの適当なテキストエディタを使って「monitorMemory.sh」を作成します(注15)。
#!/system/bin/sh destPath=/sdcard/monitorMemory.txt while [ 1 ] do echo “****** `date` ******” >> $destPath echo -e “\n[/proc/meminfo]” >> $destPath cat “/proc/meminfo” >> $destPath echo -e “\n[/proc/pagetypeinfo]” >> $destPath cat “/proc/pagetypeinfo” >> $destPath echo -e “\n[ps]” >> $destPath ps >> $destPath echo “” >> $destPath sleep 60 done
2.PC上で「adb」コマンドで作成したプログラムを組み込みボード上にコピー
作成したシェルプログラムを組み込みボードに転送します。前章を参考に、組み込みボードとPCをUSB接続してADBを使用可能にします。ファイルを転送する「adb push」コマンドを使うことで、USBを介してPCから指定のファイルを組み込みボードに転送できます。
adb push monitorMemory.sh /sdcard
3.組み込みボード上でシェルプログラムをバックグラウンド実行
次は、組み込みボード上で作成したシェルプログラムを動作させます。ここでようやく「adb shell」の登場です。
adb shell
シェルを起動したら、作成したシェルプログラムを実行します。プログラムはバックグラウンドで実行させたいので、コマンドの最後に“アンパサンド(&)”を付けます。
sh /sdcard/monitorMemory.sh &
4.組み込みボードからUSBを抜いて数分放置
組み込みボードからUSBを抜いて、PCとのUSB接続を外します。接続がなくなっても、組み込みボード上のバックグラウンドではメモリの使用状況を監視するプログラムが動いているはずです。
5.組み込みボードにUSBを挿して、ポップアップ画面から結果を取得
では、プログラムの出力結果を見てみましょう。再度、組み込みボードをPCにUSB接続して、SDカードの中身を閲覧します。図29で「monitorMemory.txt」が作成されていることが確認できます。
「monitorMemory.txt」を開いてみると、期待通りメモリの使用状況が出力されています。
6.組み込みボード上で実行中のシェルプログラムを停止
最後に、組み込みボード上のバックグラウンドで実行中のシェルプログラムを停止しましょう。組み込みボードに「adb shell」接続し、次のコマンドを実行すると、今回のmonitorMemoryシェルプログラムを停止できます。
ps | grep monitorMemory | grep -v grep | awk ‘{print $1}’| xargs kill -9
ここまでの内容で、Android USBガジェットドライバの代表的な機能である、USBマスストレージとADBを、苦労しながらも何とかLinuxマシン上で使えるようになりました。
本連載ではこれから、このガジェットドライバがどうやって実現されているのかを紹介していくことになります……。が、その前に、これから起こり得るさまざまな問題に対処できるよう事前に準備しておく必要があります(“備えあれば憂いなし”です)。
そのため、次回は、「Androidカーネルをリモートデバッグするための方法」を紹介したいと思います。ご期待ください! (次回に続く)
Copyright © ITmedia, Inc. All Rights Reserved.