Linux での画面動画像キャプチャ †知り合いに訊かれたので,ここにも書いておく. X 上では ffmepg が使えます.コマンドラインはこんな感じ. ffmpeg -r 12 -f x11grab -s 512x384 -i :0.0 -vcodec rawvideo -pix_fmt rgb24 foo.mov
新カップヌードル †「コロ・チャー」が入ったカップヌードル. コンビニで売ってたので買ってきて食ってみた. 悪くはないけど,いままで馴染んでる分,謎肉のほうがいいような気もする. kgdb を使ってみた - テキスト版 †先日,ニコ動にこんな動画を投稿してみたんだけど,「文字が読みにくい」という意見が多かったので,テキストに起こしてみました. kgdb とは †ターゲットプログラム内にスタブと呼ばれる gdb の手先を組み込み,別のマシンで gdb を起動しデバッグを行う方法は,ワンチップマイコンのプログラム開発なんかで使われています. この「ターゲットプログラム」が Linux カーネルの場合,「スタブ」に相当するものが kgdb です. kgdb は x86 ターゲットでも利用できますが,それではつまらないので,今回はターゲットとして ARM マシンである I-O DATA LANDISK HDL-GXR を使ってみました. menuconfig †まずはビルドするカーネルの設定. トップメニューから「Kernnel hacking」メニューに入って 「Compile the kernel with debug info」を有効にします. これが無くても kgdb 自体は動作するんだけど,vmlinux ファイルにデバッグ情報が埋め込まれなくなるので gdb 上でソースコードが参照できなくなってしまいます. もちろん KGDB オプションも有効にします. KGDB メニューに入り,「KGDB: use kgdb over the serial console」オプションも有効にします. カーネルコマンドライン †kgdb を利用するには,カーネルコマンドラインに
という設定を追加して起動します. x86 マシンの場合は grub や lilo でこの操作をやりますが,HDL-GXR では u-boot でこの操作を行います. あと,
というパラメータも追加し,シリアルにコンソールを設定してやります. でないと,リモートマシンと通信をすることができません. kgdb への切り替え †シリアルコンソールを gdb スタブへ明け渡すには
を送ってやります. ブレーク信号(Ctrl+C とは別物)の送り方は,使っているターミナルソフトの説明を読んでください. ここで使っている minicom の場合は
でブレーク信号が送出されます. この後に続けて「g」を入力すると,シリアルコンソールが gdb スタブへと切り替わります. gdb の起動 †ターミナルソフトを終了させて gdb を起動します.
gdb のコマンドラインには uImage や bzImage ではなくて,デバッグ情報が格納されている,カーネルソースツリー直下の vmlinux ファイルを指定します. あと,-b 115200 はシリアルのビットレートです. で,gdb プロンプトで
と入力すると kgdb と接続されます. あとは,アプリケーションプログラムのデバッグのときと同様にバックトレースを取ったり ブレークポイントを設定したり ステップ実行したり,変数を参照したりすることもできます. まとめ †ざっくりと kgdb を起動するまでを説明しました. デバッガとは本来,デバッグするための道具です. が,不具合が無い場合でも,単にプログラムの動作を追ってみたり,プログラムの流れを学習したりするのにも使えます. というわけで,kgdb は「Linux のカーネルのソースコードは巨大すぎて,どこから見ていけばいいかわからない」という向きにもオススメできるのかもしれません. 2009/12/17 追記 †
koyo_take さん,ご指摘ありがとうございました. |