Armadillo-500 FXのタッチパネルを改造(2)

2009年9月28日

システム3部鈴木です。

在庫切れのため、間に合わせのタッチパネルが取り付けられていた我等がArmadillo-500 FXですが、新品のパネルを装備して帰ってきました。
前回に引き続き、画像で紹介してみたいと思います。
相変わらず携帯のカメラなので見づらいですがご容赦ください。

全体像

正面から見た全体像です。はっきり言ってぱっと見は全然変わっていませんね。
液晶の表示が前より綺麗になっているのですが、この写真では伝わらないですね・・・。

前回、画面の左右が黒くなっていて格好が悪かったので、壁紙を入れ替えました。
壁紙DL元:555 [DESIGN] > wallpaper

全体像・裏側

裏側です。タッチセンサーのケーブルが、USBではなく、インターフェイスボードに接続されたため、すっきりしました。

タッチセンサーのズレ

画面の端に沿ってボールペンの頭を動かしたときのポインタの軌跡。左右の端が外側に若干ずれていますが、使ってみた感覚としては問題なしです。
むしろHOME画面のランチャーが引き出しやすいかと。
上下も端までタッチできるので、ボタンの誤射はほぼ無いです。

タッチセンサーのケーブル1

タッチセンサーのケーブルはタッチパネルとインターフェイスボードの隙間に入ったので、SDの出し入れも安心です。

タッチセンサーのケーブル2

USBが2つとも使えるようになったのは助かります。
見た目もすっきりしました。

タッチセンサーのケーブル3
タッチセンサーのケーブル4

ちょっと分かりづらいですが、タッチパネルとインターフェイスボードの間をくぐっているタッチセンサーのケーブルと、その接続部分です。

以上、生まれ変わったArmadillo-500 FXでした。
前回同様コアスタッフさんにお願いしたのですが、夕方17時に直接回収に来ていただき、翌日の9時半に届けて下さるという対応をしていただきました。
今回つけていただいたパネルが本来のものなので、別途の加工費は無しでした。
凄いですコアスタッフ。

AndroidでSDカードを使ってみる(1)

2009年9月28日

システム3部鈴木です。

アットマークテクノ社製パネルコンピュータ、Armadillo-500 FX上のAndroidでSDカードを利用する方法を説明します。
Android自体はSDカード対応ですが、ArmadilloにSDカードを挿しただけでは認識してくれません。
mountdというサービスを動作させる必要があります。

今回の確認環境

mountdのビルド

Android1.5(cupcake)では、SDカードのマウントに mountd ではなく、vold を使うように変更されています。
しかし、voldを正規端末以外で動作させるにはソースの修正などが必要らしく、はっきりとした情報がありません。

次善の策として、以前利用されていた mountd を利用します。
設定メニューからSDカードのアンマウント・フォーマットができない等の不便はありますが、SDの利用はできます。

さて、デフォルトでは mountd をビルドしない設定になっているので、設定を変更して再ビルドします。

[PC ~/mydroid]$ vi system/core/mountd/Android.mk
LOCAL_PATH:= $(call my-dir)

include $(CLEAR_VARS)

...中略...

# disabled - we are using vold now instead
include $(BUILD_EXECUTABLE)                   <-- コメントをとる。

[PC ~/mydroid]$ make

設定ファイルの設置

mountdは設定ファイルを参照してSDカードを自動マウントするので、設定ファイルを作成し、適切な場所においておく必要があります。
こちらの記事」に従ってAndroidユーザーランド(rootディレクトリ)を作成した後、設定ファイルをコピーして編集します。

[PC ~/mydroid]$ cp system/core/rootdir/etc/mountd.conf \
out/target/product/generic/root/system/etc/
[PC ~/mydroid]$ vi out/target/product/generic/root/system/etc/mountd.conf
## mountd configuration file

## add a mount entry for each mount point to be managed by mountd
mount {
    ## root block device with partition map or raw FAT file system
    block_device    /dev/block/mmcblk0        <-- SDカードに対応するデバイスファイルに変更
...後略...

また、mountdをサービスとして登録する必要があるので、init.rc ファイルの最後尾に追記します。

[PC ~/mydroid]$ vi out/target/product/generic/root/init.rc
...前略...
service mountd /system/bin/mountd          <-- 追記
socket mountd stream 0660 root mount       <-- 追記

あとは、AndroidユーザーランドをArmadilloに転送し、Armadillo-500 FXにSDカードを挿入してからAndroidを起動すれば、自動でSDカードが /sdcard にマウントされます。

SDカードはWindowsでFAT形式にフォーマットしたものを利用できます。

問題点

現状、以下の警告が出てしまいます。

FAT: Filesystem panic (dev mmcblk0)
fat_get_cluster: invalid cluster chain (i_pos 0)
File system has been set read-only

読み込み専用でマウントされてしまいました。当方ではさしあたり問題ないのですが・・・。
解決策が判明し次第、blogでフォロー致します。

AndroidでEMOBILEデータカードを使ってみる

2009年9月25日

システム3部鈴木です。

アットマークテクノ社製パネルコンピュータ、Armadillo-500 FXにEMOBILEデータカード(D02HW)をつないでインターネットに接続します。
Androidからデータカードを直接利用することは今のところできないので、Linux側でpppdを使ってIPアドレスを取得してから、Androidを起動します。

@テクノさんの「EMOBILE の データ通信カードを使用してインターネットに接続する」に詳しい解説が載っているので、こちらの内容をベースに説明します。
はやく独自のネタも公開したいと思う昨今です。

今回の確認環境

USB Serial Converter のデバイスドライバを修正・・・しなくていいです

上記@テクノさんのサイトには、ドライバのソースとKconfigにパッチを当てるように指示がありますが、カーネルの2.6.20以降では、デフォルトでHUAWEIのデバイスに対応しているそうなので、修正の必要はありません。

ppp 機能及び USB Serial Converter のデバイスドライバを組み込む

カーネルに、以下のデバイスドライバを組み込みます。

  • PPP (point-to-point protocol) support
  • PPP support for async serial ports
  • USB driver for GSM and CDMA modems

また、ユーザランドのアプリケーションとして、pppd を組み込みます。

make menuconfig を使用した場合の設定は下記のようになります。
atmark-distのpwdはインストールディレクトリ直下とします。

[PC ~/atmark-dist]$ make menuconfig

カーネルの設定、atmark-distユーザーランドの設定の出し方は、「LinuxカーネルとArmadilloユーザーランドをビルドする」を参照してください。

カーネルの設定…
pppについてはandloid-2.6.27のカーネルには既に設定されていました。
USB Serial Converterの名前が参考サイトと異なっています。

Linux Kernel Configuration

Device Drivers  --->
Network device support  --->
<*> PPP (point-to-point protocol) support
<*>   PPP support for async serial ports

USB support  --->
<*> USB Serial Converter support  --->
<*>   USB driver for GSM and CDMA modems

ユーザランドの設定…

Userland Configuration

Network Applications  --->
[*] pppd

設定を保存して、makeします。

[PC ~/atmark-dist]$ make dep all

ppp 関連の設定をおこなう

@テクノさんのサイト通りに設定ファイルを設定していきますが、若干の補足を。

ネットワークの設定がDHCPになっていると、resolv.conf の中身がArmadilloが起動するたびに空になったり違う内容になったりするので、当方では起動スクリプト(rc.local)に、下記のように書き込んでいます。とりあえず。

echo "search ns11.iij4u.or.jp" > /etc/config/resolv.conf
echo "nameserver 210.130.1.1" >> /etc/config/resolv.conf
・・・

それから、G-Callなど、EMOBILE以外が提供している通信サービスを利用する場合、ID・パスワード・DNSなどが異なるので注意です。

ppp 接続をおこなう

デバイスドライバを組み込んだ Armadillo-500 FX に D02HW を接続すると、おそらく下記のように表示されます。

usb 3-1: new full speed USB device using fsl-ehci and address 2
usb 3-1: configuration #1 chosen from 1 choice
scsi1 : SCSI emulation for USB Mass Storage devices
usb 3-1: USB disconnect, address 2
usb 3-1: new full speed USB device using fsl-ehci and address 3
usb 3-1: configuration #1 chosen from 1 choice
usb-storage: probe of 3-1:1.0 failed with error -5
option 3-1:1.0: GSM modem (1-port) converter detected
usb 3-1: GSM modem (1-port) converter now attached to ttyUSB0
usb-storage: probe of 3-1:1.1 failed with error -5
option 3-1:1.1: GSM modem (1-port) converter detected
usb 3-1: GSM modem (1-port) converter now attached to ttyUSB1
scsi4 : SCSI emulation for USB Mass Storage devices
scsi 4:0:0:0: CD-ROM            HUAWEI   Mass Storage     2.31 PQ: 0 ANSI: 2
scsi 4:0:0:0: Attached scsi generic sg1 type 5

D02HWは複数のデバイスとして認識されるらしく、USB Serial converter は、ttyUSB0 と ttyUSB1 にアタッチされますが、最初の tty がシリアルモデムになります。
そのため、ttyUSB0 を使用して ppp 接続を行います。

[armadillo ~]# pppd /dev/ttyUSB0 230400 connect /etc/ppp/ppp-on-dialer

コマンドはすぐに終了しますが、接続にはしばらく時間がかかります。
データカードの青いLEDが点灯しっぱなしになったらOKです。
正常に接続できると、「ppp0」というネットワークインターフェースが作成されます。

[armadillo /etc/ppp]# ifconfig ppp0
ppp0      Link encap:Point-Point Protocol
          inet addr:xxx.xxx.xxx.xxx  P-t-P:10.64.64.64  Mask:255.255.255.255
          UP POINTOPOINT RUNNING NOARP MULTICAST  MTU:1500  Metric:1
          RX packets:10 errors:0 dropped:0 overruns:0 frame:0
          TX packets:10 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:3
          RX bytes:178 (178.0 B)  TX bytes:130 (130.0 B)

以上で、EMOBILE の D02HW を使用して、インターネットに接続することができます。

・・・ところで、DO2HWは既に市場には出回っていません。たとえばD12LCで接続する場合は、下記のようにもう一手間かける必要があるようです。
参考:EMOBILE D12LCでネット接続するには?

どうも、末尾がLCのデータカードより、HWのデータカードのほうが構造がシンプルで手間が掛からないようです。

AndroidからEMOBILEを利用する

Android用にもDNSの設定を追加すれば、後は起動するとネットワークが使用可能になっています。

Androidユーザーランドの /init.rdにdnsの設定をしている箇所があるので、適宜変更します。
既にあるdns1の記述を残したい場合は、dns2として行を追加してください。

    setprop net.dns1 xxx.xxx.xxx.xxx

また、電源を投入したら自動でAndroidを立ち上げてEMOBILEで通信したい場合、Armadilloの /etc/config/rc.local を修正します。
sleepしているのはドライバのロードやpppdに時間が掛かるためです。もう少し多くても良いかもしれません。

[armadillo /etc/config]# vi rc.local

PATH=/sbin:/usr/sbin:/bin:/usr/bin
export PATH

jp2=`cat /sys/devices/platform/armadillo5x0_gpio.0/ports/gpio1_8_data`
if [ "$jp2" = "1" ]; then
        echo PPP...
        echo "search ns11.iij4u.or.jp" > /etc/config/resolv.conf
        echo "nameserver 210.130.1.1" >> /etc/config/resolv.conf
        sleep 3s

        pppd /dev/ttyUSB0 230400 connect /etc/ppp/ppp-on-dialer
        sleep 3s
        echo Booting Android...
        mount /dev/sda1 /mnt
        chroot /mnt/cupcake /init
fi

修正したらフラッシュメモリに書き込むのを忘れずに。

[armadillo /etc/config]# flatfsd -s

resolv.conf へのDNSの設定は、Androidを使用する際には不要かもしれません。

Androidで無線LAN通信してみる

2009年9月25日

システム3部鈴木です。

アットマークテクノ社製パネルコンピュータ、Armadillo-500 FXにAndroid1.5(cupcake)を載せて、無線通信する方法を説明します。
先日公開されたAndroid1.6(donut)では、今回のエントリーで行っているソースの修正は不要との話も耳に挟んでいるので、既に内容が風化しているかもしれません・・・。

今回の確認環境はこうなっています。

  • Armadilloユーザーランド: Atmark dist v20090318
  • Linuxカーネル : android-2.6.27 + patch (過去エントリー「LinuxカーネルとArmadilloユーザーランドをビルドする」を参照)
  • Androidユーザーランド:1.5(cupcake)
  • USB無線LANモジュール : Planex社 GW-US54Mini2
  • USB無線LANモジュールドライバ : Ralink RT2X00
  • 開発環境 : atde2 v20090403

無線LANモジュールにPlanex社 GW-US54Mini2を選んだ理由は、アットマークテクノ社の開発者サイトの記事、「Armadillo-500 FXでUSB無線LANモジュールを使う」で紹介されていたためです。
GW-US54Mini2にはGW-US54Mini2S/B/Gというバリエーションがあるようですが、いずれでも問題ありません。

さて。Androidにおいて、無線LAN(以下Wi-Fi)の利用には、wpa_supplicantというサービスを利用します。
cupcakeのソースに含まれているwpa_supplicant-0.5.10は上記の開発者サイトで利用しているRalink社純製のドライバに対応していないようなので、あらかじめカーネルに含まれている(ただしデフォルトではビルドされない)、Ralink RT2X00というドライバ(Ralink社純正ではなく、オープンソースの模様)を使用することにします。

Armadilloではないのですが、bc9というPDAにAndroidを載せてUSB無線LANアダプタを使用し、AndroidのGUI(設定画面)からWi-FiのON/OFFを可能にした、という記事が以下のサイト様にあったので、大いに参考にさせていただきます。
毎度この調子ですね。
bc9/Software/Android/Android_Wi-Fi

ほぼ上記のサイトに書かれている手順に従えばWi-Fi設定は完了しますが、若干の相違があるので、相違点のみ以下にまとめます。

Ralink RT2X00のビルド

参照サイトさんにconfigの設定が載っていなかったので補足します。
Ralink RT2X00ドライバをモジュールとしてビルドするには、menuconfigで下記のように設定します。
先に「Generic IEEE 802.11 Networking Stack (mac80211)」を<*>にしないとドライバの選択肢が表示されませんので注意です。

Linux Kernel Configuration
  Networking support  --->
    Wireless  --->
      <*> Generic IEEE 802.11 Networking Stack (mac80211)
  Dvice Drivers  --->
    Network device support  --->
      Wireless LAN  --->
      [*] Wireless LAN (IEEE 802.11)
      ...
      <M> Ralink driver support
      < >   Ralink rt2500 (USB) support
      <M>   Ralink rt2501/rt73 (USB) support
      [*]     Ralink rt2501/rt73 leds support

また、Ralink RT2X00 をロードするためには CRC ITU-T というライブラリが必要です。
デフォルトの設定ではモジュール{M}になっているので、静的組込{*}に変更します。

Linux Kernel Configuration
    Library routines  --->
        {*} CRC ITU-T V.41 functions

wifi.c ファイルの修正

ドライバのロードに関して、参照サイトさんではRalink RT2X00 ドライバをモジュールとしてビルドするように指示しているのですが、wifi.c の修正箇所にはドライバが静的に組み込まれていることを前提にしている部分があります。
これによってWi-Fiの設定が必ず初回にドライバのロード待ちでタイムアウトし、失敗するようです。
以下のように修正します。insmodが3連続しているのが目印です。
※ただし、まだ試していませんが、ドライバを静的に組み込むようにすれば元サイトどおりの修正でOKでしょう。

-   // Hack taken from EEPC WiFi path. We have statically linked the WiFi driver
-   // into the kernel, so we simply return and don't attempt to load the driver.
-   // So we set the driver property to ok, since we have already installed it.
-   property_set(DRIVER_PROP_NAME, "ok");
    if (check_driver_loaded()) {
        return 0;
    }
    insmod(RT2X00_LIB_DRIVER_MODULE_PATH);
    insmod(RT2X00_LIB_USB_DRIVER_MODULE_PATH);
    insmod(DRIVER_MODULE_PATH);
+   property_set(DRIVER_PROP_NAME, "ok");
    property_set("ctl.start", 0);
    sched_yield();

Androidユーザーランドの調整

検証の結果、必要なディレクトリが作成されていないと、 wpa_supplicant がエラーを出して設定が失敗するようなので、init.rc に必要なディレクトリの作成処理を追加します。 on boot の記述より前に追加します。

mkdir /data/misc/wifi 0770 system misc
mkdir /data/misc/wifi/sockets 0770 system misc
mkdir /data/system/wpa_supplicant 0770 system misc
mkdir /data/misc/dhcp 0770 dhcp dhcp
chown dhcp dhcp /data/misc/dhcp

残る問題

以上の手順で設定することで、Android の GUI から Wi-Fiの設定が出来るようになります。
しかし、現在わかっているだけで以下の問題が残っています。

  • 起動後にUSB無線LANアダプタを挿さないと認識されない
  • APを見つけた後、接続の確立に必ず1度失敗する
  • しばらく通信しないと接続が切れている

LinuxカーネルとArmadilloユーザーランドをビルドする

2009年9月24日

システム3部鈴木です。

Armadilloに載せたAndroidで無線LANを利用したり、タッチパネルを付け替えたりするには、カーネルに手を加える必要があります。また、Armadilloのユーザーランド(Atmark-distユーザーランド)にアプリケーションやドライバを追加することもあるかもしれませんから、LinuxカーネルとArmadilloのユーザーランドをソースからビルドしてみることにしました。

Linuxカーネルの入手

ビルドはATDE環境で行います。

Android1.5(cupcake)のリリースとともにカーネルも2.6.26から2.6.27になりました。カーネル2.6.27はアットマークテクノのサイトでArmadillo対応版の正式リリースがないため、一般公開されているカーネルにパッチを当てます。これも前述のサイトで解説されているので参照しました。パッチのDLもできます。

Armadillo-500 FX に Android ( cupcake ) をのせる その5

取得したカーネルのver.が異なっていた場合の対処など、gitの使用方法については別途参照願います。

カーネル作成のコマンドを引用:

$ git clone git://android.git.kernel.org/kernel/common.git
$ cd common/
$ git branch
* android-2.6.27
※android-2.6.27 であることを確認。
$ wget http://sola-dolphin-1.net/data/android/Armadillo-500FX/kernel-2.6.27-armadillo500fx.tar.gz
$ tar zxvf kernel-2.6.27-armadillo500fx.tar.gz
$ patch -p1 -E < kernel-2.6.27-armadillo500fx.patch

Atmark Distユーザランドをビルドしてみる

Atmark Distユーザランドをビルドすると、Armadilloのフラッシュメモリに書き込むLinuxカーネルイメージ・Atmark Distユーザーランドイメージを作成できます。

Androidのソースをビルドする (cupcake)」の「開発環境の用意」で、atmark-distを用いたカーネル・ユーザーランドのビルドの準備は整っていますが、ビルドを実行する前に、Android用に手を加えます。

開発者サイトからDLできる「FX液晶モデル – ソフトウェアマニュアル」では、atmark-distの直下に「linux-2.6.x」というシンボリックリンクを作成していますが、そのリンク先をパッチを当てた2.6.27のカーネルソースのディレクトリに変更します。

$ cd atmark-dist-<version>/
$ rm linux-2.6.x
$ ln -s <2.6.27のDIR> linux-2.6.x

次に、DEFCONFIGの指定を変えます。コンフィグのデフォルト値が入ったファイルの指定を変えています。

atmark-distのコンフィグで、デフォルトのコンフィグを適用する際に、このAndroid用デフォルトコンフィグファイルが使用されます。

$ vi vendors/AtmarkTechno/Armadillo-500-FX.dev/tools/config-linux.conf
-DEFCONFIG_2_6=arch/arm/configs/armadillo500fx_dev_defconfig
+DEFCONFIG_2_6=arch/arm/configs/armadillo500fx_dev_android_defconfig

以降は「FX液晶モデル – ソフトウェアマニュアル」の「5.1.2. コンフィグレーション」にしたがってコンフィグ設定をします。

マニュアルどおりコンフィグが終わったら、追加で変更を加えます。

Androidを使用する場合にはArmadilloのデモアプリが邪魔なので、ビルド対象から外します。

コンフィグを変更する場合は、menuconfigを使用するのが楽です。

$ make menuconfig

まずはatmark-distのコンフィグが表示され、変更対象の選択をします。

「Kernel/Library/Defaults Selection」を選択します。

config01_5

今回はKernelのコンフィグは変更しませんが、参考までに「Customize Kernel Settings」と、「Customize Vendor/User Settings」を選択します。Yキーを押すと*が付き、選択されたことになります。

menuconfig画面02

選択したら、いったんExitでコンフィグ画面を抜けます。

コンフィグ設定を保存するか、と聞かれたらYesを選択してください。

menuconfig画面03

atmark-distのコンフィグが終了し、今度はカーネルのコンフィグが立ち上がります。

画面上の表示で、カーネルのコンフィグをしているのがわかります。

今回は特に変更が無いので、そのままExitしてください。

menuconfig画面04

カーネルのコンフィグが終了し、ファイルシステムのビルドの設定画面になります。

デモアプリをビルド対象から除外します。「Miscellaneous Applications」を選択し、次の画面で「a500-fx-demo」のチェックを外します。Nキーを押すと外れます。

menuconfig画面05

menuconfig画面06

前の画面にもどり、「X Window System」を選択します。

次の画面で、「X.Org KDrive」のチェックを外します。

デモアプリはXウィンドウアプリケーションなのですが、デモを除外したので、Xウィンドウも不要です。

menuconfig画面07

以上で変更は終わりです。Exitして、設定を保存してください。

以降は「5.1.2. コンフィグレーション」に従ってビルドし、イメージファイルを作成します。

作成したイメージファイルの書込方法は、イメージファイルをFTPでArmadilloに転送してからnetflashコマンドでローカルファイルを書き込む、専用の書き込みツールを使う、など、いくつか方法があります。

マニュアルを参照してください。

なお、ユーザーランドにアプリケーションやドライバを追加したい場合は、開発者サイト「 Armadillo-500 FXダウンロード」の「Atmark-dist 開発ガイド」というPDFを参照してください。