初版 : 2006/11/04 (etch が testing だった頃に初メモ)
2版 : 2007/05/03 (etch が 4.0r0 リリースになってからのメモで、VMware Player 1.0.4、Debian GUI インストーラ利用)
★警告★ このページは記述が古すぎます。直近のDebian lenny(5.0.x)/squeeze(6.0.x)では通用しないかもしれません。そもそも lenny / squeeze の gcc でりなざうバイナリがビルドできるかどうか未知数です。ほぼメンテしていない跡地みたいなところなので、悪しからず。(あるバイナリのリンク切れのフォローだけしてます) -- 2011/07/23
※2007/09/12 に Debian 4.0r1 がリリースされています。リンク切れの場合は URL の 4.0_r0 を 4.0_r1 に置き換えて試してください。 -- 2007/12/01
※2011/夏時点で確認されている etch 最終版は 4.0r9 です。 古いDebianをアーカイブしているサイト(一例) (別解:DVD版)等からダウンロードできます。 -- 2011/07/23
※※ Qtopia 開発キットのリンク切れが判明しました。該当部分は http://asaasa.tk/files/zaudev/QtopiaDevelop_x86.tar.bz2 をダウンロードして解凍してください。rpm 2つ含んでいます。 -- 2011/07/23
※※ VMware Player は2011年時点で 3.x になっており、3.0以降はvmxファイル/vmdkファイルを自力生成してくれるようになりました。楽になったかも? -- 2011/07/23
事前準備
このページでは、Windows XP 上で VMware Player を利用して Debian GNU/Linux の環境を構築し、その上にクロスコンパイル環境をインストールする手順をメモします。利用しているソフトウェアは、以下のとおりです。
- Microsoft Windows XP Home Edition (SP2ならびに最新更新モジュール適用済み)
- Windows XP の別の Edition (Pro / Media Center 等) や、Windows Vista でもたぶん問題ないかと思います。
- NTFS パーティションであることを前提にメモ書きしています。
- 6GB 程度の空き領域が必要です。
- インターネットに常時接続しているものとします。
- VMware Player
- Debian GNU/Linux 4.0 "etch"
Windows XP に VMware Player を導入する手順はウィザードに従っていくだけのため、割愛します。
VMware Player で最小限必要なファイルの作成
- 作業フォルダを任意の場所に作成します。(ここでは、 E:\Debian をそのフォルダと仮定します)
- 仮想マシン設定ファイル Debian.vmx を作成します。内容は以下のとおり。
0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
| config.version = "8"
virtualHW.version = "4"
scsi0.present = "TRUE"
scsi0.virtualDev = "lsilogic"
memsize = "128"
MemAllowAutoScaleDown = "FALSE"
scsi0:0.present = "TRUE"
scsi0:0.fileName = "Debian.vmdk"
ide1:0.present = "TRUE"
ide1:0.fileName = "debian-40r0-i386-CD-1.iso"
ide1:0.deviceType = "cdrom-image"
floppy0.present = "FALSE"
ethernet0.present = "TRUE"
usb.present = "TRUE"
sound.present = "TRUE"
sound.virtualDev = "es1371"
sound.fileName = "-1"
sound.autodetect = "TRUE"
displayName = "Debian for Zaurus Develop"
guestOS = "other26xlinux"
nvram = "Other Linux 2.6.x kernel.nvram"
|
ISOファイルではなく、CD-ROMドライブそのものを使いたい場合は、以下のように2行差し替えします。
ide1:0.deviceType = "cdrom-image"
ide1:0.fileName = "debian-40r0-i386-CD-1.iso"
↓
ide1:0.fileName = "auto detect"
ide1:0.deviceType = "cdrom-raw"
- 仮想ディスク設定ファイル Debian.vmdk を作成します。内容は以下のとおり(テキストファイルです)。
0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
| # Disk DescriptorFile
version=1
CID=d49241bf
parentCID=ffffffff
createType="monolithicFlat"
# Extent description
RW 8178892 FLAT "Debian-flat.vmdk" 0
# The Disk Data Base
#DDB
ddb.virtualHWVersion = "4"
ddb.geometry.cylinders = "509"
ddb.geometry.heads = "255"
ddb.geometry.sectors = "63"
ddb.adapterType = "lsilogic"
|
- 仮想ディスク本体である Debian-flat.vmdk の作成
- Debian のインストール用CDイメージファイル debian-40r0-i386-CD-1.iso を E:\Debian にコピーしておきます。
以上で準備完了です。
Debian GNU/Linux の導入
このメモは 2007/04/07 にリリースされた Debian GNU/Linux 4.0r0 "etch" の disc1 (CD版) をもとにメモしています。よって、利用する CD-ROM のバージョンによって、画面の細かい部分に差異の可能性があります (第2版のような更新による大幅訂正がかかることもありますが、基本的には一度書いたらそのままです...割とメモるのが大変ですので)。
- VMXファイルをダブルクリックし、VMware Player を起動します。Debian のロゴが表示されたら、installgui と入力してからEnterキーを押下します。(末尾の _ はカーソルで表示されていますので入力不要です)
- 言語選択メニューが表示されます(規定値 English)。J キーを押下すると、「Japanese - 日本語」が選択状態になりますので、画面右下の 「Continue」 ボタンをクリックします。
- キーボード選択メニューになりますが、日本語キーボードであればそのまま画面右下の 「続ける」ボタンをクリックします。(クリック後、インストーラの読み込みなどで1~2分待つことになります)
以下、「続ける」クリックは Enter キー押下でも代替できますし、installgui ではない(テキストインストーラ) では「続ける」ボタンが無いだけで Enter で進行できるようになっています。以後、「続ける」をクリック、のように簡潔に書いていきます。
- ホスト名入力を求められます(規定値 debian)。ホスト名には zaurusdev と入力しておきます (ZAURUS DEVelop の略ですね)。入力を終えたら「続ける」をクリック。
- ドメイン名の入力を求められます (規定値は空欄)。空欄のまま、「続ける」をクリック。
- パーティション編集メニューになります(規定値は「ガイド - ディスク全体を使う」)。規定値のまま「続ける」をクリック。[実機の場合は手動で行ったほうがいいのですが、マルチブートなどに絡んで手順がやや複雑になるので、ここでは割愛します)
- パーティション情報が失われる警告が表示されますが、問題なければ「続ける」をクリックして継続です。
- パーティション情報の詳細が表示されます(規定値はすべてのファイルを1つのパーティションに)。規定値のまま 「続ける」をクリックして継続します。
- パーティション情報編集の終了確認画面になりますので、新パーティションの予定や「パーティショニングの終了とディスクへの変更の書き込み」(規定値)であることを確認して、そのまま「続ける」をクリックします。
- ディスクに変更を書き込むかの最終確認画面になります(規定値 いいえ)。「はい」 をクリックして選択してから、「続ける」をクリックします。
なお、規定値「いいえ」のまま「続ける」をクリックした場合は、ひとつ前の画面に戻されます。
「はい」「続ける」をクリックしたら、数分ほどパーティション確保などが実行されていきますので、数分程度待ちます。
- root パスワードの入力が求められます。パスワードを2回入力して「続ける」をクリックします。
- ユーザーの本名入力が求められますが、「zaurus」と入力して、「続ける」をクリックします。
- アカウントのユーザー名が本名から自動決定されます(今回は「zaurus」が規定値になっているはずです)。「続ける」をクリックします。
- 新ユーザー「zaurus」のパスワード入力を求められます。2回パスワードを入力して、「続ける」をクリックします。
- ベースシステムのインストールになります。数分~数十分待つことになります。
- ネットワークミラーを使うかの確認が出ますので、規定値(はい)のまま「続ける」をクリックします。
- 国の選択になりますが、規定値(日本)のまま「続ける」をクリックします。
- サーバーの選択です。規定値(ftp.jp.debian.org)のまま「続ける」をクリックします。
(ISPが ASAHI-NET、DTI または関連会社の場合は、ISP名のサーバーを選んだ方がいいかもしれません)
- プロキシ経由でネットに接続している場合は、プロキシサーバーの場所を入力します。特に不要な場合は空欄のまま「続ける」をクリックします。
(画像はプロキシ不要で空欄のケースです)
- パッケージ利用調査の参加有無が質問されますが、規定値(いいえ)のまま、「続ける」をクリックします。
- インストールするソフトウェアの選択一覧が表示されます。規定値 (標準システムとデスクトップ環境だけがチェックされている)で「続ける」をクリックします。
- パッケージのダウンロードとインストールで1時間くらい待つことになります。
- GUIの解像度選択画面となります。規定値は 1024x768 800x600 640x480 の3種類です。ホスト OS やモニタの最大解像度が 1024x768 よりも上であれば、上の解像度をチェックオンするのもよいでしょう。画像は 1280x1024 1280x960 を追加で有効にしてます。選択が終わったら「続ける」をクリックします。数分~十数分ほど、設定完了まで待つことになります。
余談になりますが、テキストインストーラは 640x480、GUIインストーラは800x600ですね。
- GRUBのインストール確認になります。規定値(はい)のまま、「続ける」をクリックします。
- インストール完了と表示されますので、「続ける」をクリックします。再起動され、Debian が起動するようになります。
以上で、インストールは終了です。
Debian GNU/Linux を操作してみる
- 2007/05/03~ に書き換えを行っています。読みにくかったら申し訳ないm_ _m
- このメモは、標準版(Gnomeベース)です。KDE版CDの場合は適度な置き換えが必要になりますが、追記すると混乱を招くのでそのままにしてあります。
- インストール終了して再起動させてしばらく待っていると、ログイン画面になります (1280x1024を最大化したものをキャプチャしています)
ユーザー名(zaurus)を入力し Enter、パスワードを入力し Enter でログインできます。なお、縮小画面ではわかりにくいので、この次の項より800x600の解像度でメモを続けます。
- 解像度の変更は画面上部のメニューから、「デスクトップ」-「設定」-「画面の解像度」を選び、そこで行います。
- 画面左上の 「アプリケーション」 - 「アクセサリ」 - 「GNOME 端末」 の順にクリックすることで、コマンド入力可能状態となります。
- 日本語入力したい場合は、「半角/全角」キーで日本語入力ON/OFFです。Windows と同じということですね。(日本語変換できないときは右下の言語バー左側のアイコンから Anthy を選べば OK です)
さて、ここからは最小限のパッケージ追加と設定修正を行います。
$ su
Password: (パスワード入力)
# aptitude update; aptitude upgrade
(システムのネットワーク経由の更新[更新チェック含む]です。表示結果中略)
続行しますか [Y/n]? ←ここで y とだけ入力して Enter キー
# aptitude install alien ntpdate samba swat smbclient gcc-2.95 g++-2.95
(rpm->deb 変換、Windows 共有、古いバージョンの C++ コンパイラの導入です)
(Samba のワークグループ/ドメイン名入力が求められますが、WORKGROUP と入力して続行します)
(WINSの使用有無については規定値「いいえ」のまま続行します)
# vi /etc/default/rcS
(UTC=yes となっている場合、UTC=no に書き換える必要があるかもしれません。9時間ずれ対策用)
# ntpdate ntp1.jst.mfeed.ad.jp
(時刻調整)
- 音がビープ音で寂しい場合は、以下のとおり設定します。
- GNOME 端末にて、以下のコマンドを実行。(su で rootになった後で)
# aptitude install gnome-audio
- 画面上部メニューから「デスクトップ」-「設定」-「サウンド」で、「ソフトウェアによるサウンド・ミキシングを有効にする」「システムサウンドを演奏する」二つにチェックを入れ、「閉じる」をクリックします。
- 音は再起動(後述) の後に有効になります。
- シャットダウン/再起動については、画面上部メニューの 「デスクトップ」 -「シャットダウン...」を選択
- 「シャットダウン」 をクリックするか、1分放置しておけば Debian を終了できます。ここで「再起動」をクリックすると、再起動になります。
Windows(ホストOS)用にゲストOS(Debian側)のファイル共有設定を行う
ファイル共有設定は Samba が担当し SWAT で Web ページから行うことができます。
- 画面上部メニュー「アプリケーション」 - 「インターネット」 - 「Iceweasel ウェブ・ブラウザ」 の順にクリックします。
- ブラウザが起動します。
- URI入力部分に http://localhost:901/ を入力し、ID (root) とパスワード (インストール時に指定したもの) を入力します。入力が完了したら OK ボタンをクリック。
- SHARES (画像では赤○な目印のあたり)をクリックします。
- ファイル共有の選択の右側プルダウンから「homes」を選択、「ファイル共有の選択」ボタンをクリック。画像では、(1)→(2)→(3)の順ということです。
- read only の右側プルダウンで 「no」を選択し、「変更を反映」ボタンをクリック。画像では、(1)→(2)→(3)の順です。
- 「PASSWORD」をクリックし、新ユーザー名に zaurus、パスワードを2回(zaurus のもの)入力し、「新規ユーザ追加」ボタンをクリック。例によって、画像では、(1)→(2)[ID1回、パスワード2回]→(3)の順です。
- ブラウザを閉じ、ホストOSから \\zaurusdev\zaurus にアクセスできることを確認します。
クロスコンパイル環境の構築 (コンソールベース)
- 以下の配布ファイル(rpm形式4種類、tar.gz形式1種類)を入手します。正式にはシャープ公式サイトである ザウルスサポートステーション (SLシリーズ関連 開発ツール一覧のページ) から入手することになりますが、asaasa.tk のサーバー上からでも入手できます(ZaurusDevelop_x86.tar.bz2 (24.5MB)、tar jxvf ファイル名 で展開できます)
- クロスコンパイラ
- ライブラリ
- ヘッダファイル
- arm用ユーティリティ
tmake設定ファイル by Sharp*1
- 入手したファイル5種類は、~zaurus/Desktop/ 直下へコピーしておきます。
- Windows ファイル共有経由なら \\Zaurusdev\zaurus\Desktop 以下にファイルコピー
- ゲストOS上なら Gnome 端末上で $ cd ~/Desktop でディレクトリ移動し、あとは以下コマンドを実行($ はプロンプトなので不要です。wget と tar jxvf については、asaasa.tk からファイルを入手する場合で、シャープ公式サイトから入手する場合は URI 部分を入手すべき5ファイルに置き換えてください)
- 管理者権限で、rpm ファイル4種類は deb ファイルに置換します。
- $ cd ~/Desktop
- $ su
- # alien *.rpm
- rpm ファイルを削除し、debファイル4つを管理者権限のままでインストールします。
- # rm -i *.rpm
- # dpkg -i gcc-cross-sa1100_2.95.2-1_i386.deb
- # dpkg -i glibc-arm_2.2.2-1_i386.deb
- # dpkg -i linux-headers-arm-sa1100_2.4.6-4_i386.deb
- # dpkg -i binutils-cross-arm_2.11.2-1_i386.deb
ここまできたら、Zaurus上で動作するコンソールアプリケーションがコンパイル可能になっています。
0
1
2
3
4
5
6
| | PATH=/opt/Qtopia/bin:/opt/Embedix/tools/bin:$PATH
export PATH
QPEDIR=/opt/Qtopia/sharp
export QPEDIR
QTDIR=/opt/Qtopia/sharp
export QTDIR
|
通常ユーザー(zaurus)に戻って、上記シェルスクリプトを ~/dev-arm-console.sh という名前で保管し、
$ chmod u+x ~/dev-arm-console.sh
$ nkf --euc --unix ~/dev-arm-console.sh > ~/$sh$
$ cp ~/$sh$ ~/dev-arm-console.sh
$ rm ~/$sh$
$ source ~/dev-arm-console.sh
としてみます。
あとはコマンドラインで arm- でタブキー押下していくつかの gcc などのコマンドが出れば準備OKです。お約束の hello.c を使って、コンソールアプリケーションをコンパイルしてみます。
1
2
3
4
5
6
7
|
-
|
|
!
| #include <stdio.h>
int main()
{
printf("Hello, world!\n");
return 0;
}
|
$ arm-linux-gcc -o hello hello.c
$ file hello
これで、hello という ARM 用バイナリができていることを確認することができます。
ちなみに、ふつうに gcc -o hello hello.c; file hello とすると、80386 用のバイナリであると file コマンドが表示してくれることを確認できます(ARM版が出る場合は、ビルドしてできている hello が新しすぎるために発生しているので、rm -i hello しておきましょう)。
また、コマンドラインで hello コマンドを実行した場合も、80386版では ./hello で通常実行できますが、ARM 用バイナリは cannot execute binary size と怒られてしまいます。これについては、実機で動かしてみれば動作確認できますので問題ないかなと思います。
あと、C++ であれば gcc ではなく g++ を使うということで、こちらも動作検証してみましょう。hello.cpp でテストできます。
1
2
3
4
5
6
7
|
-
|
|
!
| #include <iostream>
using namespace std;
int main()
{
cout << "Hello, World!" << endl;
return 0;
}
|
$ arm-linux-g++ -o hello++ hello.cpp
$ file hello++
(コンパイルできない場合はソースコードの改行が怪しいので、 nkf --unix filename > filename2 のようにして、filename2 をコンパイルすればいいです)
コンパイルされてできた hello hello++ のふたつのファイルは、実機で実行できることを確認できます。
クロスコンパイル環境の構築 (Qtopiaベース)
Qtopia開発環境(GPL版) for x86を入手して、Debian の ~zaurus/Desktop/ 上にコピーしておきます。x86 ではない環境の場合はソースコードからビルドする必要がありますが、本メモでは割愛します。 (2011/07 リンク切れ確認)
- リンク切れしているため、GPLということに甘えて当方がバックアップしたファイルがありますので、そちらをご利用ください (2011/07/23 追記)
まずは、alien で rpm から deb に変換し、rpm ファイルは削除します。
$ su
# alien qtopia-free-1.5.0-1.i386.rpm
# rm -i *.rpm
次に、dpkg でインストールです。
# dpkg -i qtopia-free_1.5.0-2_i386.deb
tmake-sharp.tar.gz については、以下のようにして差分を導入するよう SL-A300 / SL-B500 / SL-C700 向けの開発チュートリアルに記述されています。
# tar zxvf tmake-sharp.tar.gz
# find linux-sharp-g++ | cpio –amp /opt/Qtopia/tmake/lib/qws
...が、現在入手できる Qtopia の開発環境ではすでに Zaurus の開発用のファイルが組み込まれていますので、この手順は不要になっています(ここに抜粋したのは参考のためです)
さて、今のままでは最新の Debian etch にそぐわない設定になっているため、Debian etch 上でエミュレータを使った開発ができません。よって、設定を書き換えます。
# nano /opt/Qtopia/tmake/lib/qws/linux-x86-g++/tmake.conf
Ctrl+W で単語検索ができますので、以下の単語をすべて置き換えます。置き換え後は Ctrl+X → Y[Enter] → [Enter] で終了です。
- gcc → gcc-2.95
- g++ → g++-2.95
最後に、一般ユーザー zaurus に戻って、クロスコンパイル・エミュレート用コンパイル設定ファイルを作成します。
- 出展は「“SL シリーズザウルス” + “Qtopia” 開発チュートリアル」です。以下 URI から入手できます。
- dev-x86-qpe.sh
0
1
2
3
4
5
6
7
8
| | CROSSCOMPILE=/opt/Embedix/tools
QPEDIR=/opt/Qtopia
QTDIR=/opt/Qtopia
PATH=$QTDIR/bin:$QPEDIR/bin:$PATH:/opt/Embedix/tools/bin
TMAKEPATH=/opt/Qtopia/tmake/lib/qws/linux-x86-g++/
LD_LIBRARY_PATH=$QTDIR/lib:$LD_LIBRARY_PATH
export QPEDIR QTDIR PATH TMAKEPATH LD_LIBRARY_PATH PS1
echo "Altered environment for sharp Zaurus Development x86"
|
- dev-arm-qpe.sh
0
1
2
3
4
5
6
7
8
| | CROSSCOMPILE=/opt/Embedix/tools
QPEDIR=/opt/Qtopia/sharp
QTDIR=/opt/Qtopia/sharp
PATH=$QTDIR/bin:$QPEDIR/bin:$CROSSCOMPILE/bin:$PATH
TMAKEPATH=/opt/Qtopia/tmake/lib/qws/linux-sharp-g++/
LD_LIBRARY_PATH=$QTDIR/lib:$LD_LIBRARY_PATH
export QPEDIR QTDIR PATH LD_LIBRARY_PATH TMAKEPATH
echo "Altered environment for sharp Zaurus Development ARM"
|
これらの設定ファイルを設置し終えたら、以下のどちらかのコマンド実行で Qtopia 向けのビルドができるようになります。
$ source ~/dev-arm-qpe.sh
$ source ~/dev-x86-qpe.sh
ここまできたら、サンプルプログラムでビルドチェックを行います。
最小限の所有権系の事前設定をしたあとで...
$ su
# cd /opt/Qtopia/example/
# chown zaurus:zaurus ../example/
# chown zaurus:zaurus *
# exit
以下の手順でビルドを試みます。
$ cd /opt/Qtopia/example/
$ source ~/dev-x86-qpe.sh
$ make clean; rm -i Makefile
$ tmake -o Makefile example.pro
$ make
$ file example
コンパイルエラーなく example という実行ファイルができていれば、成功です。
エミュレータを使う場合は、以下の手順で実行できます。
$ qvfb &
$ ./example –qws example
さて、実機で実行したい場合は以下のようにコマンド実行します (x86 を arm に変えているだけです)
$ cd /opt/Qtopia/example/
$ source ~/dev-arm-qpe.sh
$ make clean; rm -i Makefile
$ tmake -o Makefile example.pro
$ make
$ file example
example ファイルができたら、そのファイルを Zaurus 実機にコピーして、端末ウィンドウ(コンソール)から実行してみます。
上記のようにウィンドウが出れば成功です。
なお、タスク切り替え部分にアイコンがない、KeyHelperのタスク切り替えで解像度が切り替わってしまうといった問題については、.desktop ファイルを定義してそこから実行することで解決します。
x86 環境のエミュレータにおける日本語の入出力について
日本語表示するソフトはビルド失敗するか、成功してもエミュレータ上で豆腐になってしまうという問題が当メモには残っています。また、日本語入力を試みても uim の状態は無視され英数字だけの入力となります。こういった日本語に関する問題については 2006/11 時点で気がついていましたが、Ruby/Qte の補完でメモってみるというのが当初のこのページの作成目的だったため、調査が後回しになっていました。
サムさん( http://ochan4.seesaa.net/article/37236345.html → 2007/06/26 に閉鎖となったためリンク切れ ) よりご報告いただいてから、少し調べてみたのですが、qte / qpe の開発環境が日本語化されておらず、手動で日本語化するにしてもはっきりとしたノウハウが見あたらない(あったらこのメモページは存在していませんが^^;)という状況であり、「残念ながら日本語のソフトウェアをx86で実用的にデバッグするのは実用段階にない」という結論に至っている状況です。SHARPの2002年の修正モジュール(sharpsdk-pub-20021227.tar.gz や libqte.so.2.3.2 等)の適用による問題解消の可能性はありますが、当メモではそこまで追求しないことにします。Qt/E SDK にすでに Zaurus 対応コードが織り込まれており、新たに適用する意味があるのかどうか疑問ですし。
簡単な方法としては、uiファイルには英語しか書かず、別の日本語版uiファイルを用意して、実機デバッグのときに日本語版uiファイルに差し替えてクロスコンパイルする、というものが回避策として有効と考えられます。内部的に UTF-8 な Qt/E ですから、日本語固有の問題発生率は頻度としてまれと思われます。