***dmassage #author("2023-06-05T09:29:08+09:00;2005-10-01T11:29:20+09:00","default:kaw","kaw") ***dmassage [#z70d02bf] kernelの構成を最適化するツール。 同様なツールでは、NetBSDにadjustkernelというのがあるらしい。 kernel configファイルと、dmesgの出力を読み込み、 認識されなかったデバイスをコメントアウトしたものを出力する。 http://www.sentia.org/projects/dmassage/ /// http://www.sentia.org/projects/dmassage/ # pkg_add dmassage また、デバイスの認識の様子をツリー上に表示する機能も付いている。 # sysctl kern.version kern.version=OpenBSD 3.6-current (NIMBUS4) #16: Fri Feb 11 15:21:52 JST 2005 kaw@nimbus4.localnet:/usr/src/sys/arch/i386/compile/NIMBUS4 # /usr/local/sbin/dmassage -t root \-mainbus0 |-bios0 |-cpu0 \-isa0 |-fdc0 | \-fd0 |-isadma0 |-npx0 |-pcic0 | |-pcmcia0 | | \-ne0 | \-pcmcia1 |-pckbc0 | \-pckbd0 | \-wskbd0 |-vga0 | \-wsdisplay0 \-wdc0 \-wd0 *** adjkrn.awk *** adjkrn.awk [#j66cb9e4] 同じような働きをするコマンドをawkで書いてみた((元々は、PerlがバンドルされていないNetBSD用に書いて、某掲示板に投稿したもの))。 #!/usr/bin/awk -f BEGIN { FS = "[^?*0-9a-z][^?*0-9a-z]*" } { if ((pfn != "") && (pfn != FILENAME)) fchg = 1 pfn = FILENAME } $2 == "at" { if (fchg != 1) { if (DEBUG==1) { print "#D found: " $1 " at " $3 } lookups[$1 "," $3] = $1 "," $3 } else { dev=$1; sub("[?*][?*]*", "[0-9][0-9]*", dev) pdev=$3; sub("[?*][?*]*", "[0-9][0-9]*", pdev) devfound = 0 for (fdev in lookups) { if ((pdev == "root") || (fdev ~ "^" dev "," pdev)) { if (DEBUG==1) { print "#D--------------------------------------" print "#D " fdev " matched to " dev " at " pdev print "#D" } devfound = 1 break } } if (devfound != 1) $0 = "#X " $0 } } fchg == 1 { print } 使用方法 >''awk -f adjkrn.awk ''['' -v DEBUG=1 ''] '''dmesg-file''' '''config-file''' ''>'' '''output-file''' dmesgの出力('''dmesg-file''') と '''config-file''' は、かならずこの順番で指定すること。 >''(dmesg ; cat'' '''config-file''' '') | awk -f adjkrn.awk ''['' -v DEBUG=1 ''] ''>'' '''output-file''' などと実行してもよい。 ''-v DEBUG=1''を指定すると、デバッグのため、動作(メッセージの認識状況)を出力にコメントの形で書き込む。 ---- [[FrontPage]]