セルフ開発環境
N-Cardは200MHzのCPUと64Mbyteのメモリを搭載した コンピュータなので、 充分な容量のファイルシステムさえあれば、N-Card上で アプリケーションプログラムのコンパイルや gdbをつかったソースレベルデバッグを行うことができます。
N-Cardで大容量のファイルシステムを使用するには 以下の2つの方法があります。
- NFSを使用し、ネットワーク経由でホストマシンのファイルシステムを マウントする。
- MMCカードやUSBメモリなどを接続する。
ここでは、1のNFSを使用して セルフ開発環境を 構築するする方法について説明します。
ホストマシン上でプログラムのクロスコンパイルを行う環境の 作り方については、 ソフト開発環境のページを 御覧下さい。
ホスト側:NFSサーバの準備
まず、linuxホストマシンがnfsサーバとして動作できるように、 必要であればRPMの導入、サービスの開始などを行って下さい。
linuxホスト上にNFSサーバを準備します。 exportするファイルシステムには N-Card用の 各種コマンドがある必要があります。
幸いなことに、mips用のRedhat7.1のファイルシステムの中身が 以下のurlでダウンロード可能ですので、 サイズは大きい(125Mbyte)のですが、 これを使用することにします。
ftp://ftp.mips.com/pub/linux/mips/rootfs_nfs/redhat7.1/nfsroot.mips.redhat7.1.el-01.00.tar.gz
このファイルをダウンロードし、 linuxホストマシン上の適当なディレクトリー以下に展開、 そのディレクトリーを /etc/exportsファイルに記述し、 exportします。 以下の例では /linux/mipsel 以下に展開し、exportしています。 /etc/exportsファイルの例を示します。 この例では IPアドレスが192.168.0.100であるn-cardからだけの アクセスを許可しています。
# /etc/exportsの例 /linux/mipsel 192.168.0.100(no_root_squash,rw)ルートになり、exportfs -a コマンドを実行すれば、exportされます。 exportされたかどうかは、exportfsコマンドで表示されます。
n-card側の準備
n-card側では、マウントするディレクトリを作成し、 nfsマウント、 ダイナミックリンクの設定等を行います。
% mount -o remount,rw / % mkdir /ex % mount 192.168.0.11:/linux/mipsel /ex -o nolock ... % mount /dev/mtdblock6 on / type jffs2 (rw) none on /proc type proc (rw) none on /proc/bus/usb type usbdevfs (rw) /dev/ram0 on /mnt/rw type minix (rw) 192.168.0.11:/linux/mipsel on /ex type nfs (rw,v2,rsize=8192,wsize=8192,hard,udp,nolock,addr=192.168.0.11) % cp /ex/etc/ld.so.conf /etc % mv /lib /lib.sv % ln -s /ex/lib /lib % ln -s /ex/usr/lib /usr/lib % ln -s /ex/usr/include /usr/include % PATH="$PATH:/ex/bin:/ex/usr/bin:/ex/sbin" % which gcc /ex/usr/bin/gcc % gcc -v Reading specs from /ex/usr/bin/../lib/gcc-lib/mipsel-redhat-linux/2.96/specs gcc version 2.96 20000731 (Red Hat Linux 7.1 2.96-99.1) % mount -o remount,rw /これで環境は完成です。
コンパイルとデバッグのテスト
実際にn-cardでプログラムのコンパイルとデバッグを行ってみます。 /tmpに移動し、hello.cをviで入力します。
% cd /tmp % ls hello.c % cat hello.c #includeint main() { int i; for(i=0;i<5;i++) printf("Hello %d.\n",i); } % gcc -o hello hello.c % ls -l -rwxr-xr-x 1 root root 17303 Jan 1 00:10 hello -rw-r--r-- 1 root root 88 Jan 1 00:10 hello.c % ./hello Hello 0. Hello 1. Hello 2. Hello 3. Hello 4. % gcc -o hello -g hello.c % gdb hello GNU gdb Red Hat Linux 7.x (5.0rh-12.6) (MI_OUT) Copyright 2001 Free Software Foundation, Inc. GDB is free software, covered by the GNU General Public License, and you are welcome to change it and/or distribute copies of it under certain conditions. Type "show copying" to see the conditions. There is absolutely no warranty for GDB. Type "show warranty" for detail2s. This GDB was configured as "mipsel-redhat-linux"... (gdb) list 1 #include 2 3 int main() 4 { 5 int i; 6 for(i=0;i<5;i++) 7 printf("Hello %d.\n",i); 8 } (gdb) b main Breakpoint 1 at 0x4007a4: file hello.c, line 6. (gdb) run Starting program: /mnt/rw/tmp/hello Breakpoint 1, main () at hello.c:6 6 for(i=0;i<5;i++) (gdb) n 7 printf("Hello %d.\n",i); (gdb) Hello 0. 6 for(i=0;i<5;i++) (gdb) 7 printf("Hello %d.\n",i); (gdb) Hello 1. 6 for(i=0;i<5;i++) (gdb) 7 printf("Hello %d.\n",i); (gdb) Hello 2. 6 for(i=0;i<5;i++) (gdb) 7 printf("Hello %d.\n",i); (gdb) Hello 3. 6 for(i=0;i<5;i++) (gdb) c Continuing. Hello 4. Program exited normally. (gdb) q
この通り n-card上で、コンパイルとデバッグができました。 動作は若干遅いですが、一応使用できます。