dmassage

kernelの構成を最適化するツール。 同様なツールでは、NetBSDにadjustkernelというのがあるらしい。

kernel configファイルと、dmesgの出力を読み込み、 認識されなかったデバイスをコメントアウトしたものを出力する。

http://www.sentia.org/projects/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

同じような働きをするコマンドをawkで書いてみた*1

#!/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



*1 元々は、PerlがバンドルされていないNetBSD用に書いて、某掲示板に投稿したもの
Reload  New Edit Freeze Diff Attach Copy Rename  Top Index Search Recent Backups  Help  RSS
Last-modified: 2005-10-01 (Sat) 11:29:20 (4704d)