Tweet

Linux での画面動画像キャプチャ

知り合いに訊かれたので,ここにも書いておく.

X 上では ffmepg が使えます.コマンドラインはこんな感じ.

ffmpeg -r 12 -f x11grab -s 512x384 -i :0.0 -vcodec rawvideo -pix_fmt rgb24 foo.mov
-s 512x384
キャプチャする画面サイズを指定します. この例では画面左上の 512x384 ピクセルがキャプチャされます.
-r 12
フレームレート(コマ/秒). 編集環境や PC のパフォーマンスを見て適当に調整しましょう.
-vcodec rawvideo -pix_fmt rgb24 foo.mov
出力フォーマットとファイル名の指定. この例では RGB 無圧縮の QuickTime になります.

新カップヌードル

img047.jpg

「コロ・チャー」が入ったカップヌードル.

コンビニで売ってたので買ってきて食ってみた.

悪くはないけど,いままで馴染んでる分,謎肉のほうがいいような気もする.

kgdb を使ってみた - テキスト版

先日,ニコ動にこんな動画を投稿してみたんだけど,「文字が読みにくい」という意見が多かったので,テキストに起こしてみました.

kgdb とは

1.png

ターゲットプログラム内にスタブと呼ばれる gdb の手先を組み込み,別のマシンで gdb を起動しデバッグを行う方法は,ワンチップマイコンのプログラム開発なんかで使われています. この「ターゲットプログラム」が Linux カーネルの場合,「スタブ」に相当するものが kgdb です.

HDL-GXR.jpg

kgdb は x86 ターゲットでも利用できますが,それではつまらないので,今回はターゲットとして ARM マシンである I-O DATA LANDISK HDL-GXR を使ってみました.

menuconfig

まずはビルドするカーネルの設定.

menuconfig-1.png

トップメニューから「Kernnel hacking」メニューに入って

menuconfig-2.png

「Compile the kernel with debug info」を有効にします. これが無くても kgdb 自体は動作するんだけど,vmlinux ファイルにデバッグ情報が埋め込まれなくなるので gdb 上でソースコードが参照できなくなってしまいます.

menuconfig-3.png

もちろん KGDB オプションも有効にします.

menuconfig-4.png

KGDB メニューに入り,「KGDB: use kgdb over the serial console」オプションも有効にします.

カーネルコマンドライン

u-boot.png

kgdb を利用するには,カーネルコマンドラインに

kgdboc=ttyS0,115200

という設定を追加して起動します.

x86 マシンの場合は grub や lilo でこの操作をやりますが,HDL-GXR では u-boot でこの操作を行います.

あと,

console=ttyS0,115200

というパラメータも追加し,シリアルにコンソールを設定してやります. でないと,リモートマシンと通信をすることができません.

kgdb への切り替え

sysrq.png

シリアルコンソールを gdb スタブへ明け渡すには

ブレーク信号 g

を送ってやります.

ブレーク信号(Ctrl+C とは別物)の送り方は,使っているターミナルソフトの説明を読んでください. ここで使っている minicom の場合は

Ctrl+a f

でブレーク信号が送出されます.

この後に続けて「g」を入力すると,シリアルコンソールが gdb スタブへと切り替わります.

gdb の起動

gdb-start.png

ターミナルソフトを終了させて gdb を起動します.

arm-linux-gnueabi-gdb vmlinux -b 115200

gdb のコマンドラインには uImage や bzImage ではなくて,デバッグ情報が格納されている,カーネルソースツリー直下の vmlinux ファイルを指定します. あと,-b 115200 はシリアルのビットレートです.

で,gdb プロンプトで

target remote /dev/ttyS0

と入力すると kgdb と接続されます.

gdb-bt.png

あとは,アプリケーションプログラムのデバッグのときと同様にバックトレースを取ったり

gdb-bp.png

ブレークポイントを設定したり

gdb-step.png

ステップ実行したり,変数を参照したりすることもできます.

まとめ

ざっくりと kgdb を起動するまでを説明しました.

デバッガとは本来,デバッグするための道具です. が,不具合が無い場合でも,単にプログラムの動作を追ってみたり,プログラムの流れを学習したりするのにも使えます. というわけで,kgdb は「Linux のカーネルのソースコードは巨大すぎて,どこから見ていけばいいかわからない」という向きにもオススメできるのかもしれません.

2009/12/17 追記

  • vmlinux の説明がミスリーディングぽかったらしいので,gdb 起動の説明を変更.
  • カーネルコンフィグオプションの説明が間違ってたので修正

koyo_take さん,ご指摘ありがとうございました.


トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2009-05-02 (土) 06:23:54 (3916d)