ラベル linux の投稿を表示しています。 すべての投稿を表示
ラベル linux の投稿を表示しています。 すべての投稿を表示

linuxのMakefileのCFLAGS変更につい

linuxでsrc.rpmをインストールして,rpmbuild -bbと
しても最適化されていて、gdbでのデバッグ
しようとしてもで変な部分でループしたり
breakできない関数がある。
その場合、Makefileの-O2や-gと定義してある
CFLAGSの行を変更する。


やりかた

1.listファイルにCFLAGSと定義してあるファイルを一意になるように
保存。CFLAGSがパッケージによりいろいろ違うので
cutやawkコマンドを使い、そのつどコマンドのオプションを変える。




2.sedをつかい、-O2を-O0に変更する。
はじめは-iをつけずにうまく変更できているか確認して
問題がなければ-iで上書きする。





とりあえず、kdumpを有効にしてvmcoreが作成された場合
まず最初に一般情報のみ取得してから、各構造体のアドレスを参照していく。


[一般情報の取得]
# crash /boo/systemtap.xxx /usr/lib/debug/xxx.xx/vmlinux vmcore

crashにはいったら任意のフォルダにマシン情報を保持する.は任意のpid

crash> bt -f >/tmp/bt-f
crash>bt -f > /tmp/bt-f-pid
crash>kmem -v >/tmp/kmem-v
crash>kmem -V >/tmp/kmem-V
crash>kmem -s >/tmp/kmem-s
crash>ps -u >/tmp/ps-u
crash>ps -k >/tmp/ps-k
crash>ps -G >/tmp/ps-G
crash>sig >/tmp/sig-pid
crash>files >/tmp/files-pid
crash>task >/tmp/task
crash>vm >/tmp/vm
crash>foreach -bt >/tmp/foreach-bt
crash>foreach -vm >/tmp/foreach-vm
crash>foreach files >/tmp/foreach-files
crash>foreach -R files /opt >/tmp/foreach-files-opt

上記の情報を取得後,各構造体の値を確認していく。
crash>mount
crash>net
crash>log

crash>mount super_block xxxxxx (mountで表示されるアドレス)


src.rpmやkernelソースをブラウザで参照できるサイト

http://rhkernel.org
http://lxr.linux.no/
http://opensource.apple.com/source
http://www.sourcecodebrowser.com/

100行目から150行目を取り出すためのawkの1ラインコマンド。
syslogで重点的にチェックしたい時間帯があればこのコマンドを
別ファイルにリダイレクトとかして調査する。

awk 'NR>=100 && NR<=150 {print $0}' < syslog

システムコールからlinuxのkernelが動作している部分の辿り方


1.man xxxx
で調べたい関数がシステムコールであることと、引数の数を確認する。

2.「SYSCALL_DEFINE」でlinux kernelのソースを検索する。
はシステムコールの引数の数。


システムコールがkernel内部でどのように処理をしているか調べたい
ときに重宝する。また、sys_xxx ->do_xxxというような流れでコール
されていない関数もあるので注意する。

About