web-dev-qa-db-ja.com

Linuxカーネルドライバーのdev_dbgデバッグメッセージを有効にする

linuxカーネルドライバー_dev_dbg_デバッグメッセージ(実際にはtraceスタイルのメッセージ)を有効にする最も簡単な方法はありますか。カーネルパッチ/再コンパイルやdebugfs?カーネル内の何か(1つのフラグのような?)を有効にして、特定のドライバまたはすべてのドライバdev_dbg( `dmesg | grep" driverName ")の出力でフィルタリングできるようにする方法があるのでしょうか?

カーネルのバージョンは_4.14_です。実行中の_syslog/daemonlog/system_ログはありません。ネットワークインターフェイスはなく、使用できるシリアルポートは1つだけです。ターゲットシステムは非常に遅く、非常にコンパクトであるため、syslog/etcを追加する方法はありません。次のような行の出力を表示するのに適切なdmesgしかありません。

dev_dbg(&client->dev, "bla bla bla\n");

残念ながら、debugカーネルパラメータにbootargsキーワードを追加することをすでに提案している投稿は、不十分でした。

_dev_info_のような出力は問題なくdmesgに取り込まれるため、間違いなく近いものになります。ありがとう

5
Oleg Kokorin

syslog/etcをインストール/構成せずにdev_dbgメッセージを受信する最も簡単な方法は、次の手順を実行するために必要であると思われました。

  1. debugキーをbootargsカーネルパラメータに提供する

  2. ドライバーファイルの最初の行に#define DEBUGを追加-ドライバーが単一のファイルであり、共通のMakefileを使用している場合、またはドライバーにCCビルドオプション内に-DDEBUGを追加複数のソースファイルの通常のように独自のMakefile

  3. カーネルが起動すると、dmesg -n 8またはecho 8 > /proc/sys/kernel/printkを実行して、プロンプトがデバッグレベルのメッセージを有効にするように見えます

  4. insmod <driver name>またはmodprobe <driver name>のいずれかのコマンドを含むモジュールの場合、またはドライバーがカーネルに統合されている場合、挿入コマンドは異なる場合があります。

カーネル統合ドライバーをi2cバスサブシステムに割り当てる方法の例:

echo <driver name> <i2c bus address> > /sys/bus/i2c/devices/i2c-0/new_device

サイドノート:

DTSにドライバレコードの割り当てがある場合、手動で繰り返されたドライバの割り当てによりエラーが発生します-i2cサブシステムの場合-エラーEBUSY(-16)、ドライバはコマンドプロンプトの前に割り当てられ、dmesgメッセージはデフォルトレベルに制限されます(通常はdev_infoのみ)。

ドライバーが既にDTSによって割り当てられており、一時的にツリーソースから除外する方法がない場合-debug(トレース)の後でもう一度切り離して再接続すると便利ですレベルメッセージがアクティブ化されました

i2cサブシステムの場合、コマンドを実行する必要があります。

echo <driver name> > /sys/bus/i2c/drivers/<drivername>/unbind

その後

echo <driver name> > /sys/bus/i2c/drivers/<drivername>/bind

警告:

カーネルドライバーのトレースメカニズムは、内部ドライバーが正しく構成されていないか、サービス構造が不足している場合のデバッグには役立ちません。つまり、ドライバーは読み込まれているが、トレースメッセージが表示されずにメッセージが表示されないままの場合、probeは、カーネルの予想されるサービス構造情報が欠落しているか、障害があるため、実行されたことはありません。

2
Oleg Kokorin

次のコマンドを実行して、デバッグファイルシステムを手動でマウントできます。

mount -t debugfs none/sys/kernel/debug

完了したら、次を実行します。

ls/sys/kernel/debug

すべてのデバッグ情報とメッセージは、再コンパイルせずにそこに保存されます。

また、これを/ etc/fstabの下に追加して、再起動時にマウントを自動化することもできます。

...とにかくカーネルを再コンパイルする場合は、「カーネルハッキング」で「[*]デバッグファイルシステム」を有効にすることができます。

幸運を祈ります。すべてうまくいきますように。

1
Heider Sati