【お知らせ】プログラミング記事の投稿はQiitaに移行しました。

クロス開発環境構築

UNIX系OS上でMINIXのクロス開発環境を構築する方法です。ACKは後回しにして今回はgccだけです。

MINIXはバイナリファイル形式としてa.outを使用しているため、binutilsgccに独自のパッチを当てています。パッチ適用済みのソースはMinix Portsにまとめてあります。

targetオプションを付けてビルドすればクロス化できます。

続きを読む

libcなしでexit

結城浩先生のWikiにexitするだけのバイナリを削っていく記事の翻訳があります。

これをMINIXでもやってみようと思い、インラインアセンブラシステムコールを呼ぶコードを書いてみました。

void start()
{
	int m[] = { 0, 1/*EXIT*/, 42, 0, 0, 0, 0, 0, 0 };
	asm("movl $0, %%eax; movl $3, %%ecx; int $0x21" :: "b"(m));
}
# gcc -nostdinc -nostdlib exit.c
# ./a.out; echo $?
42

これをどんどん削っていこうと思います。続きはまた後日。

Virtual PCでネットワーク (3.1.5)

【追記】MINIX 3.1.6がリリースされました。VPCドライバが入っています。 ⇒ id:n7shi:20100208

id:n7shi:20100130のドライバを3.1.5にバックポートして、簡単にインストールできるようにISOイメージを用意しました。

Virtual PCでISOイメージをキャプチャして、以下の手順でインストールします。

cd /
isoread /dev/c0d2 tulip.tar | tar xvf -
cd /usr/src/drivers/dec21140A
make install
netconf ← ドライバを自動認識してIPアドレスを設定
reboot

これでネットワークが使えるようになります。NATモード推奨です。DHCPの取得に失敗することがあります。詳しくはid:n7shi:20100130を参照してください。

続きを読む

Virtual PCでネットワーク (trunk)

【追記】MINIX 3.1.6がリリースされました。VPCドライバが入っています。 ⇒ id:n7shi:20100208

MINIXのtrunkにはVirtual PCのNICドライバが追加されましたが、動作しなかったためパッチを作成しました。

【追記】r6050で修正されました。 ⇒ Revision 6050: improve behaviour under VPC, fixes from nicolas tittley.

--- src.orig/drivers/dec21140A/dec21140A.c
+++ src/drivers/dec21140A/dec21140A.c
@@ -85,7 +85,7 @@
     notify(tasknr);
   else if(r != ESRCH)
     printf("%s unable to notify inet: %d\n", str_DevName, r);
-  return r;
+  return OK;
 }

 /*===========================================================================*

本家にも報告済みです。 ⇒ バグレポート 【追記】受理されました。

続きを読む

trunkのインストール

MINIXをリリースからtrunkに上げようとしてハマりました。/etcは自動マージできないため、ばっさり消してしまうと簡単でした。最低限、fstabは残しておきます。

cp /etc/fstab /tmp
rm -rf /etc /usr/etc
cd /usr/src/etc
make install
mv /tmp/fstab /etc
cd ..
make world
shutdown

MINIXの停止後にVMを再起動します。ブートメニューでは2のカスタムを選んでください。選択せずに待っていると自動的に2が選ばれます。1を選ぶと最初にインストールしたカーネルを起動するため、変更点が多い場合は起動しなくなります。

カーネルビルド時間 (Intel VT)

id:masami256:20100127のCore 2 Duo T9600 @ 2.80GHz+KVMの威力に圧倒されたので、Core 2 Quad Q9550 @ 2.83GHzでも計測してみました。

Virtual PC 2007 SP1 Intel VT有効 0:14.03 real 0:05.40 user 0:03.73 sys
VMware Player 3.0.0 Intel VT有効 0:18.40 real 0:04.21 user 0:09.71 sys
Virtual PC 2007 SP1 Intel VT無効 0:47.28 real 0:06.78 user 0:35.91 sys
VMware Player 3.0.0 Intel VT無効 1:34.53 real 0:05.55 user 1:23.80 sys

Intel VTを有効にすればAthlon64 X2 3800+の倍の速度です。無効のときは1.5倍なので、それがCPU自体の性能差を反映していると思われます。それを差し引いた1.3倍がIntel VTとAMD-Vの性能差ではないかと思いますが、比較対象のAthlonが古いため、Phenomでは改善しているのではないでしょうか。