2010-05-01から1ヶ月間の記事一覧
こんなことを思ったのでやってみました。 左側がオリジナルのtineycore(glibc版)で、右側がeglibcでリマスタリングした版です。 サイズは0.1MBほど小さくなった程度でした。EGLIBCはglibcとバイナリコンパチがあるので、Debianのtestingからlibc6パッケー…
ネットでスレッドの実装をするという課題を見つけたのですが、x86版のコードだったのでx86_64で動くようにしてみました。課題のコードから変えたのはスレッドを作る処理と、コンテキストスイッチの切り替え部分です。 それ以外の部分は、基本的には課題で要…
この前作ったELFを読むコードを自作カーネルに移植して、ファイルシステムからバイナリを読んでそれを実行できるようにしてみました。 プロセス終了処理とかをちゃんと作って無いので一般保護例外出してますが・・・ 動作としては、"A"を表示するだけのカー…
この前作ったテスト用のバイナリを読める程度の最低限動くプログラムを書いてみました。manのELF(5)が参考資料です。 メインPC自体は64bitなのですが、作ってるカーネルは32bitなので、テスト用のバイナリも32bitでコンパイルしてます。 これを自作カーネル…
テスト用のプログラムはこんな感じです。単にシステムコール呼ぶだけです。 #define UNUSED __attribute__((unused)) int main(UNUSED int argc, UNUSED char **argv) { __asm__("mov $1, %eax\n\t" "int $0x80\n\t" ); return 0; } 自作カーネルは32bit用な…
所用でどんな感じで処理をしているのかを追いかけたのでメもです。たとえば、kernel/sched.cのnr_iowait_cpu()ですが、this_rq()でcpuごとのランキューのデータを取得できます。 unsigned long nr_iowait_cpu(void) { struct rq *this = this_rq(); このthis…
[ 26.624246] BUG: using smp_processor_id() in preemptible [00000000] code: modprobe/1932 [ 26.624252] caller is nr_iowait_cpu+0x1a/0x30 [ 26.624255] Pid: 1932, comm: modprobe Not tainted 2.6.34-rc7-tip+ #1 [ 26.624256] Call Trace: [ 26.624…
運営、現地・ustで参加された皆さん、お疲れさまでした。非常に濃い話ばかりで大変勉強になりました。 最初はTwitterで知り合った@syuu1228さんに誘われて第二回の探検隊に参加し、5/7の第四回は2回目の参加でした。 第二回カーネル/VM探検隊のATNDhttp://at…
こんな感じのHTMLを読んで、tdタグ内のデータを出力するときに、もし文字列が{}で囲まれてたら置換して表示するようなことをやってます。 <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Testcase001</title> </head> <body> <table border=1> <tr bgcolor="#00FFFF"> <td>Testcase</td> <td>Test step</td> </tr> <tr> <td>User should inp…</td></tr></table></body></html>
自作カーネルにMinixのファイルシステム(V2)実装できました。ソースはいつもながらこちらです。 主要な実装はfs/minix/minixfs.cの以下の関数です。 minix_get_sb():スーパーブロックを読む read_file():指定したファイルのデータを取得 find_file():フ…
自作カーネル用にext2の実装をテストしてたんですが、inodeまわりでちょっとハマってたので、 ext2よりは簡単そうなminixのファイルシステムで実装の実験して、データを読めるようになりました。 ソースは例のごとくgithubにあります。 実装の方法は前回のex…