趣味の電子工作などの記録。時にLinuxへ行ったり、ガジェットに浮気したりするので、なかなかまとまらない。
RSS icon
  • Android SDK in Linuxで実機デバッグ環境構築

    投稿日 2012年 2月 15日 コメントはありません

    http://developer.android.com/guide/developing/device.html#setting-upのページに沿って、Linux環境での実機デバッグに挑戦します。デバッグターゲットはPocketWifi S(S31HW)です。

    1.Android Manifestでアプリケーションをデバッグ可能に設定する

    eclipseにてパッケージエクスプローラにて「AndroidManifest.xml」を選択し、真ん中の「Android Manifest Application」にて下の方の「「ア」アプリケーション」を選択します。

    その中の「Debuggable」の項目を「true」にします。結果はAndroid Manifext.xmlに

     android:label="@string/app_name" android:debuggable="true"

    という記述が追加されているかで確認できます。

    2.Androidの実機側でUSBデバッグを許可する

    「設定」→「アプリケーション」→「提供元不明のアプリ」にチェックを入れる。

    「設定」→「アプリケーション」→「開発」→「USBデバッグ」にチェックを入れる。

    3.udevルールを作成する

    (1)lsusbコマンドでUSBベンダIDを調べる

    Androidデバイスを接続し、lsusbコマンドで接続されているデバイスを表示する。

    $ lsusb
    Bus 003 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
                :
    Bus 002 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
    Bus 001 Device 005: ID 12d1:1038 Huawei Technologies Co., Ltd.
    Bus 001 Device 002: ID 8087:0024 Intel Corp. Integrated Rate Matching Hub

    青の行がHuaweiなので、この行がPocketWiFi Sです。そしてベンダIDは赤字の「12d1」であることがわかります。

    (2)udevルールファイルを作成する

    ルート権限で「/etc/udev/rules.d/51-android.rules」を作成し、その中身を、

    SUBSYSTEM=="usb", ATTR{idVendor}=="12d1", MODE="0666", GROUP="plugdev"

    とする。作成したファイルは、アトリビュートを変更しておく。

    $ sudo chmod a+r /etc/udev/rules.d/51-android.rules

     (3)udevルールファイルを再読み込みさせる

    udevadmでルールを再読み込みさせる。

    $ sudo udevadm control --reload-rules

    この後、一旦PCからAndroid機を取り外し、再度取り付けます。

    4.実機でデバイスが認識されているか確認する

    adbコマンドでデバイスが認識されているか確認してみます。

    $ adb devices
    List of devices attached
    5Cxxxxxxxxxx device

    となって、2行目の方(5Cで始まる行)で認識されていることが確認できます。

     5.Eclipse上で「実行」してみる

    実行すると、PocketWiFiS上で動きました!

     


  • STM32 Value Line DiscoveryをLinuxで開発する(3)

    投稿日 2012年 2月 10日 コメントはありません

    こんどは、Eclipse Plug-in をテストしてみます。参考にしたのは、http://gnuarmeclipse.sourceforge.net/wiki/Main_Pageです。EclipseはすでにAndroidの開発環境の構築の際にインストール済みなので、そこにARMのPlug-inをインストールしてみることになります。

    1.EclipseのPlus-inのインストール

    http://gnuarmeclipse.sourceforge.net/wiki/Plug-in_installationに沿って、プラグインをインストールしていきます。

    1. 「ヘルプ」→「新規ソフトウェアのインストール」で「インストール」ウインドウが開きます。
    2. 「追加」ボタンを押し、「リポジトリの追加」ダイアログでロケーションに「http://gnuarmeclipse.sourceforge.net/updates」を入力してOKを押します。
    3. しばらくすると、名前のところに「CDT GNU Cross Development Tools」というグループが表示されるので、グループのチェックボックスはチェックなしのまま、1階層下を開き、「GNU ARM C/C++ Development Support」にチェックを入れます。チェックを入れたら「次へ」を押します。
    4. インストールする項目の確認画面が表示されるので「次へ」を押します。
    5. ライセンスの同意確認画面がでてくるので、同意して「完了」を押します。
    6. ソフトウェアのインストールが実行されますが、途中で署名なしコンテンツを受け入れるか確認する警告が表示されますので、「OK」を押します。
    7. Eclipseの再始動確認画面がでてくるので、画面に従います。

    2.プロジェクトの生成とToolChainの設定

    プロジェクトを生成し、http://gnuarmeclipse.sourceforge.net/wiki/Featuresを参考にツールチェーンの所在をCDTに教えます。

    1. C言語のプロジェクトとして新規のプロジェクトを生成します。
    2. プロジェクトタイプは「ARM Cross Target Application」とし、ツールチェーンは「ARM Linux GCC(Sourcery G++ Lite)」とします。 (summon-arm-toolchain は同じarm-none-eabi-gccなので)
    3. 構成の選択の拡張設定の中の「C/C++ビルド」の「環境」で「すべての構成」を選択した上で、「追加」を押して「名前」に「PATH」を追加し、「値」に「~/sat/bin」を展開した値を追加して、ツールチェーンの場所を知らせます。(展開した値でなければうまく行かないようです)
    4. 「OK」、「完了」、「はい」で、プロジェクトを生成します

    3.ソースファイルの追加とビルド

    1. ソースの追加で、main.cを追加します。
    2. stlink/example/blink/main.c の内容をコピー&ペーストします
    3. 「プロジェクト」→「プロパティ」で「環境」の「C/C++ビルド」の「PATH」に「~/sat/bin」を展開した値が入っているのを確認します。
    4. 同じく、「ビルド変数」に「~/sat/bin」を展開した値が入っているのを確認します。

    これでビルドすると一応コンパイルされるのですが、まず、サンプルはどのボード向けのコンパイルをするか指定するマクロ定義がないのでエラーになります。

    さらに、コンパイルできても、リンク時のマップ指定(何番地からの前提でリンクするか)を指定する箇所がわかりません。素直にMakefileがある前提(自分で作る前提)のプロジェクトとしたほうが良さそうです。

    ・・・・とりあえず、ここまでで今日は挫折・・・orz


  • STM32 Value Line DiscoveryをLinuxで開発する(2)

    投稿日 2012年 2月 9日 コメントはありません

    続きです。

    2.stlinkのインストール

    gitでリポジトリをクローンします。

    ~/stm32-linux $ mkdir stlink
    ~/stm32-linux $ cd stlink/
    ~/stm32-linux/stlink $ git clone git://github.com/texane/stlink.git
    Cloning into stlink...
    remote: Counting objects: 3515, done.
    remote: Compressing objects: 100% (1228/1228), done.
    remote: Total 3515 (delta 2276), reused 3434 (delta 2204)
    Receiving objects: 100% (3515/3515), 12.63 MiB | 45 KiB/s, done.
    Resolving deltas: 100% (2276/2276), done.
    ~/stm32-linux/stlink $

    パッケージマネージャで libusb-1.0 と pkg-config がインストールされていることを確認する必要があります。自分の場合は一見libusb-1.0がインストールされているように見えたのですが、実際にmakeするとエラーになったので、

    $ sudo apt-get install libusb-1.0

    でlibusb-1.0をインストールしました。

    その後、コンパイルします。コンパイルは make 一発です。

    ~/stm32-linux/stlink/stlink $ make

    STM32 Value Line Discoveryを取り付けます。・・・が、こいつのSCSIエミュレーションはだめだめらしいので、システムから無視させるために、

    ~$ sudo modprobe -r usb-storage && modprobe usb-storage quirks=483:3744:i

    とすることになっていますが、エラーになってしまいます。しかも、アンマウントしても、すぐに復活してしまいます。恒久策としては

    ~$ sudo cp stlink_v1.modprobe.conf /etc/modprobe.d
    ~$ sudo modprobe -r usb-storage && modprobe usb-storage

    なのですが、それでもエラーになってしまいますので、一旦強制的に挿抜しました。

    次に、udevルールをセットアップします。

    ~/stm32-linux/stlink/stlink $ sudo cp 49-stlinkv*.rules /etc/udev/rules.d
    ~/stm32-linux/stlink/stlink $ sudo udevadm control --reload rules

    ここでSTM32 Value Line Discoveryを取り付けると、/devの下が

    ~/stm32-linux/stlink/stlink $ ls -la /dev/stlink*
    lrwxrwxrwx 1 root root 15 2012-02-08 02:40 /dev/stlinkv1_2 -> bus/usb/001/005

    というようになります。

    3.弄ってみる

    gdbserverを起動してみます。

    ~/stm32-linux/stlink/stlink $ ./gdbserver/st-util -1 /dev/stlinkv1_2
    non-option ARGV-elements: /dev/stlinkv1_2
    2012-02-08T02:44:28 INFO src/stlink-sg.c: Current mode unusable, trying to get back to a useful state...
    2012-02-08T02:44:28 WARN src/stlink-sg.c: received tag 0 but expected 3
    2012-02-08T02:44:28 INFO src/stlink-common.c: Loading device parameters....
    2012-02-08T02:44:28 INFO src/stlink-common.c: Device connected is: F1 Medium-density Value Line device, id 0x10016420
    2012-02-08T02:44:28 INFO src/stlink-common.c: SRAM size: 0x2000 bytes (8 KiB), Flash: 0x20000 bytes (128 KiB) in pages of 1024 bytes
    2012-02-08T02:44:28 INFO src/stlink-sg.c: Successfully opened a stlink v1 debugger
    Chip ID is 00000420, Core ID is 1ba01477.
    KARL - should read back as 0x03, not 60 02 00 00
    init watchpoints
    Listening at *:4242...

    とりあえず正しく認識して、gdbserverが起動しているようです。

    4.何か動かしてみる

    gdbserverが動いたままの状態にして、tutorialに沿って、Lチカのサンプルを動かしてみます。

    まず、サンプルプログラムをコンパイルします。(赤字が入力箇所です)

    ~/stm32-linux/stlink/stlink/example/blink $ PATH=~/sat/bin:$PATH
    ~/stm32-linux/stlink/stlink/example/blink $ make
    arm-none-eabi-gcc -g -O2 -mlittle-endian -mthumb -ffreestanding -nostdlib -nostdinc -Wl,-Ttext,0x20000000 -Wl,-e,0x20000000 -mcpu=cortex-m3 -DCONFIG_STM32VL_DISCOVERY=1 main.c -o blink_32VL.elf
    arm-none-eabi-gcc -g -O2 -mlittle-endian -mthumb -ffreestanding -nostdlib -nostdinc -Wl,-Ttext,0x20000000 -Wl,-e,0x20000000 -mcpu=cortex-m3 -DCONFIG_STM32L_DISCOVERY main.c -o blink_32L.elf
    arm-none-eabi-gcc -g -O2 -mlittle-endian -mthumb -ffreestanding -nostdlib -nostdinc -Wl,-Ttext,0x20000000 -Wl,-e,0x20000000 -mcpu=cortex-m4 -DCONFIG_STM32F4_DISCOVERY=1 main.c -o blink_F4.elf
    main.c:83:6: warning: conflicting types for 'main'
    main.c:53:2: note: previous implicit declaration of 'main' was here

    次に、gdbserverに接続して、ダウンロード&実行します。

    ~/stm32-linux/stlink/stlink/example/blink $ ~/sat/bin/arm-none-eabi-gdb
    GNU gdb (GDB) 7.3.1
    Copyright (C) 2011 Free Software Foundation, Inc.
    License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
    This is free software: you are free to change and redistribute it.
    There is NO WARRANTY, to the extent permitted by law. Type "show copying"
    and "show warranty" for details.
    This GDB was configured as "--host=x86_64-unknown-linux-gnu --target=arm-none-eabi".
    For bug reporting instructions, please see:
    <http://www.gnu.org/software/gdb/bugs/>.
    (gdb) target extended localhost:4242
    Remote debugging using localhost:4242
    0x08000b4c in ?? ()
    (gdb) load blink_32VL.elf
    Loading section .text, size 0x40 lma 0x20000000
    Start address 0x20000000, load size 64
    Transfer rate: 810 bytes/sec, 64 bytes/write.
    (gdb) continue
    Continuing.
    Cannot access memory at address 0x7bf35cc8

    ボード上のLEDがチカチカし始めましたので成功です。


  • STM32 Value Line DiscoveryをLinuxで開発する(1)

    投稿日 2012年 2月 8日 コメントはありません

    STM32 Value Line Discoveryは面白そうで、安いのですが、開発環境がWindows専用だったりするので、購入したものの放置していました。

    しかし、なにげに HACK A DAY を見ていたら、Linux上にSTM32の開発環境を構築する記事がでていたので、追試してみました。OSはLinuxMint11の64bit環境です。

    まず、tutrialに沿って環境構築を進めます。

    0. gitのインストール

    リポジトリはgitで管理されています。ダウンロードするためにgitを使うので、インストールします。

    ~$ sudo apt-get install git
    ~$ mkdir stm32-linux
    ~$ cd stm32-linux

    1.summon-arm-toolchainをインストール

    gitでリポジトリをクローンします。

    ~/stm32-linux $ git clone git://github.com/esden/summon-arm-toolchain.git
    Cloning into summon-arm-toolchain...
    remote: Counting objects: 312, done.
    remote: Compressing objects: 100% (193/193), done.
    remote: Total 312 (delta 145), reused 266 (delta 115)
    Receiving objects: 100% (312/312), 61.76 KiB, done.
    Resolving deltas: 100% (145/145), done.

    インストーラスクリプトをカスタマイズします。

    ~/stm32-linux $ cd summon-arm-toolchain 
    ~/stm32-linux/summon-arm-toolchain $ gedit summon-arm-toolchain

    以下の行のみ変更します。(コマンドラインオプションでも設定できるようです。)

    SUDO=sudo
    LIBSTM32_EN=1

    その他の依存関係をクリアしておきます。

    ~/stm32-linux/summon-arm-toolchain $ sudo apt-get install flex bison libgmp3-dev libmpfr-dev libncurses5-dev libmpc-dev autoconf texinfo build-essential libftdi-dev

    ツールチェーンを構築します。

    ~/stm32-linux/summon-arm-toolchain $ ./summon-arm-toolchain

    として構築します。勝手にツールチェーンをダウンロードして、コンパイルしていってくれます。

    かなり負荷がかかるようで、普段は静かなCPUファンがかなりの轟音を立てていました。

     


  • Android SDK in LinuxMint11(64bit)環境構築

    投稿日 2012年 2月 1日 コメントはありません

    調子に乗って、LinuxMint11の64bit環境でAndroid SDKをインストールしてみます。

    1.ia32-libsのインストール

    JDKのインストールの前に、http://developer.android.com/sdk/installing.html#troubleshooting に従って、ia32-libsをインストールします。

    2.JDKのインストール

    ソフトウェアの管理から、「sun-java6-jdk」をインストールします。

    3.Eclipseのインストール

    ソフトウェアの管理からインストールできるeclipseのバージョンは3.5.2-8ubuntu3でした。一方で、Android SDKがサポートするeclipseのバージョンは3.6以降なので、手作業でインストールします。

    $ cd /usr/share
    $ sudo tar xvzof ~/ダウンロード/eclipse-jee-indigo-SR1-linux-gtk-x86_64.tar.gz

    ちなみに途中で誤って3.5.2をインストールしてしまったので、「$ sudo apt-get autoremove eclipse」でアンインストールして、上記アーカイブの展開からやり直しました。

    また、ダウンロードしてくる eclipse は「Eclipse IDE for Java EE Developers, 210 MB」でないとダメでした。「Eclipse Classic 3.7.1, 173 MB」や「Eclipse IDE for Java Developers, 127 MB」ではADT-Pluginのインストールで「開発ツール」がエラーになってしまいます。

    4.Pleiadesのインストール

    http://mergedoc.sourceforge.jp/ から Pleiades 安定版 をダウンロードした後、

    $ cd /usr/share/eclipse
    $ sudo unzip ~/ダウンロード/pleiades_1.3.3.zip

    として、展開します。展開後、/usr/share/eclipse/eclipse.ini の末尾に

    -javaagent:/usr/share/eclipse/plugins/jp.sourceforge.mergedoc.pleiades/pleiades.jar

    を追加します。(パスが違うので要注意)

    5.Android SDKのインストール

    home directry に android sdk を展開します。

    $ tar xvfz android-sdk_r16-linux.tgz

    SDK Tools のパスを .bashrc に追加します。

    export PATH=${PATH}:/home/foobar/android-sdk-linux/tools:/home/foobar/android-sdk-linux/platform-tools:/usr/share/eclipse
    (32bitの時と微妙に違うので注意!)

    6.ADT Plug-in のインストール

    Eclipseを

    $ /usr/share/eclipse/eclipse &

    として起動して、http://developer.android.com/sdk/eclipse-adt.html#installing に従って、ADTをインストール。途中で再起動したり、何度かライセンス確認等があるので注意。

    ★途中でSDKのアップデートがかかりました。なぜか、展開した場所と異なる場所にSDKがインストールされましたので、.bashrcを以下のように書き換えました。

    export PATH=${PATH}:/home/foobar/android-sdks/tools:/home/foobar/android-sdks/platform-tools:/usr/share/eclipse

    7.SDKコンポーネントの追加

    http://developer.android.com/sdk/installing.html の Step 4に従って、SDKコンポーネントを追加します。

    $ cd android-sdk-linux/tools
    $ android

    で Android SDK Manager が開く。しばらく待つと、Packageのリストが出てくるので、http://developer.android.com/sdk/installing.html#which に従って、パッケージを選択していく。

    今回は「Tools/Android SDK Platform-tools」と「Android 2.3.3(API 10)」と「Android 2.2(API 9)」を追加した。(「Android 4.0.3(API 15)」は初めから選択されていた)

    この辺は32bitの時と同じでした。

    8.サンプルの起動

    32bit環境の時と同様にhttp://android.keicode.com/basics/quick-start.php の「はじめてのAndroidプログラム」を参考に動かしたところ、無事にエミュレータでも動作しました。