2009-01-01から1年間の記事一覧

container_of という大変便利なマクロ関数の存在を知った

今更ながら、include/linux/kernel.h container_of が相当使えるマクロ関数だと気づきました. 一見わかりにくいのですが、なんと「変数が入っている構造体へのポインタ」をコンパイル時に計算してくれるのです.container_of を用いることで、API に縛られず…

clockevents

Linux カーネルには clockevents というフレームワークがあるのだけど、LWN.netの記事を見る限り、どうもハードウェアタイマのドライバを書くためのフレームワークという認識が正しいみたいです. もっとレイヤの高いものだと思っていたんだけど. 話が変わり…

デバッグ用の出力関数

gcc

最近の gcc だと、可変長引数マクロを使っても特に警告を出さないようです. そこで、以下のようなマクロを定義しておくと、デバッグメッセージのON/OFFが手軽にできて便利です. #ifdef __DEBUG__ #define dprintf(fmt,...) \ printf("[%s]%d:" fmt "\n",__FU…

GDB stub on kvm, 復活の巻

kvm

以前qemu+kvmに実装されているGDBStubに関する記事を書いた段階では、kvm に実装されている GDBstub が壊れてしまっていて、使えないという状態になっていました. しかし、本日 git から最新版を落としてきてビルド、動作させたところ、GDBstub が正常に動作…

本日発売の Software Design 2009/12 月号にメモリ管理の記事をかかせて頂きました

色々ご縁がありまして、id:syuu1228 さんと一緒に Software Design 2009/12月号の Linux カーネルの特集にメモリ管理の記事をかかせて頂きました.Software Design (ソフトウェア デザイン) 2009年 12月号 [雑誌]出版社/メーカー: 技術評論社発売日: 2009/11/…

高精度カーネルタイマ hrtimer のコールバックの仕組み(途中)

hrtimer は、 tick ベースの timer_list を用いた従来のカーネルタイマよりも、よりきめ細やかにタイマ管理を行いたい、というニーズに合わせて実装されました*1. カーネルタイマはタイマ割り込みのカウンタ jiffies が指定した値になると起動しますが、hrti…

カーネルタイマー add_timer のコールバックの仕組み(途中)

現状のLinuxには、2種類のカーネルタイマがあります. timer_list構造体を使用するカーネルタイマ. hrtimer構造体を使用する高精度カーネルタイマ(hrtimer). 今回は、前者について調べてみました. 呼び出しの仕組み カーネルタイマの基本的な呼び出しフローは…

Qemu に VNC オプションつけたときに、Grubの画面で矢印キーがきかなくなる

Qemu に VNC オプションつけたときに、Grubの画面で矢印キーがきかなくなるという問題があったのですが、Qemuの起動オプションに -k jaをつけると、日本語キーボード対応してくれて、動くようになります. ちなみに、-vnc オプションは -kernel オプションと…

PCが突然落ちる!

PCが突然落ちるという状態になってしまったので、原因究明のために lm-sensors というパッケージを導入. sudo aptitude install lm-sensors sudo sensors-detect # 基本全部デフォルトでOK(ひたすらEnter!) #----cut here---- it87 coretemp #----cut here-…

Linus の git tree

Linus の管理している git tree は、このURLに掲載されている.git で落とすには、 $ git clone git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux-2.6.gitとすれば OK.

*.soは...

どうも実行できるらしい. http://www.artonx.org/diary/20091020.html#p01へぇー!

bananajour を Ubuntu hardy 上で動作させる

bananajour は乱立しがちな git レポジトリを集中管理しよう、というプログラムです. まず、gemcutter というホスティングサービスを使っているので、これを利用するように gem の設定ファイルを書き換える必要があります. $ gem source -a http://gemcutter…

Pragger用Wikiが誕生

ドキュメントを整備したい! http://d.hatena.ne.jp/big-eyed-hamster/20090919/1253320767 という声が届いたのか、PraggerのWikiが誕生しました. http://ikejima.org/wiki/pragger/時間があるときに書いていこうと思います. それと mixi voice用のプラグイ…

RSS::Maker.make に失敗する =>設定ミスと判明

2009/09/20 追記 完全に設定ミスでした>< 失礼しました. なんぞこれ>< 何か設定を忘れているのかな?? config.yaml - module: Feed::mixi::get_echo_list config: id: xxxxxxx - module: RSS::save config: filename: output.rdf title: mixi echo $ ./pr…

mixiボイス用のPraggerプラグインを作ってみた

追記:「本家統合希望」と書いておくと、マージされるらしいので、統合希望にしておきますwtwitterからmixiボイスにマルチポストするRubyスクリプト書いたそれ、Praggerでできるよ!ってなわけで、Praggerのmixiエコーのソースを元にmixiボイスに対応させてみ…

カーネルのコンパイルなしにカーネルモジュールをコンパイルする環境を作る

Linuxカーネル用のモジュールをコンパイルする際には、通常 /lib/modules/`uname -r`/build をカーネルのソースディレクトリとして指定し、それを make コマンドに引数として渡す必要があります. カーネルモジュールは、カーネル側の保持しているシンボルテ…

Writing kernel modules in Haskell

LWN.netで、大変頭のおかしいプロジェクトが紹介されていました(いい意味で). Writing kernel modules in Haskellというもので、カーネルモジュールのインターフェースとGHCを合わせることで、Haskellを用いてカーネルモジュールを書くことができるんだとか.…

Praggerのレポジトリ、復活

某停電で死んだと思われる Ruby 実装の Plagger こと Pragger のレポジトリですが、 復活したみたいです!http://dev.ikejima.org/src/svn/pragger/わーい!

distccを用いた分散コンパイル環境の構築

カーネルを触っていると、コンパイル時間が開発のボトルネックになってしまうことがあります. この問題を解決するために、distccを用いた分散コンパイル環境を構築してみました. なお、ファイルパスなどはすべてubuntuのものとなっており、分散先のマシンのg…

パッチの返信が返ってきた!

先日投げたパッチですが、なんと 開発者の Avi さんから返信がありました! 日本語版のユーザドキュメントしか見てなかったので知りませんでしたが、 -drive オプションなんてできていたのですねー(日本語版のユーザドキュメントを見ると、-driveオプションは…

gdbstub: packet reply is too long

qemu に -s オプションをつけると、qemu の gdbstub が localhost:1234 で立ち上がり、gdb 上で target remote localhost:1234 などとすると接続できますよね. しかし、kvm-88の時点で、現在の qemu では、これを利用することができません. 具体的には、以下…

KVMを用いて、カーネルイメージから直接起動したい...!(解決編) + パッチ投げた

先日の記事で、KVMからの直ブートに失敗していましたが、無事に動作しました! /usr/local/kvm/88/bin/qemu-system-x86 -kernel /boot/vmliuz-2.6.28-15-generic -initrd /boot/initrd.img-2.6.28-15-generic -hda ~/disks/ubuntu.img -append "root=/dev/sd…

KVMを用いて、カーネルイメージから直接起動したい...!(未解決)

というのは、需要としてはかなりありますよね. というわけで、以下のオプションを用いることでブートできる...はずなのですが! /usr/local/kvm/88/bin/qemu-system-x86 -kernel /boot/vmliuz-2.6.28-15-generic -initrd /boot/initrd.img-2.6.28-15-generic…

Linux カーネル 2.6.30.5 で kvm-88 のインストールが通らない

タイトルの通りです. make installしてみると、 $ make install WARNING: Loop detected: /lib/modules/2.6.30.1/extra/kvm.ko which needs kvm.ko again! WARNING: Module /lib/modules/2.6.30.1/extra/kvm.ko ignored, due to loop WARNING: Module /lib/m…

カーネルコンパイルについて

Debian系のディストリビューションにおいて、マシン間で動作するカーネルをコンパイルしようと思ったら、通常は"make-kpkg"コマンドを利用しますよね. ちょっとしたオプションを付け加えるだけで deb パッケージを作成できるため、大変便利なのですが、2つ欠…

第2回KVM読書会の資料

8/28に第2回KVM読書会を開催し、その資料をこちらにアップロードしました. 今回の内容は、Intel-VT、KVMのさわり(後半)となっています. KVMのさわり(後半)はカーネル/VM探検隊用にあげた資料から流用していますので、そちらを見たことがある方は見る必要がな…

Linux カーネルに欲しいモノ

最近のPCのマザーボードにシリアルポートが搭載されていないことに起因するものばっかですがw USB2Serial で Grub のOS選択画面を表示したい. Linux カーネルを一旦ブートさせて、ドライバだけ拝借できないか(Bitvisor的な感じで). もしこのアプローチがうま…

MMU Notifier 対応後のカーネル用にkvmをコンパイルする際の注意

KVM

去年の夏頃だと思いましたが, KVM 上で動作しているゲストOSのメモリをスワップアウトさせるために、Linuxカーネルに MMU Notifier という機能が実装されました. 詳細はid:kvmさんのこちらの記事をご覧ください. その影響もあり、少なくともKVM85では、mmu n…

vhost: a kernel-level virtio server

KVMのMLで、vhost: a kernel-level virtio serverが話題になっています.これまで準仮想化の標準インターフェースとされてきた virtio は、専用のPCIデバイスをVMに認識させ、そのデバイスを経由してホストにIOを要求していました. この際、KVMがQemuのコード…

近況

わぁ、日記がいつのまにやら一ヶ月ぶりだよ!現在の状況は... カーネル/VM探検隊に参加しました. 私はKVMのネタで発表しました. 勉強会資料はこちらから閲覧可能です. 飲み会は充実してたなぁ...w ADC(Android Developer's Challenge)に向けてプログラム作っ…