2011年2月24日木曜日

wxPythonでpingのGUIを作ろう

今回はwxGlade及びwxPythonを使ったリハビリ作の第一弾です。
既存のpingコマンドにGUIのインタフェースを付けてしまおうです。

環境設定は前回までで完了しているということで進めます。
参考(ま、お好みでどうぞ)

順を追って説明して行きましょう


  1. まず何よりも、どんなアプリを作りたいのか見た目やプロトタイプを作りましょう。
    実際のところ、どうやってこの工程を進めるかというのは慣れや感性によると思います。wxGladeで作りやすいかどうかということもあります。慣れてくると何となくサクッと決められるようになるはずです。
    今回はとりあえず以下のようなものを作ることにいたしましょう。
  2. 実際に作り始める前に、プロジェクトを作成します。Eclipseを開き、「File」→「New」→「Project」(あるいは、プロジェクト新規作成ボタン)をクリックし、「Pydev」→「Pydev Project」を選択し、「Next」をクリックしましょう。
  3. プロジェクトの作成画面では適当なプロジェクトフォルダ名(今回はwxPing)、PythonのVersion(今回は2.6)をセットして「Finish」をクリックします。
  4.  これで空のPythonプロジェクトが作成されます。
    続いてですが、ひとまずこちらは置いときまして、wxGladeによるGUI作成に移ります。
  5. wxGladeを立ち上げましょう。まず最初は「Add a Frame」で土台となるフレームの作成ですね。
    クラス名は気分的に"wxPingFrame"とでもしておきましょうか。
  6. 追加したフレームのプロパティにて、フレームの名前とタイトルを適当(わかりやすいよう)に設定します。今回はフレーム名を"frame_ping"、タイトルを"wxPing"とします。
  7. 画面要素を追加していきますが、まずは縦に2段必要ですね。
    スロットを一つ追加するためには、ツリーにてframe_pingの下にあるsizer_1を右クリックし「Add slot」を選択します。
  8. sizer_1が上下2つに分割されましたね。sizer_1の上のスロットは、さらに横に3分割したいのでSizerを追加します。「Add a BoxSizer」を選択して、上のスロットをクリックしましょう。Orientationは「Horizontal(水平方向)」、Slotsは「3」で作成します。
  9. 追加されたsizer_2の方には、左側から順に「Add a StaticText」、「Add a TextCtrl」、「Add a Button」。残ったsizer_1の下のスロットには「Add a TextCtrl」を追加しましょう。それぞれ適当にタイトルと名前を設定しておきます。
    (今回は"label_dist"、"text_ctrl_dist"、"button_ping"、"text_ctrl_result"とします)
  10. (ビューのレイアウトがおかしい件は置いときまして、)それぞれのアイテムに基本的なレイアウトを設定(プロパティの「Layout」タブで設定)しましょう。
    "label_dist"、"text_ctrl_dist"、"button_ping"、"text_ctrl_result"に全てに共通でBorderを"5"、wxALLにチェック(上下左右に5ピクセルの余白をつける)、wxALIGN_CENTER_VERTICALにチェック(縦に向かって中央に配置)します。
    "text_ctrl_result"にのみwxEXPANDにチェック(親の大きさに合わせる)します。
  11. なお、実際に実行したときの画面イメージは、メインのフレーム("frame_ping")のプロパティの「Preview」ボタンをクリックして表示させることができます。プレビューを見ながら、画面構成の問題点を見つけて解消していきましょう。
  12. まず一つ目は、"text_ctrl_dist"の入力欄が小さすぎて入力を確認しずらいということがあげられます。サイズを変更する必要がありますね。
    "text_ctrl_dist"のプロパティの「Common」タブを開き、「Size」のパラメータに変更を入れるためチェックをつけます。サイズが変更可能になるので、横幅を大きめに設定しましょう。
    変更を確認するにはPreviewを一旦閉じて、11.の手順で再度表示させます。
  13. 次の問題点は、Previewのウィンドウの底をドラッグしてサイズを大きくさせたときに現れます。
    "text_ctrl_result"の縦幅は変わらず、sizer_2に乗っている部分だけが移動してしまいます。
    これはBoxSizerはデフォルトでサイズ変更に合わせてレイアウトが再調整されるのに対し、TextCtrl等はデフォルトでは固定のままとなっていることが原因のようです。逆の方がいいですよね。
  14. これを解決するには、sizer_2にてProportionの値を"0"に、"text_ctrl_result"の「Layout」タブの同じくProportionの値を"1"に変更しましょう。Proportionを0に設定するとサイズ固定に、1に設定すると全体のサイズに合わせて伸縮するようになります。
    ついでに"text_ctrl_result"の初期サイズも「Common」タブのSizeにて変更しておきます。
  15. 続いてはアイテム固有のパラメータを設定していきます。
    "text_ctrl_result"について、プロパティの「Widget」タブを開き、「wxTE_MULTILINE」(テキストを複数行にする)、「wxTE_READONLY」(キーボード入力禁止)にチェックをつけます。
    プログラムからの書き込みだけを表示させるようにするという処置です。
  16. 仕上げはボタン押下に対するイベントハンドラを設定します。
    "button_ping"のプロパティの「Events」タブにて、EVT_BUTTONというイベント(ボタン押下)に対し、"OnButtonPing"というハンドラーが呼び出されるようにします。
  17. 以上でGUIの設計は一通り完了です。コードを出力しましょう。
    Applicationのプロパティで、先に作成しておいたElicpseプロジェクトのソースフォルダ(~/workspace/wxPing/src/wxPing.pyとか)に保存しましょう。
  18. wxGladeでのGUI設計ファイルも、wxGladeのメインウィンドウのFile→Saveで保存できますので保存しておいたほうが良いでしょう。(ソースコードと同じく ~/workspace/wxPing/src/wxPing.wxgで良いです。)
  19. Eclipseのプロジェクトに戻り、動作実装に移ります。出力したはずのソースファイルが表示されていない場合はプロジェクトのフォルダを右クリックし、「Refresh」して再読み込みしてみましょう。
  20. wxPing.pyを開き、ソースファイルの修正に移ります。今回はpingを実行して結果を受け取るためにsubprocessモジュールのPopenを使いたいと思いますので、subprocessパッケージを追加します。(5行目のimport wxの下辺りに追加する)
    import wx
    from subprocess import *
    
  21. 実際に動作を記述する部分は、ボタン押下時のイベントハンドラの部分のみです。先ほどのwxGladeで自動生成されたコード(OnButtonPing)部分は以下のようになっていると思います。(50行目あたり)
  22. この部分に以下のようにpingを送信するコードを記述します。
  23. 以上でプログラミングは完了です。では実行してみましょう。EclipseプロジェクトのwxPing.pyを右クリックし、「Run As」→「Python Run」でEclipse上で実行することができます。
    こんな感じに動きましたでしょうか。

いちおう以下がソースコード全文です。


以上。簡単だったでしょ?
ま、実際の活用方法は工夫次第ということですが。

2011年2月22日火曜日

Eclipse 3.6 へのPydevインストールとwxPythonのコード補完有効化

wxGladeで作成した(あるいは手書きした)wxPythonのソースコードですが、これをPyDevで開くと何やら警告だらけになってしまいます。パッケージが見つからないことが原因なようで、コード補完も働きません。
※実行は問題なくできます。

んで、適当にいじって何とかなったのでメモを残しておきます。
ついでにPyDevのインストール手順も書いておきましょう。

試した環境は以下の通りですが、他の環境でも大体同じと思います。
  • Ubuntu 10.04
  • Eclipse 3.6.1
  • Python 2.6.5 (Ubuntuのパッケージインストーラでインストール)
  • wxPython(python-wxGTK)2.8 (上に同じ)
まずはPydevのインストールからです。
PydevというのはEclipse(元々はaptana向け?)のPythonプログラミング支援プラグインですね。
詳しくは本家を眺めておきましょう。
http://pydev.org/

以下手順です。
  1. Eclipseのメニューバーの「Help」→「Install New Software...」をクリックし、プラグインインストールダイアログを開きます。
  2. PyDevプラグインは標準では登録されていないので「Add...」ボタンをクリックしてアップデートサイトを登録します。
    Nameは任意(わかりやすい名前に)、Locationに"http://pydev.org/updates"を入力してOKです。
  3. インストールするプラグインリストに「PyDev」が表示されますのでこれにチェックをつけて「Next」ボタンで進めます。(optionalの方はお好みで。Mylynはあまり知らないのでry)
  4. そのあとも「Next」、ラインセンスへの同意をチェックし、インストールを開始します。
  5. インストールの途中で、何か選択しろというダイアログが表示されます。「Aptana Pydev~」にチェックを付けて「OK」ボタンをクリックします。(Aptanaというのが気になりますが、これにチェックを入れないとPydevがインストールされません。)
  6. Eclipseをリスタートしたらどうかと聞かれるので「Restart Now」でリスタートしてやりましょう。
  7. 続いては初期設定です。 Eclipseのメニューバーの「Windows」→「Preferences」を開きます。
  8. 「Pydev」の項目が加わっていると思いますので、「Pydev」→「Interpreter - Python」を表示します。ここでは潔く「Auto Config」ボタンを押します。
  9. インストールされているPythonの環境が自動で検索されますので、「OK」をクリックします。
  10. 再びPreferencesのダイアログに戻りますので「OK」をクリックして確定とします。
以上。。。と、改めて手順を実行してみて気が付いた。wxPythonパッケージも自動で認識されてるじゃん!!

Pydevをインストールした後でwxPythonをインストールすると、当然ですがwxPythonパッケージは認識されていないので手動で追加してやる必要がある。
と、 思っていたんですが、上記のように「Auto Config」で認識されるようです。
その際は、一旦「Auto Config」で認識された環境を「Remove」して消してやり、もう一度「Auto Config」を実施することでwxPythonもろとも認識されるようになります。

ちょっとスッキリした。

2011年2月17日木曜日

Ubuntu 10.04 でwxPythonとwxGladeプレビュー編

PythonでGUIを作る簡単な方法として、wxPythonを使うことがあります。
また、このwxPythonのGUIデザインを簡単に作る(Visual Studioで言うリソースエディタ)ものとしてwxGladeがあります。

ちょっとやらない間にすぐ忘れてしまいますのでインストール手順と使い勝手のメモです。
対象は、ここ最近のトレンドUbuntu 10.04です。

wxPythonのインストール
まずはwxPythonのインストールですが、パッケージマネージャから「python-wxGTK2.8」というパッケージ名を指定してインストールできます。
$ sudo apt-get install python-wxGTK2.8

動作確認用のPythonスクリプトとして以下の内容のファイルを用意しましょう。
#!/usr/bin/python
import wx

app = wx.PySimpleApp()
frm = wx.Frame(None)
frm.Show()
app.MainLoop()
これをまあ"wxSample.py"とでもいう名前で保存して実行権限をつけて実行してやります。
$ chmod +x wxSample.py
$ ./wxSample.py
すると
 こんな感じのシンプルなウィンドウが表示されればOKです。
 「閉じる」ボタンを押して閉じましょう。

wxGladeのインストール
wxGladeもパッケージマネージャから「python-wxglade」というパッケージ名でインストールできます。
$ sudo apt-get install python-wxglade

wxGladeを起動するには、Ubuntuのメニューバーから「アプリケーション」→「プログラミング」→「wxGlade」です。
何やら3つのウィンドウが立ち上がりましたね。
とりあえずは一番左側のものがメインウィンドウ(別名ツールボックス)です。これを閉じるとwxGladeが終了します。
他のウィンドウはメインウィンドウの「View」メニューから開くことができます。
真ん中のはプロパティ(ウィンドウ)、右のはツリー(ウィンドウ)と呼ぶことにしましょう。

チュートリアルですか。
  1. まずは、ツールボックス(メインウィンドウのGUI部品が並んでいるところ)から一番左上にある「Add a Frame」をクリックします。追加するフレームに対する設定ウィンドウが表示されます。
    基本となるフレームですのでbase classは「wxFrame」を選択しましょう。Class名はお好きなように。「OK」をクリックします。プレビュー画面が表示されます。
  2.  例えばフレームのタイトル(ウィンドウタイトル)を変えるには、プロパティの「Widget」タブにて、「Title」の欄を書き換えましょう。書き換えてEnterキーを叩くとすぐさまプレビューに反映されます。
  3. メニューバーを追加するには、プロパティの「Widget」タブにて「Has MenuBar」のチェックを入れます。
    プロパティがメニューバーのものに切り替わり、「Edit Menu」をクリックするとメニュー項目を編集するためのウィンドウが表示されます。
    「Add」をクリックし、Labelを好きに編集、「>」で一つ下の階層とする。といった操作でメニューバーを作れます。「適用」ボタンですぐさまプレビューに反映されます。
  4. 基本フレーム上に部品を置いていきますが、
    基本的にはまず「Sizer」を選択してプレビュー上をクリックして追加
    (追加できる場所ではマウスが「+」マークに変化)、
    追加した「Sizer」のプロパティでスロット数(Proportion)を設定(部品配置数)、
    追加した「Sizer」の下に何か部品を追加する。
    という手順です。「Sizer」の下に「Sizer」を追加して階層構造とすることもできます。
  5. 最後にコード出力方法についてです。
    ツリーで一番上のApplicationを選択します。
    プロパティにて出力する言語(今回はPython)、ファイル名(Output path)を設定して「Generate code」ボタンでコードを出力します。
  6. 生成されたスクリプトを実行すると作成した通りのウィンドウが表示されます。
中身は何もないので閉じるぐらいしかできませんが。。。簡単にハリボテGUIが出来るということです。
実践編に続く?

    2011年2月14日月曜日

    Linuxでのパッチの作り方(diff)と使い方(patch)

    パッチはどういうときに役立てるのか、自分的なメモです。

    diffコマンドの詳細解説
    http://x68000.q-e-d.net/~68user/unix/pickup?diff
    patchコマンドの詳細解説
    http://x68000.q-e-d.net/~68user/unix/pickup?patch

    実際使うとしたら、大体以下の2通りぐらいかなと

    単一ファイルに対するパッチ
    1つ目のパターンは、一つのファイルに対するパッチを作成したいというとき。
    例えば何か修正を行う前に元々のファイルを別名でコピーしておいて、修正内容に対する差分パッチを作りたいというような場合です。

    この場合には、上の図でいうとworkspace/work/src/ディレクトに移動してdiffコマンドによるパッチを作成しましょう。
    $ cd workspace/work/src
    $ diff -u main.c.orig main.c > main.patch

    適用する場合は同じくパッチ適用対象のディレクトリにて、
    $ patch < main.patch
    ※パッチを適用し修正済みの状態にする。

    あるいはリバースパッチを当てたいときは
    $ patch -R < main.patch
    ※パッチ適用済みのものをパッチ適用前の状態に戻す。


    なお、パッチを当てたいファイルのあるディレクトリに移動せずとも、patchの引数でパッチを当てたいファイルを指定することもできる。
    例えば、workspace/backup/src/main.cにパッチを当てたければ
    $ patch workspace/backup/src/main.c < main.patch


    ディレクトリに対するパッチ
    2つ目は、元々のソースコード群が入っているディレクトリごとコピーして、開発用のソースコード群として修正していったという場合です。


    この場合はworkspaceディレクトリに移動して、ディレクトリを対象にパッチを作成しましょう。
    $ cd workspace
    $ diff -ur trank/ develop/ > sources.patch

    trankディレクトリ以下のソースにパッチを当てる際は、workspace/trankディレクトリに移動して
    $ cd workspace/trank
    $ patch -p1 < ../sources.patch


    リバースパッチを当てる場合も同様に
    $ patch -p1 -R < ../sources.patch


    なお、-dオプションでパッチを適用するディレクトリを指定することができる。例えばworkspace/trankディレクトリではなくworkspaceディレクトリでパッチ作業を行う場合は
    $ cd workspace
    $ patch -p1 -d trunk < sources.patch

    ついでにさらにworkspace/trank/srcでパッチを当てたいという場合には
    $ cd workspace
    $ patch -p2 -d trunk/src < sources.patch


    こんなもんかな。

    2011年2月10日木曜日

    ODROID-7のU-BOOT、Kernel、Androidを書き換える

    さて前回まででビルドは完了しました。お次はOdroid-7の中身をビルドしたもので置き換える方法です。

    http://dev.odroid.com/projects/odroid-t/wiki/UbootPage#s-6
    http://dev.odroid.com/projects/odroid-t/wiki/KernelPage#s-5
    http://dev.odroid.com/projects/odroid-t/wiki/AndroidPage#s-7
    書いてある通りです。

    いくつか方法はありますが、Ubuntu上でビルドしてありますので、Odroid-7への転送と書き換えも全てUbuntu上でやってしまいましょう。(使用したのはUbuntu 10.04です。)

    まずは環境の準備ですが、
    接続に必要なので(及び付属されていないので)以下を用意しましょう。
    • RS232Cポート(シリアルポート, Dサブ9ピン)
      ・・・PCに付いていない場合はUSB-Serial変換ポートを購入して用意しましょう。「USB-RS232Cコンバータ」などという名前で売られています。
    • RS232Cストレートケーブル
      ・・・末端がDサブ9ピンのオスとメスになっているケーブルです。

    それから、Ubuntuに追加でパッケージのインストールが必要です。
    まずは
    $ sudo apt-get install libusb-dev
    また、
    http://dev.odroid.com/frs/download.php/22/Linux-dltool.tar.gz
    からOdroid-7へのファイル転送用ツールをダウンロードして以下のように展開します。
    $ tar xvzf Linux-dltool.tar.gz
    (dltoolに展開される。)
    $ cd dltool
    $ sudo cp smdk-usbdl /usr/local/bin
    (私の環境ではsmdk-usbdlはそのまま実行可能でした。環境によっては再ビルドが必要になるかもしれません。)
    あとはシリアル通信用のツールが必要です。とりあえずPuTTYでいいか。
    $ sudo apt-get install putty
    以上で準備は完了。

    続いてはODROID-7との接続です。下の写真のようにODROID-7にデバッグボードと電源ケーブルを接続し、デバックボードからPCへ、RS232Cストレートケーブルと、専用USBケーブルを接続します。
    ※Androidが起動している状態では通常通りadbが利用できます。

    Ubuntu側のPuTTYでの接続ですが、Speedを「115200」に指定するぐらいです。
    私の環境(USB-RS232Cコンバータが"/dev/ttyUSB0"と認識されている)では、以下のような設定で接続できました。
    ちなみにPuTTYは、「アプリケーション」→「インターネット」→「PuTTY SSH Client」から起動できます。


    接続の確認方法としては、ODROID-7の電源が入っている状態であれば、接続後に開くPuTTYのコンソールで「Enter」を一回叩きます。
    [Enterキーを入力]
    #
    (プロンプトが表示される)
    "#"のプロンプトが表示されれば接続は成功です。

    接続後、次の作業に進むためにODROID-7をパワーオフしておきましょう。

    デバッグボードの「JIGON」ボタンを1秒ぐらい押すとODROID-7が起動します。(電源スライド操作で通常通り電源ONさせても良いです)
    このときPuTTYのコンソールを見て、何か文字が表示されたらすばやく「Enter」キーを押してAndroidの起動をキャンセルしなければなりません。

    PuTTYのコンソール
    (電源OFFした状態で、デバッグボードの「JIGON」ボタンを押す)
    U-Boot 1.3.4-dirty (May 18 2010 - 23:33:57) for HKDKC110 D Type

    CPU: S5PC110@1000MHz(OK)
    ...
    (略)
    ...
    Hit any key to stop autoboot: 0
    ※このとき(これが表示される前に)Enterキーを叩いてautobootを止める
    HKDKC110 #
    (このプロンプトが表示されれば成功!)
    タイミングが結構シビアですので失敗してAndroidが起動してしまった場合はもう一度電源をOFFしてやり直しましょう。

    では個別に書き換え方法及び確認方法を見ていきましょう。

    u-boot.binの書き換え
    まずはu-bootの書き換えですが、これは上記の"HKDKC110#"というプロンプトが表示されている状態からはじめます。

    PuTTYのコンソールにて
    HKDKC110 # run dnwu
    OTG cable Connected!
    Now, Waiting for DNW to transmit data
    (このように表示されファイル転送受け入れ待ち状態となります。)

    この状態で上の準備編で展開したdltoolを使用してファイルを転送するわけですが、ちゃんと専用USBケーブルが転送用に認識されているか、以下のコマンドを打ってを確認してみます。
    Ubuntuコンソールにて
    $ lsusb
    ...
    BUS 001 Device 007: ID 04e8:1234 Samsung Electronics Co., Ltd
    ...
    上記のように"Samsung"の何かが認識されていれば準備OKです。
    u-boot.binの転送を行いましょう。

    Ubuntuコンソールにて
    $ sudo smdk-usbdl -f u-boot.bin
    ※"u-boot.bin"はu-boot.binへのファイルパスを入力します。
    => found device: bus 001, dev 013
    => loaded 278528 bytes from u-boot.bin
    => Downloading 278538 byte to 0x30000000
    => Data checksum fba9
    => usb bulk write() returned 278538
    $
    (上のように表示されてプロンプトに戻れば成功です。)

    また、PuTTYコンソールの方では
    Download Done!! Download Address: 0x30008000, Download Filesize:0x44000
    Checksum is being calculated.
    Checksum O.K.
    writing BL1.. 9, 16
    MMC write: dev # 0, block # 9, count 16 ... 16 blocks written: OK
    completed
    writing bootloader.. 57, 1024
    MMC write: dev # 0, block # 57, count 1024 ... 1024 blocks written: OK
    completed
    HKDKC110 #
    (プロンプトに戻れば書き換え終了)

    書き換わったことを確認するには、u-bootの起動時ログを見るとわかります。
    例えば今の続きでPuTTYコンソールにて
    HKDKC110 # reset
    (u-bootが再起動するので、すぐにEnterキーを叩く)
    reset...

    OK

    U-Boot 1.3.4 (Feb 10 2011 - 11:26:37) for HKDKC110 D Type
    ...
    というようにu-bootをビルドした日時に変わっていることで確認できます。

    Kernel(zImage)の書き換え
    zImageの書き換えもu-bootと同様にPuTTYコンソールで接続して"HKDKC110 #"プロンプトが表示されている状態からはじめます。コマンドが異なりますが、流れはほぼ一緒です。

    PuTTYコンソールにて
    HDKC110 # run dnwk
    OTG cable Connected!
    Now, Waiting for DNW to transmit data

    Ubuntuコンソールにて
    $ sudo smdk-usbdl -f zImage -a 0x30008000
    ※"zImage"はzImageへのパスを入力する。通常はkernelをビルドしたディレクトリのarch/arm/boot/にできています。
    => found device: bus 001, dev 016
    => loaded 3229632 bytes from zImage
    => Downloading 3229642 bytes to 0x30008000
    => Data checksum 9630
    => usb_bulk_write() returned 3229642
    $

    これに伴いPuTTYコンソールでは
    Download Done!! Download Addres: 0x30008000, Download Filesize:0x3147c0
    Checksum is being calculated....
    Checksum O.K.
    writing kernel.. 1081, 8192
    MMC write: dev # 0, block # 1081, count 8192 ... 8192 blocks written: OK
    completed
    HKDKC110 #
    これで書き換えは完了です。

    書き換えられたことを確認するには、一度Androidを立ち上げる必要があります。
    PuTTYコンソールにて
    HKDKC110 # boot
    (Androidの起動シーケンスに入ります。)

    Androidが起動したら「Settingsアプリ」→「About phone」の『Kernel version』を確認してみてください。ビルドした際のユーザ名@マシン名に変わっていると思います。

    Android(systemとramdisk)の書き換え
    最後はAndroidのsystem(Androidのコアとなる部分)とramdisk(ルートファイルシステム)を書き換えます。

    まずsystemの書き換えです。これはODROID-7の電源を切ってMicroSDを抜いて、UbuntuのPCに挿して中身を書き換えます。

    Ubuntuコンソールにて通常のファイルコピーコマンドで中身を上書きします。
    $ sudo cp -a android/odroid7-img/system/* /media/[Ubuntuに認識されているAndroidのsystemパーティション]
    ※ MicroSDを挿したときに認識される3つのパーティションの内、272MBの容量を持つ方です。

    続いてはramdisk-uboot.imgです。これは再びPuTTYで接続し"HKDKC110 #"のプロンプトが出ているところからはじめます。
    PuTTYコンソールにて
    HKDKC110 # run dnwr
    OTG cable Connected!
    Now, Waiting for DNW to transmit data

    Ubuntuコンソールで
    $ sudo smdk-usbdl -f android/odroid7-img/ramdisk-uboot.img
    => found device: bus 001, dev 049
    => loaded 1299776 bytes from android/odroid7-img/ramdisk-uboot.img
    => Downloading 1299786 bytes to 0x30000000
    => Data checksum 6e2f
    => usb bulk write() returned 1299786
    $

    PuTTYコンソールは、
    Download Done!! Download Address: 0x30008000, Download Filesize:0x13d540
    Checksum is being calculated..
    Checksum O.K.
    writing RFS.. 9273, 6144
    MMC write: dev # 0, block # 9273, count 6144 ... 6144 blocks written: OK
    completed
    HKDKC110 #

    書き換わったことを確認するにはAndroidを起動させます。

    Androidが起動したらやはり「Settingsアプリ」→「About phone」の『Build number』を確認しましょう。
    ビルド環境に応じて書き換わっていることが確認できます。

    ODROID-7のAndroidをビルドする

    ビルド編の最後を飾りますはAndroidであります。

    http://dev.odroid.com/projects/odroid-t/wiki/AndroidPage
    ここを見れば全てわかりますし、今回は何も引っかかりはありません。

    ですが、Ubuntu 10.04で実際やってみた流れを説明していくことにしましょう。

    まず何より先に注意しておきたいことですが、このAndroidをフルにビルドするには結構マシンスペックが必要です。目安としてですが、Intel Core 2 Duo、メモリ2GB以上はあった方がよいと思います。
    ※特にメモリが少ないと(512MB以下だと)Ubuntuが唸りを上げて操作不能になります。

    でははじめに、必要なパッケージをまとめてインストールしましょう。
    手順のようにコンソールからコマンドを打っても良いですが、せっかくなのでSynaptic パッケージ・マネージャを使って楽をしましょう。
    Ubuntuのメニューバーの「システム」→「システム管理」→「Synaptic パッケージ・マネージャ」を開きます。

    パッケージを選択する前にリポジトリの設定変更を行います。
    Ubuntu 10.04ではsun-java6-jdkがデフォルトの設定ではインストールできなくなっているためです。
    メニューの「設定」→「リポジトリ」をクリックして、「他のソフトウェア」タブを選択し、
    「http://archive.canonical.com/ubuntu lucid partner」にチェックをつけましょう。

    チェックを付けたら「閉じる」ボタンをクリックして設定を閉じます。パッケージマネージャのウィンドウに戻って「再読込」ボタンをクリックしましょう。
    これでパッケージマネージャでsun-java6-jdkが検索できるようになります。(apt-getコマンドでも同じく検索・インストールできるようになります。)

    それでは「クイック検索」で下記のパッケージを探して『インストール指定』のチェックをしていきましょう。※依存関係で提案されるパッケージも全て『マーク』していきます。
    • flex
    • bison
    • gperf
    • libsdl1.2-dev
    • (libesd0-dev)※マーク済みになっているはず
    • libwxgtk2.6-dev
    • build-essential
    • (zip)※デフォルトでインストール済みのはず
    • curl
    • valgrind
    • sun-java6-jdk
    • uboot-mkimage
    全てチェックを終えたら「適用」ボタンをクリックしてインストールを実行しましょう。
    途中「sun-java6-jreのライセンス条項に同意しますか?」と出てくるかもしれませんが「同意」しておきましょう。

    続いては環境変数を設定してやりますが、(以降はコンソールでの作業になります)
    $ ls -l /usr/lib/jvm/
    drwxr-xr-x 4 root root 4096 2011-02-09 23:25 java-6-openjdk
    lrwxrwxrwx 1 root root 19 2011-02-09 23:23 java-6-sun -> java-6-sun-1.6.0.22
    drwxr-xr-x 8 root root 4096 2011-02-09 23:24 java-6-sun-1.6.0.22
    となっていることから「java-6-sun」というのが常に最新のjavaを指していることが推察されます。
    ですので、手順のようにバージョンを指定せずとも、「java-6-sun」を指定すれば良いということです。
    $ vi ~/.bashrc
    export JAVA_HOME=/usr/lib/jvm/java-6-sun
    export ANDROID_JAVA_HOME=$JAVA_HOME
    (上記2行を最後尾に追加し、保存して閉じる)
    $ source ~/.bashrc

    Androidソースコードを入手します。
    http://dev.odroid.com/projects/odroid-t/download
    こちらで最新リリースをチェックします。
    http://dev.odroid.com/projects/odroid-t/download/note/55
    現状の最新版はこちらの「Odroid-7 Release(2011-17-Jan)」ですね。「Android source ==>」というリンクからAndroidソースコードを入手可能です。

    ひとまず適当な場所で展開しましょう。
    $ tar xvzf odroid7-android.tar.gz
    (androidというディレクトリに展開されます。)

    さてこのAndroidのソースコードですが、いくつかドライバモジュールやライブラリ、バイナリファイルが不足しています。不足しているファイルはOdroid-7実機からADB経由で取ってくる必要があります。
    ※ADBで接続する手順については以前書きましたこちらを参照。

    手順の通りadb pullコマンドで一個一個取ってくるのも良いですが、手間を省くためシェルスクリプトを作ってみました。
    #!/bin/bash
    
    ANDROID_HOME=.
    DIR_CONFIDENTIAL=$ANDROID_HOME/vendor/confidential
    DIR_MODULE=$DIR_CONFIDENTIAL/module
    DIR_LIB=$DIR_CONFIDENTIAL/lib
    DIR_BIN=$DIR_CONFIDENTIAL/bin
    
    mkdir -p $DIR_MODULE $DIR_LIB $DIR_BIN
    
    # == adb pull modules ==
    
    adb pull /modules/pvrsrvkm.ko $DIR_MODULE
    adb pull /modules/s3c_lcd.ko $DIR_MODULE
    adb pull /modules/s3c_bc.ko $DIR_MODULE
    
    # == adb pull library files ==
    
    adb pull /system/lib/egl/libEGL_POWERVR_SGX540_120.so $DIR_LIB
    adb pull /system/lib/egl/libGLESv1_CM_POWERVR_SGX540_120.so $DIR_LIB
    adb pull /system/lib/egl/libGLESv2_POWERVR_SGX540_120.so $DIR_LIB
    adb pull /system/lib/libsrv_um.so $DIR_LIB
    adb pull /system/lib/libsrv_init.so $DIR_LIB
    adb pull /system/lib/libIMGegl.so $DIR_LIB
    adb pull /system/lib/libpvr2d.so $DIR_LIB
    adb pull /system/lib/libPVRScopeServices.so $DIR_LIB
    adb pull /system/lib/libglslcompiler.so $DIR_LIB
    adb pull /system/lib/libpvrANDROID_WSEGL.so $DIR_LIB
    adb pull /system/lib/hw/gralloc.s5pc110.so $DIR_LIB
    adb pull /system/lib/hw/copybit.odroid7.so $DIR_LIB
    adb pull /system/lib/hw/sensors.odroid7.so $DIR_LIB
    
    # == adb pull binary files ==
    
    adb pull /system/bin/pvrsrvinit $DIR_BIN
    adb pull /system/bin/geomagneticd $DIR_BIN
    adb pull /system/bin/orientationd $DIR_BIN
    adb pull /system/bin/logtool $DIR_BIN
    
    # == Change access permission ==
    chmod -R 755 $DIR_CONFIDENTIAL
    
    エディタにぺけっとコピペして保存し、実行権限を付けて、先ほど展開したandroidディレクトリ直下に置きましょう。名前は仮に"adb_pull.sh"としておきます。

    Ubuntu PCとOdroid-7を専用USBケーブルで接続した状態(adbでアクセスできる状態)でシェルスクリプトを実行します。
    $ cd android
    $ ./adb_pull.sh

    本家サイトの手順の方では、Odroid-7内のShellでMicroSDカードに格納していくという方法もかかれています。
    まあ、あともう一つの方法としては、EclipseのDDMSのファイルエクスプローラを使ってファイル名を見ながらポチポチっとダウンロードしていくというのもあります。(やってることはadb pullと一緒ですね。)
    どちらにしても専用ケーブルで繋いでadb経由で作業することに変わりはなく、手間としてはスクリプトでバッチ作業的にやる方が楽かなと思います。

    っと、本線にもどりまして。
    一応これでビルドのための環境は整いました。後はビルドコマンドを打つだけです。
    androidディレクトリにて
    $ ./odroid_7_build
    ...
    [[[[[[[ ok success !!! ]]]]]]]
    (と表示されれば、ビルド成功です。※1時間ぐらいかかると思います。)
    odroid7-imgディレクトリにramdisk-uboot.imgとAndroidのsystemが生成されます。

    2011年2月8日火曜日

    ODROID-7のリカバリー、アップデート、リリースイメージ焼きこみ

    寄り道ですが。ODROID-7のリカバリーツール、アップデートイメージとリリースイメージの焼きこみ方法について見てみましょう。

    ※注意点として、これらのイメージ焼きこみを実施するとMicroSDカードがフォーマットされます(付属MicroSDに対して実施する場合、ソースコードや回路図、取り扱い説明書などが全部消去されます)。
    大事なデータがある場合はバックアップをとってから実施しましょう。
    また、別のMicroSDカードを用いる場合は必ず4GB以上の容量のものを使いましょう。
    (私の場合は4GBのMicroSDがなかったので8GBのものを使いました。この場合には4GB分未使用領域が残されることになります。)

    今回はWindows XPで実施しています。(Windows用ツールしかないため)


    リカバリーイメージ編
    まずリカバリーツールについて。
    これはMicroSDが壊れて「ODROID-7が起動しなくなってしまった!」という場合に使うものなのでしょうかね。
    http://dev.odroid.com/projects/odroid-t/download/note/53
    こちらから「ODROID-7 Recovery Image - 2010/11/09」というものを入手します。
    zipファイルを解凍すると、Windows用アプリとリカバリー用イメージ(.odtファイル)が入っています。
    ※「.odtファイル」はOpenOfficeのOpenDocument テキストではありません。開こうとしても無駄です。

    書き換え対象のMicroSDをPCに挿した状態で、「ODROID_7_TF_Burner_25b.exe」をダブルクリックで実行します。

    書き換えアプリが起動しますので、
    T-Flash Driveには書き換え対象のMicroSDのドライブレター、Image Fileは先ほど解凍して出てきた「odroid7-20101119.odt」を指定します。
    準備が出来たら「START」ボタンを押して開始です。



    Progressが100%になるまで待ちましょう。
    「Fusing image done」とダイアログメッセージが出れば完了です。

    ODROID-7に挿して起動させてみましょう。

    アップデートイメージ編
    続いてはアップデートイメージへの焼き換え方法です。
    http://dev.odroid.com/projects/odroid-t/download/note/54
    こちらに「ODROID-7 Update Image - 2010-Dec-11」が上がっています。
    ダウンロードして解凍してみるとWindows用アプリ「ODROID_7_TF_Burner_22a.exe」とアップデートイメージ「odroid7-20101211.odt」が出てきます。

    アプリの名前が若干違いますが、見た目や使い方はリカバリーのものと同様です。
    「odroid7-20101211.odt」を指定して焼きこみを開始しましょう。

    リリースイメージ編
    最後は最新のリリースイメージへの焼き換えです。
    http://dev.odroid.com/projects/odroid-t/download/note/55
    こちらにある「Odroid-7 Release (2011-17-Jan)」が現状の最新版のようです。zipファイルをダウンロードしましょう。
    解凍すると先程までと異なりイメージファイル「odroid7-20110117.odt」しか入っていませんね。
    これを焼きこむには、アップデート編で使用したアプリでOKです。

    同様に「odroid7-20110117.odt」を指定して焼きこみましょう。


    補足です。
    参考までに、元々入ってAndroidとリカバリーやアップデートイメージで焼きこまれるAndroidとの違い(識別情報)について見てみましょう。
    (細かい違いについてはダウンロード先URLの説明を読みましょう。)

    Settingsアプリを起動し、About phone項目を選択し、「Build number」を確認してみました。
    ※ビルド時の情報(Androidバージョン、ビルドオプション、ユーザ名、日時など)が埋め込まれる言わば指紋みたいなもんですかね。
    • 元々のAndroid : odroid7-eng 2.2 FRF91 eng.odroid.20101113.113817 test-keys
    • リカバリー版 : odroid7-eng 2.2 FRF91 eng.odroid.20101113.154518 test-keys
    • アップデート版 : odroid7-eng 2.2 FRF91 eng.ydongyol.20101210.103939 test-keys
    • リリース版 : odroid7-eng 2.2.1 FRG83 eng.codewalker.20110117.103827 test-keys
    リカバリー版は元々のAndroidとほぼ同じもの。
    アップデート版、リリース版は元々のAndroidよりも新しい。
    リリース版ではAndroid 2.2.1と他よりも新しいバージョンのAndroidが入っていることがわかります。

    ちなみにKernel versionの方は 2.6.32.9 が一律入っていました。

    ODROID-7を入手したらはじめにやっておくこと

    何をいまさらという感がありますが、思い出したので書いときます。

    まず何はともあれバックアップです。付属MicroSDカードのバックアップを取りましょう。

    付属のMicroSDカードには取り扱い説明書PDFやソースコード、回路図が含まれていますので、まずは普通にWindows PCなどに挿して、それらのファイルを引っ張っておきましょう。
    ODROID-7のAndroid用の外部ストレージとしても使われるので雑多なものも入っているかもしれませんが、以下のフォルダに重要なファイルが入っています。
    • 「Manual」フォルダ・・・取扱説明書(英語)PDFファイルが入っています。
    • 「Schematics」フォルダ・・・回路図のPDFファイルが入っています。
    • 「SourceCode」フォルダ・・・KernelとAndroidのソースコードが入っています。
    他はAndroidアプリが生成するデータ用のファイルですので、特に必要はないはずです。

    続いて、MicroSDカード自体をイメージファイル化してバックアップします。
    ツールは『DD for Windows』が利用できます。
    http://www.si-linux.co.jp/wiki/silinux/index.php?DDforWindows
    (使い方についても上記URLに掲載されています。)

    付属のものとは別の4GB以上のMicroSDカードにリストアして、ちゃんとAndroidが起動することは確認しました。

    補記
     『DD for Windows』ですが、以前は4GBを超えるメディアは扱えなかったのですが、いつの間にやらアップデートされていて4GB以上のものも扱えるようになっていましたね。
     (今回は幸いにして付属のmicroSDカードは4GBでしたので、アップデートに気が付かず古いバージョン(v.0.9.9.4)を使っても大丈夫でした。^_^; )

    ODROID-7のKernelをビルドする

    さあ参りましょう。ODROID-7のKernelビルド編です。

    http://dev.odroid.com/projects/odroid-t/wiki/KernelPage
    やっぱりここに書いてあるんですがね。
    概ね手順通りやればOKです。

    前回のU-BOOTビルドの環境が出来ていることを前提とします。
    (Ubuntu 10.04にARMのツールチェインが入った状態です。)

    1. Kernelのソースコードを入手します。
      http://dev.odroid.com/projects/odroid-t/download/
      こちらから最新リリースを選択し、"Kernel source ==>"のリンクからダウンロードします。
      (今回だとOdroid-7 Release(2011-17-Jan)というリリースが最新のようです。)
       
    2. 適当な場所に展開し、手順の通りビルドコマンドを実行してみます。
      $ tar xvzf odroid7-kernel.tar.gz
      (kernelというディレクトリに展開されます。)
      $ cd kernel
      $ make odroid_7_mmc_defconfig
      $ make zImage
      ...
      make: /opt/toolchains/arm-2010.09/bin/arm-none-eabi-gcc:コマンドが見つかりませんでした
      (※ビルド失敗)
      今回も駄目でしたか。前回と同じくarm-none-linux-gnueabi-gccが正しいコマンドであるはずですので、、、
    3. ビルドリトライ
      $ CROSS_COMPILE=arm-none-linux-gnueabi- make zImage
      ...
      Kernel: arch/arm/boot/zImage is ready
      (ビルドに成功!)
      見事にzImageが作成されましたね。(arch/arm/boot/に置かれます)

    2011年2月7日月曜日

    ODROID-7のU-BOOTをビルド

    まず手始めはU-BOOTのビルド方法です。

    一応、こちらに手順が書かれています。
    http://dev.odroid.com/projects/odroid-t/wiki/UbootPage

    が、手順どおり実施してもうまくいかなかったので試行錯誤してなんとかなったことを書いときます。
    (※環境はUbuntu 10.04です。以降も同じです。)
    1. ツールチェインのダウンロードと設定
      http://www.codesourcery.com/sgpp/lite/arm/portal/release1600
      より、「IA32 GNU/Linux TAR版」をダウンロードします。
      適当なディレクトリを作成して展開します。
      $ sudo mkdir /opt/toolchains
      $ sudo tar xjvf arm-2010.09-50-arm-none-linux-gnueabi-i686-pc-linux-gnu.tar.bz2 -C /opt/toolchains
      (※一行で続いています。ちなみにtarの-Cオプションは展開先ディレクトリ指定ですね。)
      コマンドラインで利用できるように.bashrcを編集しパスを通します。
      $ vi ~/.bashrc
      PATH=$PATH:/opt/toolchains/arm-2010.09/bin
      (この1行を末尾に追加して保存して閉じます)
      $ source ~/.bashrc
      これで例えば
      $ arm-none-linux-gnueabi-gcc -v
      ※コマンド見つからんエラーではなく、gccのバージョン情報などが出てくれば成功。
    2. u-bootのソースコードをダウンロード
      http://dev.odroid.com/projects/odroid-t/download/note/38
      ここからodroid用の最新版ソースを入手し、適当な場所に展開します。ダウンロードされたファイル名はodroid-c110-uboot_20100727.tar.gzでした。
      (ubootというディレクトリに展開されます。)
    3. u-bootのビルド
      手順の通りやってみたところ
      $ cd uboot
      $ make mrproper
      $ make hkdkc110_mmc_config
      $ make
      ...
      /usr/local/arm/4.3.1-eabi-armv6/usr/bin/arm-linux-gcc:コマンドが見つかりませんでした。
      ...(※ビルド失敗)
      失敗してしまいました。
      えーと、確か先ほどのツールチェインにはarm-none-linux-gnueabi-xxxコマンドがインストールされているはずです。
    4. ubootビルドのリトライ
      一応デフォルトのビルドオプションを確認してみると
      $ grep /usr/local *
      Makefile:#CROSS_COMPILE = /usr/local/arm/4.4.1-eabi-cortex-a8/usr/bin/arm-linux-
      Makefile:#CROSS_COMPILE = /usr/local/arm/4.2.2-eabi/usr/bin/arm-linux-
      Makefile:CROSS_COMPILE = /usr/local/arm/4.3.1-eabi-armv6/usr/bin/arm-linux-
      と出てきました。CROSS_COMPILEという環境変数を置き換えてやれば良さそうですね。
      ということでリトライ
      $ CROSS_COMPILE=arm-none-linux-gnueabi- make
      ...
      ERROR: undefined reference to `__aeabi_unwind_cpp_pr0
      ...※コンパイルエラーで失敗。
      駄目みたいですね。
    5. 正しいツールチェインを探してくる
      http://dev.odroid.com/projects/odroid-t/download/note/30
      ここに4.3.1-eabi.tar.gzという、それっぽいものが置いてあります。
      ダウンロードして適切な場所に展開します。
      $ sudo mkdir /usr/local/arm/
      $ sudo tar xvzf 4.3.1-eabi.tar.gz -C /usr/local/arm
      ここでしか使わないのでパスは特に通したりしなくてもよいです。
    6. u-bootのビルド(三度目の正直)
      というわけで
      $ make mrproper
      $ make hkdkc110_mmc_config
      $ make
      ※ビルドが正常に終了
      見事にu-boot.binが作成されましたね。

    ODROID-7をADBで接続する

    さあ段々とAndroid開発っぽくなってまいりました。
    ODROID-7をADBで接続する手順について説明します。

    ・Windows編(Windows XPを使っています。)
    http://dev.odroid.com/projects/odroid/download/13
    まず上のURLよりWindows用ドライバをダウンロードし、解凍しておきます。
    続いて、ODROID-7の電源を入れた状態で専用のUSBケーブルで接続します。
    Windowsのデバイスドライバ適用の自動ウィザードが実行されますので、
    先に解凍しておいたドライバのフォルダを直接指定します。
    (32bitOSの場合は、odroid_xp_composite_driver\x86を指定します。)

    ・Ubuntu編(Ubuntu 10.04を使っています。)
    まず専用USBでODROID-7と接続します。
    lsusbコマンドを実行すると
    $ lsusb
    ...
    Bus 001 Device 006: ID 18d1:0002
    ...
    と1行増えていることからベンダーIDは"18d1"であることがわかります。
    そこで
    $ sudo vi /etc/udev/rules.d/52-odroid.rules
    SUBSYSTEM=="usb", SYSFS{idVendor}=="18d1" MODE="0666"
    (と、一行入力し保存して閉じる)
    $ sudo chmod a+rx /etc/udev/rules.d/52-odroid.rules
    その後、一旦USBケーブルを抜いて挿します。

    確認はUbuntuのコンソールや、Windowsのコマンドプロンプトにて
    $ adb devices
    List of devices attached
    BABABEEFBABABEEF devices
    と表示されれば成功です。(ADBで接続できています。)

    試しに撮ってみたODROID-7のホーム画面のキャプチャー画像です。


    ※補記
    最新のAndroid SDK r09ではadbコマンドの格納場所が以前と変わったようです。
    以前(1.5の時ですが)は[Android SDKのトップディレクトリ]/tools に入っていたのですが、
    r09では[Android SDKのトップディレクトリ]/platform-tools に入っているようです。

    ODROID-7の電源ケーブルの変換プラグに関する推理

    突然ですが。
    ODROID-7に付属している電源ケーブルがあります。これを日本のコンセントに挿すためにはどの変換プラグが必要なのかという問題です。

    答えはSEタイプをAタイプへ変換する「海外製品を日本で使用するための」変換プラグです。
    http://www.yodobashi.com/ec/product/100000001001120283/index.html

    ~以下駄文~

    詳細よくわかりませんが、海外旅行用のAタイプへのマルチ変換プラグというのが売られているのですが、パッケージを見るとどれも「日本では使えません」の文字が書かれています。
    海外製品を日本で使うための変換プラグは、シングルタイプのものしかないようです。
    本当は使えるのかも知れませんが、いらないものを買っても仕方ありませんしね。

    さて、この変換プラグを選択した根拠ですが2つあります。

    その1。
    アダプタには韓国の認証マークが書かれており、韓国語で説明書きがされています。

    その2。
    寸法を測りました。

    以上の条件からプラグを絞り込むことができます。

    韓国で使用されるのは「Aタイプ(日本と同じ)」、「Cタイプ」、「SEタイプ」です。
    2本の丸いピンが出ている似たような形状のものは「Bタイプ」「Cタイプ」「SEタイプ」です。
    そしてBタイプはピン直径が5mm、Cタイプはピン直径が4mm、SEタイプはピン直径が4.8mmです。
    このことより、ピン直径が一番近い「SEタイプ」と結論づけることができます。

    ちなみに電圧の方は100~240V 50/60Hzとなっているので、日本のコンセントにそのまま挿して問題ありません。

    2011年2月1日火曜日

    PHP 5.2をWindows上でビルドする?

    本当の目的はこのことじゃないのだが、途中経路としてやってみたのでメモです。

    一応のところ、PHPをWindows上でビルドする手順は以下に掲載されている。
    http://wiki.php.net/internals/windows/stepbystepbuild
    (これはPHP5.3の手順となっているが、PHP5.2でもまあ同様にできる)

    手順通りやっていて引っかかった部分があったので、その辺を補足しながら全て説明しよう。
    ※Windows XPを使いました。


    必要なもの
    まず、ビルド環境としてMicrosoft Visual C++が必要。VC++6.0が推奨なれど、VC++2008やVC++2005でもOKとのこと。(無償のExpress EditionでもOK)
    あと、Windows SDKまたはPlatform SDKが必要。(VC++とWindowsのバージョンに合わせて適当なものをインストールせよということでしょう。)
    あとは、追加でビルドのためのWindows用のツールとライブラリが必要。
    ツールはこちらbinary-tools.zip
    ライブラリはこちらwin32build.zip

    ※と、書かれていますが現状のところビルドに成功した環境は、Visual Studio 2005とPlatform SDKの組み合わせのみです。(無償のExpress Editionで出来ればな~と思ったんですがイマイチうまくいかなかった。)


    詳しい手順
    1. 事前に、Visual Studio 2005のVC++をインストールしておきます。
      (Microsoft Updateで最新の状態にしておきます。)
    2. Microsoft Platform SDK for Windows Server 2003 SP1をインストールする。
      http://www.microsoft.com/downloads/en/details.aspx?FamilyId=A55B6B43-E24F-4EA3-A93E-40C0EC4F68E5&displaylang=en
      Webインストーラのダウンロードページです。(色々バージョンがあるみたいですが、他のバージョンは試してません)
    3. PHPのソースコード(最新開発版スナップショット)をダウンロードする。
      http://snaps.php.net/
      今回はPHP5.2をビルドするのでphp-5.2-devをダウンロードします。
      (PHP5.3をビルドしたい場合はphp-5.3-devの方をダウンロードして、以下は適宜読み替えましょう)
    4. 作業用フォルダを作成します。
      C:\php-sdk
      手順に習ってCドライブ直下にphp-sdkフォルダを新規作成します。
    5. 上記でダウンロードした「binary-tools.zip」を解凍した中身の「bin」と「script」フォルダを、作業用フォルダ直下に配置(コピーまたは移動)します。
    6. Platform SDK のShell(コマンドプロンプト)を起動します。
      スタート→プログラム→Microsoft Platform SDK for Windows Server 2003 SP1
       → Open Build Environment Windows
       → Windows XP 32-bit Build Environment
       → Set Windows XP 32-bit Build Environment(RETAIL)
      で起動できると思います。
    7. 以下、上で開いたコマンドプロンプトにて
      > setenv /XP32 /RETAIL
      > cd c:\php-sdk
      > bin\phpsdk_setvars.bat
      > bin\phpsdk_buildtree.bat php52dev
      1行目は必要ないかもしれませんが、気分的に。
      2行目のパスは作業フォルダのパスに、最後の行のphp52devは好みの名前に変えてもOKです。
      これによりphp52dev以下にphpビルド用のフォルダが作成されます。
    8. 続いて自動作成されたフォルダ内に、Windows用ライブラリとphpソースコードを配置します。
      まず、ライブラリの配置ですが、上記のwin32build.zipを解凍した中身を以下のフォルダにコピーします。
      c:\php-sdk\php52dev\vc9\x86\deps\
      (この下にはすでに「bin」、「include」、「lib」フォルダがありますが、中身は空っぽですので上書きコピーでOKです。)
      次にphp-5.2-devよりダウンロードして解凍したものを以下におきます。
      c:\php-sdk\php52dev\vc9\x86\
      (ダウンロードされるファイルおよび解凍したフォルダ名は、日によって異なります。
      今現在だとphp5.2-201102010330というフォルダが解凍されて出てきました(日付と時刻が名前に入っているようです)。)
    9. コマンドプロンプトより、ビルドを実行します。
      > cd c:\php-sdk\php52dev\vc9\x86\php5.2-201102010330 > buildconf
      Rebuilding configure.js
      Now run 'cscript /nologo configure.js --help'
      > configure --help
      ~コマンドオプションが表示される~(略)
      > configure --disable-all --enable-cli 
      ~(略)~
      ERROR: you chosen output directory no does not exist
      ※エラーでとまります。
      このエラーについてですが、出力先ディレクトリがねぇよと言っているようです。
      対処方法としてはphp5.2-201102010330以下に「no」というフォルダを作成しておきます。
    10. 気を取り直してもう一度ですが、依存ライブラリを読み込むようにオプションを追加して実行します。
      > configure --disable-all --enable-cli --with-php-build="../deps"
      ~(略)~
      Type 'nmake' to build PHP
      ※正常に完了するとこの文字が表示されます。
    11. 最後にnmakeを実行すると、ビルドが開始されます。
    12. > nmake
    13. 「no」フォルダ以下に「Release_TS」というフォルダが作成されphp.exeが出来上がります。
    以上?

    補足(ビルドの失敗の話)
    ・VC++2005 Express Edition を使った場合
    Platform SDKがVC++2005EEを認識してくれないため、cl等のコマンドが使用できずビルドできない。
    ・VC++2008 Express EditionとWindows SDK 6.1を使った場合
    ビルドエラーが発生した。
    なんとかしたらできるかも知れません。