このページは「24環境」の情報です

第14回 yet another KNOPPIX-JP for CAT

海老原祐太郎
2003/6/24

CAT790開発CDROMのVersion0.97以降からは、あくまでもおまけですが、ブータブルCDROMになっていて
yet another knoppix-jp(略してyak)が立ち上がるようになっています。
このCDROMにはあらかじめSH3-Linuxのクロスコンパイル環境がセットアップされています。
(そのかわりOpenOffice.org や koffice は入りきらなかったので外してあります。)

今回はこのブータブルCDROMでCAT709用の "Hello World" をクロスコンパイルするまでのチュートリアルを書きます。

ただし、YAK-CDROMと、ここに書いてあることはすべて無保証です。
このCDROMを使用したことによってHDDのデータが破損しても責任は負いません

shlinux_tips14_1.jpg

備 準 

ごくごく普通のPCを用意します。knoppixは PCのハードディスクをまったく使わなくても動作するので
普通にWindowsが動作するPCがあればOKです。
ただし、CDROMはごくごく一般的なIDE(ATAPI)内蔵ドライブのものを使ってください。
SCSI接続だったり、USB外付けCDROMドライブだとブートしない場合があります。
その場合はPCを交換してください。

メモリーは潤沢に用意してください。knoppixはスワップはおろか、
すべてのファイルをCDROMとRAMDISKで展開して動きます。
そのため128Mだと遅くて使い物になりません。
256Mでもきつめ。384Mか512Mくらいはほしいところです。

KNOPPIXはPCのハードディスクをまったく使用せずに全てのファイルをRAMDISK上で動作するのがウリ
ですが、それはつまり開発したファイルを保存できないという事になります。PCのハードディスクに書き込めば
良いのでは?と思われるでしょうが、WinXPプリインストール機の場合たいていNTFSを使っています。Linuxでは
NTFSへの書き込みはまだ保障されていませんので危険です。
もうひとつの問題としてramfsはNFS-EXPORTできないという問題があります。

一番いい方法はやっぱりHDDに空きパーテーションを用意して、yakをHDDインストールしてしまう方法です。
これだと速度も向上して便利です。
ただ、せっかく既存のHDDをいじらなくて済むyakなのですから、USB-FLASHメモリーなどをマウントしてそこに
開発ファイルを置いてもよいです。これなら導入も簡単でお勧めだです。ただし、kernelのコンパイルをするなら
kernelは展開すると200Mを超えるのでFLASHメモリー系ではきついかもしれません。
USB外付けHDDなどがお勧めです。

shlinux_tips14_2.jpg
USB外付けHDD
shlinux_tips14_3.jpg
USBフラッシュメモリー

立ち上げてみよう

CAT709開発CDROMはブータブルになっています。
ブート時になにか聞かれてきたらとりあえずエンターを押してください。
しばらく待って、KNOPPIXが立ち上がれば、おめでとうございます。開発環境の出来上がりです。

shlinux_tips14_5.jpg

KNOPPIXは洗練されたGUI環境を持ちますが、小生はコマンドライン派なのでコンソールしか使いません。(笑
以下は全部コンソールからのタイプで説明します。

shlinux_tips14_4.jpg

先のUSB系diskはSCSIハードディスクとして認識されますのでデバイス名は
/dev/sda (2台目以降は /dev/sdb、 /dev/sdc ... ) となります。

$ su -                         ← rootユーザーになる(パスワード無し)
# cfdisk /dev/sda              ← USBディスクのパーテーションわけ
# mkfs.ext2 /dev/sda1          ← ext2形式でフォーマット
# mount /dev/sda1 /mnt/sda1    ← マウント
# exit
$ cd /mnt/sda1                 ← 移動
$ mkdir project1               ← プロジェクトディレクトリを作る
$ cd project1                  ← 移動

プログラムの開発

テキストエディターは kwrite がお勧めです。

$ kwriter hello.c

kwriter の使い方は画面を見ればわかりますので割愛です(A^^;;

# include <stdio.h>
int main(){
        printf("Hello World\n");
}

まずは普通にコンパイルして動作させてみます。

$ gcc hello.c
$ ./a.out
Hello World
$ file a.out
a.out: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), dynamically linked (uses shared libs), not stripped

動きましたね。file コマンドで a.outファイルの種類を調べてみると Intel 80386用のコードになっていることがわかります。
そうしたらSH3-Linux用にクロスコンパイルします。

$ sh3-linux-gcc hello.c
$ ./a.out
./a.out: cannot execute binary file
$ file a.out
a.out: ELF 32-bit LSB executable, Hitachi SH, version 1 (SYSV), dynamically linked (uses shared libs), not stripped

クロスコンパイラ sh3-linux-gcc でコンパイルすると、実行できなくなりました。
file コマンドで調べてみると、Hitachi SH用になっていますので実行できなくて当然です。

それではこの a.out を実行機に持っていって実行させてみます。
ftpで転送しても良いのですが、nfsを使ったほうが楽なのでnfsを使います。

まずnfsサーバ(開発用PC)の準備ですが、

  1. ネットワークの設定
  2. ファイルをエクスポートするディレクトリの設定
    の順に行います。

ネットワークの設定は/etc/hosts.allow を編集してください。

$ su -
# kwrite /etc/hosts.allow

エクスポートの設定は/etc/exports です。

# kwrite /etc/exports
# /etc/exports: the access control list for filesystems which may be exported
# to NFS clients. See exports(5).
/mnt/sda1 192.168.1.0/255.255.255.0(sync,ro,no_root_squash)
/mnt/sdb1 192.168.7.0/255.255.255.0(sync,ro,no_root_squash)

このエクスポート例は /mnt/sda1 を192.168.1.* マシンに対して ReadOnly でエクスポートする設定です。
IPアドレスなどは環境に応じて書き換えてください。

/etc/exports ファイルを修正したら nfs サーバを再起動します。

/etc/init.d/nfs-kernel-server restart

これでサーバの準備が整いましたので、次にクライアントからnfsでマウントします。

# mount サーバのIPアドレス:/mnt/sda1 /mnt

それでは早速先ほどの実行ファイルを実行してみましょう

# cd /mnt
# ./a.out
Hello World

CAT709で無事実行することができました。
それでは大作アプリを作ってくださいね。


nfsトラブルシューティング

1.クライアント側で

mount: RPC: Program not registered

というエラーが出る場合はサーバ側の /etc/hosts.allow に portmap の行が無いのが原因。参考↓
http://www.linux.or.jp/JF/JFdocs/NFS-HOWTO/troubleshooting.html

2.クライアント側で

mount: RPC: Authentication error; why = Failed (unspecified error)

というエラーが出る場合はサーバ側で /ets/hosts.deny で蹴られている。
/etc/hosts.deny を編集すると直る。参考↓
http://www.linuxmanagers.org/pipermail/linuxmanagers/2003-January/000959.html