zxLinux開発ドキュメント
V.0.3.2


2000/Mar/18
たけおか@AXE





0. はじめに


本文書にはZaurus上のLinux(以下 zxlinuxと呼ぶ)の開発方法が述べてある。
本文書は

I. zxLinuxカーネルのmake
II. zxLinuxアプリケーションの開発

の二部からなる。

I. zxLinuxカーネルのmakeはzxLinuxカーネル開発のための環境設定、カーネルmake方法について述べている。
II. zxLinuxアプリケーションの開発zxLinuxアプリケーション環境設定、アプリケーションmake方法、実行方法について述べている。

zxLinuxの開発キットには2つある。
上記2つの部で使用する開発キットは、各々

zxLinuxカーネル開発用キット
zxLinuxアプリケーション開発用キット

である。
開発キットが2つある理由は、Linux用gccがインクルードファイル、ライブラリ読み込みのpathのデフォールトを強く意識しているためである。
zxLinuxの場合、カーネル開発とアプリケーション開発では、まったく異なるインクルードファイル、ライブラリを用いなければならない。にもかかわらず、Linux用gccがインクルードファイル、ライブラリ読み込みのpathのデフォールトを強く意識し、常に自動的にそこからインクルードファイル、ライブラリを読み込もうとする。
開発者のストレス無く、それらを御するには、gccを始めとする開発ツールをカーネル開発用、アプリケーション開発用の二式持つ事が、もっとも明解で使い易い。
よって、zxLinuxはzxLinuxカーネル開発用キット、zxLinuxアプリケーション開発用キットの2者を持つ。
開発者は、自分の開発に応じた開発キットをインストールしなければならない。
また、両方のキットを同時にインストールすることもできる。
なお、zxLinuxカーネルの起動には、zlbootというブートストラップローダ・ プログラムが必要である。zlbootはzxLinux起動後は、zxLinuxのためのZaurusイベント処理を行う。
zlbootは、MOREアプリケーションである。
zlbootの開発方法は本ドキュメント には書かれていない。MOREソフトウェア開発ドキュメントを参照頂きたい。


zxLinuxアプリケーション開発時にも、zxLinuxカーネルのヘッダ・ファイルは 参照の必要があるだろう。
本開発環境には、現在、zxLinuxカーネルのバージョンに依存すると思われる ヘッダ・ファイル、インクルード・ファイルは入っていない。
(カーネルに依存しないzxLinux特有のランタイム・ルーチンのバイナリと 最低限のシステムコールのスタブ・ルーチンはzxlinux/lib/下に含んでいる。 しかし、システムコールのスタブはカーネルの変更により、変化する可能性がある)
zxLinuxアプリケーション開発者は、zxLinuxカーネルのソースを入手し、それ を適当なディレクトリに展開して使用して頂きたい。

なお、sbin-src-XXXX.tgz, cmd-src-XXXX.tgzとして配付されているソース群は、 zxLinuxカーネルのソースが/usr/home/zxlinux/下に展開されていることを期待 している。


zxLinuxを動作させたため、ザウルスが不調になった場合には、ザウルスの 電池蓋スイッチを操作して、システムのリセットを行った方がよい。



*** *** *** *** *** *** *** *** *** *** ***
本開発ソフトウェアをインストール、または実行した場合に、
既存の環境を破壊するかも知れません。
どんなことが起こっても、
シャープ株式会社 及び 株式会社アックスは 一切の責を負いません。


本開発環境で作成したソフトウェアを動作させると、
ザウルス内のデータが変化したり消失する可能性があります。
ハードウェアが壊れる可能性もあります。

どんなことが起こっても、
シャープ株式会社 及び 株式会社アックスは一切の責を負いません。

ザウルスでのソフトウェアの実行にあたっては、
重要なデータはバックアップして、
ご自分の責任で
実行して下さい。

本開発環境で作成したソフトウェアを
配付したことによって生じた
一切の損害について、
シャープ株式会社 及び 株式会社アックスは一切の責を負いません。

本開発環境で作成したソフトウェアを
実行した事によって生じた
一切の損害について、
シャープ株式会社 及び 株式会社アックスは一切の責を負いません。
*** *** *** *** *** *** *** *** *** *** ***










第I部

zxLinuxカーネルのmake



1. zxLinuxカーネル開発の概要


zxLinuxカーネルはザウルス元来の機能にアクセス、使用するために、ザウルス開発用ヘッダ・ファイルを読み込み、ザウルスのライブラリをリンクする。同時に、コンパイラはLinux由来のヘッダファイルを読み込み、 Linuxのライブラリをリンクする。
つまり、

zxLinuxカーネルがアプリケーションに提供する機能の引数の型
zxLinuxカーネルが内部で処理するデータの型
ザウルス元来の機能を呼び出す時のデータの型

は、どれも異なっている可能性がある。
例えば、size_tがLinuxAPIでは64bit整数でり、ザウルスAPIでは32bit整数であったりする。また、socket機能のstruct sockaddr_in構造体のメンバー構成が、LinuxAPIとザウルスAPIの両者でまったく異なったりする。
これらの型の違いを吸収するコードの作成と、各インクルード・ファイル中の定義の衝突を解消しながらコーディングを行わなければ、zxLinuxカーネルの開発は行えない。

よって、カーネル開発者は、
zxLinuxカーネルmake時に、コンパイラは
いつザウルス元来のヘッダ・ファイルを読み込む
いつLinux由来のヘッダファイルを読み込む
のかを把握していなければならない。



2 zxLinuxカーネル開発環境


zxLinuxカーネルの開発環境は、

OS
Intel版TurboLinux Ver.2

ハードウェア
CPU: Pentium II以上
メモリ: 256<B以上
その他: PCMCIAスロット装備
ネットワーク Ethernet


開発時には、カーネルなどを実機に持ち込むために、CompactFlashカードを使用する。ゆえに、開発機には、PCMCIAカード・スロットが必要である。
CompactFlashカードにPCMCIAアダプタを使用し、開発機に挿填し、マウントし読み書きを行う。





3. zxLinuxカーネル開発キット


zxLinuxカーネルの開発キットは、
zxlkdev.tgz
である。
このアーカイブには、
gcc
gas
linker
gccが必要とする小さなインクルードファイル
ライブラリ

などが含まれている。






4. 開発キットのインストール


/usr/local/にて

# tar xvzf zxlkdev.tgz

とし、展開する。
zx/というディレクトリ内に、ツールが展開される。



5. zxLinuxカーネル・ソースの準備


zxLinuxカーネルのソース・アーカイブは

zxlinux.tgz

である。






6. zxLinuxカーネル・ソースの展開


カーネル・ソースは、どこで展開してもよい。
適当なディレクトリで

% tar xvzf zxlinux.tgz

とし、展開する。




7. zxLinuxカーネルのmake


1) コマンド・サーチパス、環境変数の設定

make前に

% set path=(/sbin /usr/sbin /bin /usr/bin /usr/X11R6/bin /usr/local/bin)
% set path=(/usr/local/zx/bin $path)
% setenv LD_LIBRARY_PATH /usr/local/zx/lib

として、コマンド・サーチパス、環境変数を設定する。

2) make

カーネル・ソースを展開したディレクトリでmakeすれば、カーネルが得られる。

% make

最終的に
zxlinux.bin

が得られる。
以降、これを「カーネル・イメージ」と呼ぶ。




8. 実行の準備


zxLinuxカーネルを起動するには、カーネル・イメージ以外に
ext2fsファイルシステムのイメージを、1つのファイルとしたもの
が必要である。
このファイルは、"ZLNXIMG.DAT'という名でなければならない。
以降、これを「ext2fsイメージ」と呼ぶ。



以下ではext2fsイメージの作成方を記述する。

・ext2fs の作り方、メンテナンス方法
作業はLinuxマシンでrootになって、以下の手順で行う。

a) 中身が 0 、サイズ=4MBファイルを作る

# dd if=/dev/zero of=ZLNXIMG.DAT bs=1k count=4096


b) 上記ファイルを ext2ファイルシステムとする。

# mke2fs ZLNXIMG.DAT


c) 上記でできたファイルの mount 方法

# mount -t ext2 -o loop ZLNXIMG.DAT /mnt

これで当該ファイルをext2fsとして、/mnt にmount できた。
以降、/mntに対して、通常のファイル操作が可能となる



d) コンソールを mknodする

コンソールを mknodする。

# mknod 2 0 /dev/console



e) 必要なファイルをex2fs内にコピーする

zxLinuxが機能するためには、ext2fs 内に、
/sbin/init
/sbin/内の基本コマンド
/bin/内の基本コマンド
/etc/内の基本設定ファイル
などが必要である。
(最低限のカーネル起動には、/sbin/initのみがあれば良いが、当然ながら意味のある処理はできない)





f) ext2fsの操作が終ったら umountする

# umount /mnt

以上で、zxLinuxカーネルが必要とするext2fsイメージ・ファイル"ZLNXIMG.DAT'が得られた。





9. zxLinuxカーネルの実行


1) カーネルなどのDOS FSへの書き込み

今までの手順で得られたファイルをザウルスOSが認識するDOSファイル・システムへ書き込む。
zxLinuxの起動のためには、

ZLNXKNL.BIN : zxLinuxカーネル・イメージ
ZLNXIMG.DAT : ext2fsイメージ
ZLNX.APL, ZLNX.BIN, ZLNX*.JPN : zxLinuxブート・ローダ

を、DOS FSに書き込まなければならない。

通常の開発時は、CompactFlashカードに書き込むのが便利である。
CompactFlashカードへの書き込みは、開発機がLinux,FreeBSDならば、ファイルシステム・タイプを MSDOSファイルシステムと指定し、 CompactFlashカードをmountする。
その後、上記ファイルを書き込み、umountする。

2) ザウルスでの起動

準備が終ったCompactFlashカードをザウルスのCFスロットまたはPCMCIAスロットに装着する。
ザウルスを起動する。

MOREソフト起動のメニューに、
zxLinux(実際にはzlboot)が現れる。
MOREソフトとして、
zlbootを起動する。

もしzxLinuxを動作させたため、ザウルスが不調になった場合には、ザウルス の電池蓋スイッチを操作して、システムのリセットを行った方がよい。










第II部

zxLinuxアプリケーションの開発



1. zxLinuxアプリケーション開発の概要


zxLinuxアプリケーションは、通常のクロスLinuxアプリケーションと同じ手順で開発できる。
開発機のCPUはIntelであるのでクロス開発となる。
クロス開発であるから、ヘッダ・ファイル、ライブラリなど一式を別途用意し、開発環境はそれを参照、使用するようになっている。
zxLinuxアプリケーションは、純粋にLinuxアプリケーションであるから、ザウルス元来の機能へ直接アクセスすることはできない。
すべては、zxLinuxカーネルを通してアクセスする。
逆に、通常のLinuxで開発したアプリケーションを再コンパイルするのみで、zxLinuxで使用できる。
ただし、現在、zxLinuxのライブラリは、SH版Linuxと最大限の互換性を取ろうとしている。よって、 Intel版Linuxと、SH版Linux間の差異がそのままzxLinuxに反映される場合がある。
zxLinuxのアプリケーション開発は、zxLinuxアプリケーション開発環境として与えられたインクルード・ファイル、ライブラリを使用しなければならない。


zxLinuxアプリケーション開発時にも、zxLinuxカーネルのヘッダ・ファイルは 参照の必要があるだろう。
本開発環境には、現在、zxLinuxカーネルのバージョンに依存すると思われる インクルードファイルは入っていない。
(システムコールのスタブと、カーネルに依存しないzxLinux特有のランタイム・ ルーチンのバイナリはzxlinux/lib/下に含んでいる)
zxLinuxアプリケーション開発者は、zxLinuxカーネルのソースを入手し、それ を適当なディレクトリに展開して使用して頂きたい。

なお、sbin-src-XXXX.tgz, cmd-src-XXXX.tgzとして配付されているソース群は、
zxLinuxカーネルのソースが/usr/home/zxlinux/下に展開されている
ことを前提として、記述してある。
ただし、それらのMakefileまたは、config.mk内の1行を適切に変更するだけで、 すぐにmake可能である。



2 zxLinuxアプリケーション開発環境


zxLinuxアプリケーション開発環境は、

Intel版TurboLinux


としている。
開発時には、アプリケーション、データなどを実機に持ち込むために、CompactFlashカードを使用する。
ゆえに、開発機には、PCMCIAカード・スロットがあった方がよい。
CompactFlashカードにPCMCIAアダプタを使用し、開発機に挿填し、マウントし読み書きを行う。




3. zxLinuxアプリケーション開発キット

zxLinuxアプリケーション開発キットは、
zxldev.tgz
である。
このアーカイブには、
gcc
gas
linker
gccが必要とする小さなインクルードファイル
ライブラリ(newlib, システムコール・スタブ, crt0.o)

などが含まれている。




4. 開発キットのインストール

/usr/local/にて

# tar xvzf zxldev.tgz

とし、展開する。
zxlinux/というディレクトリ内に、ツールが展開される。

sh-hitachi-elf-gcc
sh-hitachi-elf-as
sh-hitachi-elf-ld
sh-hitachi-elf-nm

などである。

展開後、
# /usr/local/zxlinux/bin/sh-hitachi-elf-ranlib /usr/local/zxlinux/sh-hitachi-elf/lib/libzxl.a
とし、ライブラリをranlibする。





5. zxLinuxアプリケーションの開発

コマンド・サーチパス、環境変数の設定

アプリケーション開発前に

% set path=(/sbin /usr/sbin /bin /usr/bin /usr/X11R6/bin /usr/local/bin)
% set path=(/usr/local/zxlinux/bin $path)

として、コマンド・サーチパスを設定する。

コンパイルは
% sh-hitachi-elf-gcc ファイル
として行う。

リンクは、
% sh-hitachi-elf-ld /usr/local/zxlinux/sh-hitachi-elf/lib/prochead_main.o /usr/local/zxlinux/sh-hitachi-elf/lib/crt0.o ファイル -lzxl.a
として行う。
prochead_main.o, crt0.o はどちらもこの順ですべてのオブジェクト・ファイルに 先だって指定しなければならない。
つまり、ELFファイルの先頭から順にprochead_main.o, crt0.o とつながって 存在しなければならない。

必要であれば、newlibなどのライブラリ指定を-lオプションなどで行う。
例えば、
% sh-hitachi-elf-ld -L newlib.aの存在するディレクトリ /usr/local/zxlinux/sh-hitachi-elf/lib/prochead_main.o /usr/local/zxlinux/sh-hitachi-elf/lib/crt0.o ファイル -lzxl.a -lc
とする。



6. アプリケーション実行の準備


zxLinuxアプリケーションを起動するには、ext2fsイメージ・ファイルに作成したアプリケーションと、必要であればデータ・ファイルを格納しなければならない。
ext2fsイメージ・ファイルは、ザウルスで標準的なDOSファイル・システム上の一つのファイルである。
ext2fsイメージ・ファイルは、"ZLNXIMG.DAT'という名でなければならない。
ext2fsイメージ・ファイルの詳細と、その作成方法はカーネル開発の部を参照。
ここでは、開発機であるLinuxから、ext2fsイメージ・ファイル"ZLNXIMG.DAT"へアクセスし、ファイルを読み書きする方法を述べる。


a) ext2fsイメージ・ファイルのmount

開発機Linuxからext2fsイメージ・ファイルの内容にアクセスするには、ext2fsイメージ・ファイルをマウントしなければならない。
ext2fsイメージ・ファイルをマウントするには、

# mount -t ext2 -o loop ZLNXIMG.DAT /mnt

とする。
これで当該ファイルをext2fsとして、/mnt にmount できようになる。以降、開発機Linuxより/mntに対して、通常のファイル操作が可能である。



b) ext2fsイメージ・ファイルのumount

必要なファイルをext2fs内にコピーした後、

# umount /mnt

とし、マウントを終える。
以上で、zxLinuxカーネルが必要とするext2fsイメージ・ファイル"ZLNXIMG.DAT'が得られた。

c) DOS FSへのコピー
今までの手順で得られたext2fsイメージ・ファイル"ZLNXIMG.DAT'を、ザウルスOSが認識するDOSファイル・システムへ書き込む。




7. zxLinuxカーネルの起動と、アプリケーション実行

zxLinuxの起動は、zxLinuxカーネル開発の部と同様である。
準備が終ったCompactFlashカードをザウルスのCFスロットまたはPCMCIAスロットに装着する。
ザウルスを起動する。
MOREソフト起動のメニューに、zxLinux(実際にはzlboot)が現れる。
MOREソフトとして、xlbootを起動する。

もしzxLinuxを動作させた後、ザウルスが不調になった場合には、ザウルスの 電池蓋スイッチを操作して、システムのリセットを行った方がよい。