VLANとTapのバイナリ

VLANとTapのバイナリとパッチを更新しました。
Tapのポーリングはやめて、スレッドのみにしています。
VLANの方は、とりあえず更新のみです。パフォーマンスを上げるために、selectを使うのをやめないといけないのですが、もう少し時間がかかりそう。

0.8.2のバイナリ

0.8.2のバイナリを作りました。
sparc-softmmuのバイナリがうまく動かなくて、アップしていません。
qemu-img.exeでFAT32上で4GB以上のファイルが作れないですけど、パッチが当てられなくなってしまっていて、今後の課題です。
VLAN用もまた作ります。

-serial pipe とwindbg

-serial pipe:com_1とwindbgを使ったときの、スピードを上げるパッチを作った。windbgを使わない時と同じくらいのスピードが出るようになります。
問題は、CPUのロードが大きいときにデバイスを扱うループの実行回数が減ってしまうことにありました。たとえば、CPUがアイドルのときは1000回/秒あるのですが、CPUが動き出すと130回/秒になってしまって、データの受信速度が極端に遅くなるのが原因でした。本当は、データの送受信があるときは、ループがたくさん回らないといけないですけど。
強制的に、CPUのループを抜け出してデバイスを扱うようにしています。そのため、少し効率が悪いので他の目的には適さないかもしれません。
シリアルは、ポーリングをすることでデータが来たことを検出しているのですが、シグナルを使ったものに変えてくれと言われています。メーリングリストに投稿するのはそのあとです。
レスポンスがよくなって、これなら使えるという感じです。ただ、windbgのコマンドを知らないのでまずそれからですけど。
http://www.h7.dion.ne.jp/~qemu-win/download/qemu-20060709-windbg.patch
調べてたら、windbgの使い方が書かれているのを見つけました。すごい。
http://www.ttoyota.com/php/windbgintro.php

クロスコンパイル

QEMUを扱っていると、PowerPCやSPARCのバイナリを作りたくなることがあります。そこで、gccを使ったクロスコンパイル環境を作れないものかと思ってトライしてみたのですが、何も見ないでやろうとしてもうまくコンパイルできません。
検索してみると、gcc-2.95のような古いものは解説があります。新しいものでいいものがないかと探してみると、Linux From ScratchにCross Linux From Scratch(CLFS)として、いろいろなCPU用のクロスコンパイルの方法が載っているのを見つけた。
実際にPowerPC用のgccと、glibc、binutilsを作ってみたのですが、これがなかなか難しい。オプションが少し違っていただけで、glibcやgccがエラーになってぜんぜん作れなくなったりします。仕方がないので、言われたとおりに作ってみると、やっと作ることができました。
ポイントの1つは、LFSで提供されているLinuxカーネルのヘッダーを使ってglibcを作ることです。もう1つgccのデフォルトのライブラリへのパスを設定するところなのですが、どこで設定しているのかよくわからなかった。
gccはまずglibcを作るためにstatic版を作って、そのあと作ったglibcを使ってもう一度gccを作ることでやっと普通に使えるものができます。
もう少し、クロスコンパイルが楽にできるといいのですけど。でも、情報があるだけでもありがたいことですけどね。
OpenBIOSのPowerPC用を作ることができることも確認した。でも、これではQEMUは立ち上がらなかった。SPARC用のも同様に作ってみた。少し変更するとバイナリができました。QEMUで使ってみるとペンギンさんは現れるのですが、文字が見えずでした。OpenBIOSはちゃんと動いているみたいだけど、なぜでしょう。

Windows XP x64

インストールしてみた。けど、なぜかネットワークのインストールのところで止まって次に行かないみたい。
ハードディスクは、3GB用意しました。
qemu-system-x86_64 -L ../pc-bios -hda winxp64.img -cdrom //./e: -boot d -m 256
しょうがないので、-net nic,model=rtl8139 -net user つけて途中からやり直してみると、今度はドライバーのインストールのところで止まる。
それで、もう一度 -net 付けずにトライしてみたら、インストールできた。
なんか、x64の画面を見ると感動。
設定を保存していますのところででものすごい時間がかかる。ハードディスクのアクセスが遅いのか、容量がたくさん必要なのか、メモリーがもっと必要なのかわからないけど。
とにかく時間がかかりました。止まっているように見えても、動いていると思いますので放っておきましょう。
ネットワークは、動いていないようなので、RTL8139をチェック。
そこで、-net nic,model=rtl8139 -net user 付けて起動してみると、デバイスの認識はしたみたい。ネットワークが使えるようになった。
x86_64 Fedora Core 4上で、Kqemuの64ビット版を使ってみた。すこし速くなって快適になります。-kernel-kqemuは使えないけど。i386で64bitが使えるともっといいのにね。
もう少し速いと、いいんですけど。

DVDドライブ

マルチブート用にAcronis OS Selectorを使っているのですが、デフラグしたらハードディスクから立ち上がらなくなってしまいました。CD-ROMも壊れていて、なす術がなく、新しいDVDドライブを買ってきました。BuffaloのDVSM-XL516FBなのですが、CD-ROMが回るとちょっと音がうるさくてがっくり。仕方ないけど。壊れたDVDドライブもGSA-4082Bなのですが、CD-ROMだけ読めないとい壊れ方で、マルチドライブも意外な欠点があるのね。
フリーのブートマネージャもあるのですが、以前パーティションが壊れたとき、System Selectorの復旧ツールが役になったことがあって、なるべく安い市販のツールを使うようにしているのでした。でも、デフラグで立ち上がらなくなるのもなー。
立ち消えになっていた、Windows XP x64のインストールやるぞー。

kqemu-1.3.0pre9

kqemu-1.3.0pre9.tar.gzが出ています。Windowsホストでも動くようで、Win2kとFC4のRescue CDは、動くのを確認しました。でも、FC3は起動途中で止まってしまいました。Redhat7.2も動きますが、とても遅いです。