virtioについて調査した事を以下に記述する。 virtioはLinux 2.6.24-rc1で導入された準仮想ドライバです。現在のところディスクおよびNICの入出力を処理できます。KVMやlguestなどのVMMなどで利用されています。 virtioの利点 一般的に準仮想ドライバを実装…

VMIについて調査した事を以下に記述する。 環境 ゲストカーネル Linux 2.6.27-rc2 VMI Paravirtualization API Version 2.5 VMIとは透過的な準仮想化インターフェイスと公式サイトで説明されています。http://www.vmware.com/jp/interfaces/paravirtualizati…

X11

"ssh -X"でXをフォワーディングしてGUIアプリケーションで日本語入力を行いたい時がある。そのような時はXフォワーディングしたいマシンで以下の環境変数を追加すればよい。 export XMODIFIERS=@im=SCIM # @imは自分の環境に合わせる。

gcc

gccのビルトイン関数には関数のリターンアドレスやフレームポインタなどを取得することができる関数がある。この関数を使用しsetjmp/longjmpの実装は以下の様になる。たぶんバグはないはず?jmp.c #include <stdio.h> #include <stdlib.h> #define JMP_BUFFSIZE 6 typedef struc</stdlib.h></stdio.h>…

gcc

カーネルやVMMを実装するときは標準ライブラリを使用せずにコンパイルを行う。32ビットカーネルやVMMを実装中に、long longなどの変数の除算やかけ算を行うとコンパイルが通らない。それはlong longなどの64ビット変数の乗算や除算などの命令を実行している…

FreeBSDのソースコードのダウンロードの仕方は2種類ある。 FTPでFreeBSDのダウンロードの仕方 i386 ftp://ftp.freebsd.org/pub/FreeBSD/releases/i386/ amd64 ftp://ftp.freebsd.org/pub/FreeBSD/releases/amd64/上のftpサイトから自分の欲しいバージョンを…

最近、ディスクがクラッシュしたのでpxegrubの設定をやり直した。手順は以下のようにやる。pxegrubはgrubを使用しネットワーク越しにカーネルを立ち上げる事ができる。カーネル設計者にとってメリットはGRUBのマルチブートを利用できる事や、カーネルの再起…

subversionなどコミット時にチェンジログを書き、後からチェンジログにスペルミスなどや間違った事を書いていてチェンジログを編集したいときがある。このような場合はsvnadminのコマンドを使用しチェンジログを編集することができる。この方法は編集すると…

Linuxデバイスドライバを書いるとき、insmod module.ko, rmmod moduleを繰り返しているうちに、デバッグメッセージがいつ実行したドライバのメッセージがわからなくなる。いつ実行したか確実にわかるように、insmod, rmmodなどを実行したとき、printk()で現…

デバイスドライバなどを書いているときに、便利なマクロがいろいろあるがこのマクロがどのようになっているか知りたいとき、マクロが書かれているソースコードを見るのもいいが他にも方法がある。EmacsからC言語のプリプロセッサを呼出しマクロ展開したコー…

Debian公式のLinux Kernelを使用していたときは、VMware Workstation6が問題なく動いてくれたけど、最新のカーネルをインストールを行い、以下のようにVMWareの設定をするとVMWareのコンパイルに失敗しVMWareが使えない。 $ sudo vmware-config.plこの問題を…

Linux Kernelの最新のコードを入手するにはgitやftpで直接Linux Kernel Archiveからダウンロードすることも可能だが、gitはコマンドを覚えるのも大変だし、Linux Kernel Archiveから落とすのは毎回アクセスするのがめんどくさい。そこでketchupを使うことで…

必要なものは最新のカーネルとビルドツールが必要になる。ゲストのUMLからホストOSのファイルシステムをアクセスできるhostfsを使用すると便利である。UMLのコンパイルは以下のようにするののがお薦めである。 $ make defconfig ARCH=um $ make gconfig ARCH…

VBE

VBEのデバイスドライバを書いた後、画面に点や線、四角などは簡単に表示をできるが文字(フォント)を表示することは難しい。しかしビットマップのフォントデータさえあれば簡単に文字を表示することができる。Linux Kernelの/usr/src/linux/drivers/video/…

VBE grubを起動し、GRUBのコマンドライン上でvbeprobeとコマンドを実行すると、現在実行できるVBEのビデオモード番号、解像度、色数が表示される。VMWare Workstation 6で試したところ、このビデオモード番号と解像度が仕様書と番号と解像度が一致していない…

GRUB Multibootを使用し自作のカーネルなどでSVGAを使う方法

GRUB Multibootの仕様書にはVBE Controller InformationやVBE Mode Informationの構造体のアドレスを取得できると書いてあるが、現在のGRUB 0.97では構造体のアドレスを取得できない。これはGRMUのmenu.lstにvbesetコマンドを書いてもVGAの画面のままでVBEを…

iperf

iperfはend-to-endで、ネットワークのスループットの測定ができます。 iperfはTCP, UDPどちらにも対応しいます。 iperfの使いかた iperfはサーバーとクライアントが必要になります。やり方は次のようにします。始めに、サーバー側でiperfの待ち状態にします…

asmlinkage

LilyVMのコード読んでいるとき、asmlinkageのマクロが出てきたが定義がされていない。Linuxカーネルなどにも使用されているので調べてみた。 asmlinkageマクロとは Linuxカーネルなどによく見かけるマクロの一つとして、asmlinkageマクロがある。このマクロ…

タグ付き正規表現で置換

タグ付き正規表現は、一度使用した正規表現を繰り返し使いたいときに使用します。 sed, awk, emacs, grep, egrepなどがタグ付き正規表現が使えます。使いかたは 繰り返し使う正規表現を次のようにくくる、\(正規表現\) \(正規表現\)でくくられた正規表現をタ…

X11で透過処理

Gnome + BerylからFluxboxに環境を移動したとき、ウィンドウの透過処理ができなくなった。 この問題を解決するために、transset, xcompmgrを使用すればウィンドウの透過処理を実現できる。 transset, xcompmgr インストール $ cvs -d :pserver:anoncvs@cvs.f…

make代替ツール

Jam

Jam(just another make)とはmakeの様なビルドツールです。makeより後発に開発されたのでmakeよりはるかに優れています。 Windowsだとバイナリ配布、Linuxなどではapt-get install jamなどで簡単にインストールができるので手軽に試せます。Jamの特徴は次の様…

マイクロ秒のウェイト

CPU

inb(), outb()などの命令が連続しているとき入出力命令が実行できないことがあります。これはCPUとバス間のデータ転送が速過ぎて処理が実行できない事が原因です。これを解決するために短い遅延を入れることによって解決ができます。短い遅延を入れるにはポ…

ENTRYマクロ

CPU

このマクロはLinuxカーネルやXenなどのたくさんのプログラムに使用されている。このマクロの特徴は、.alignのディレクティブを使用し、次の命令を4バイト境界のメモリに配置するようにnop命令を挿入する。 次のようなコードでベンチマークを行ってみるとパフ…

CPUID命令

CPU

x86アーキテクチャではCPUの情報を読み取るにはCPUID命令を使用します。 この命令はeaxレジスタに値をセット後、CPUID命令を実行すると、eax, ebx, edx, ecxレジスタに出力結果がセットされます。 最新のIntelプロセッサでは入力のeaxレジスタには0x00から0x…

カーネル開発

カーネル開発に主に参考したカーネル Minix3 http://www.minix3.orgOperating Systems Design and Implementation, 3/E を参考にして読んでいる。 かなりわけのわからない所がある、教育用のオペレーティングシステムと言われているがすこし難しい。 カーネ…

カーネル開発 GRUB マルチブートについて

参考文献 公式のマニュアルは下のサイトにあります。 GRUBマルチブートについて、詳しい情報はマルチブートの仕様書に書いてあります。 http://www.gnu.org/software/grub/manual/multiboot/ GRUBのマルチブートの利点 カーネル開発をするとき、多くのカーネ…

GRUBを使い、ブートのコードを書かずにカーネルを起動させる。

カーネルの開発に必要なもの Unix系の環境、たぶんWindowsでもできるかもしれない。 VMware Player (別に他のエミュレータを使ってもいいけど大変かもしれない) qemu (vmplayerのイメージの作成に使う) GRUBを使っているオペレーティングシステムのディス…

Emacs23でアンチエイリアス(Ubuntu-ja 6.06)

やりかたは主にこのページを参考にした http://d.hatena.ne.jp/ichii386/20060902/1157144521 Emacs23をインストールすることによって、日本語の読み書きとアンチエイリアスができるようになる。 それなりに安定しているが、ときどきハングアップやいきなり…