Linux カーネル デバイス ドライバー カーネル デバッグ テクニカル ノート集

Linux カーネル デバイス ドライバー カーネル デバッグ テクニカル ノート集
/******************
 * カーネルデバッグ技術 ********************/

(1)カーネルソースコード内のデバッグ関連の設定オプション

カーネル構成オプションには、カーネルのデバッグに関連するいくつかのオプションが含まれており、すべて「カーネル ハッキング」メニューに集中しています。含む:

CONFIG_DEBUG_KERNEL

追加のデバッグ オプションが利用可能になるため、チェックする必要があります。これだけではすべてのデバッグ機能が有効になるわけではありません。

デバッグ オプションの詳細な説明については、ドライバーのマニュアルを参照するか、menuconfig のヘルプ説明を参照してください。

(2)マクロを使ってprintkデバッグ文をグローバルに制御する方法

Makefile と連携することで、c ファイル内に独自のデバッグ ステートメントを定義できます。

(3)straceの使用

strace は、ユーザー空間プログラムによって発行されたすべてのシステムコールをトレースできます。役立つパラメータは次のとおりです。

  • -t は通話が発生した時刻を表示します
  • -T 明示的な呼び出しに費やされた時間
  • -e は、"-e execve" のように、トレースされるシステムコールの種類を制限します。
  • -f すべての子プロセスをトレースする
  • -p 特定のプロセスをトレースします。たとえば、「-p 8856」
  • -o 特定のファイルに情報を出力します

strace は、特にマルチプロセス プログラムの場合、システム コールの微妙なエラーを発見するのに非常に便利です。strace によって出力される戻り値とプロセス pid を通じて、多くの有用な情報を得ることができます。のように:

$>strace -o zht.txt -f ./process_create

(4)ltraceの使用

ltrace は、ユーザー空間プログラムによって発行されたすべての動的ライブラリ関数呼び出しをトレースできます。役立つパラメータは次のとおりです。

  • -t は通話が発生した時刻を表示します
  • -T 明示的な呼び出しに費やされた時間
  • -f すべての子プロセスをトレースする
  • -p 特定のプロセスをトレースする
  • -o 特定のファイルに情報を出力します

(5)Oopsメッセージを確認する

Oops は、何か不幸なことが起こったことをユーザーに通知するカーネルの最も一般的な方法です。通常、oops を送信した後、カーネルは不安定な状態のままになります。

場合によっては、oops によってカーネル パニックが発生し、システム クラッシュにつながることがあります。このような状況には次のようなものがあります。

  • * ロックを保持しているコードでエラーが発生する
  • *ハードウェアデバイスとの通信中にエラーが発生する
  • *割り込みコンテキストでエラーが発生する
  • * アイドルプロセス(0)またはinitプロセス(1)でエラーが発生するのは、カーネルがこれらの2つのプロセスなしでは動作できないためです。

別のプロセスの実行中に oops が発生した場合、カーネルはそのプロセスを強制終了し、実行を継続しようとします。 Oops は、範囲外のメモリ アクセスや不正な命令など、さまざまな理由で発生する可能性があります。

oops に含まれる最も重要な情報は、レジスタ コンテキストと呼び出しトレースであり、次のような oops を人為的に発生させる可能性があります。

if(悪いもの)
 バグ();
//またはBUG_ON(bad_thing);

panic() を使用すると、より深刻なエラーを引き起こすことができます。panic() を呼び出すと、エラー メッセージが表示されるだけでなく、システム全体が停止します。極めて悲惨な状況でのみ使用してください:

if(ひどいもの)
 panic("foo は %ld です!\n", foo);

場合によっては、スタック情報を印刷するだけでも、dump_stack() などのテストに役立つことがあります。

 if(!debug_check){
  printk(KERNEL_DEBUG "情報を提供してください\n");
  ダンプスタック();
 }

要約する

以上がこの記事の全内容です。この記事の内容が皆様の勉強や仕事に何らかの参考学習価値をもたらすことを願います。123WORDPRESS.COM をご愛顧いただき、誠にありがとうございます。これについてもっと知りたい場合は、次のリンクをご覧ください。

以下もご興味があるかもしれません:
  • Linux カーネル デバイス ドライバーのメモリ管理に関する注意事項
  • Linux カーネル デバイス ドライバー カーネル時間管理に関する注意事項
  • Linux カーネル デバイス ドライバー キャラクタ デバイス ドライバー ノート
  • Linux カーネル デバイス ドライバー仮想ファイル システムに関する注意事項
  • Linux カーネル デバイス ドライバー カーネル リンク リストの使用上の注意
  • Linux カーネル デバイス ドライバー proc ファイル システム ノート
  • Linuxカメラドライバの書き方の詳細説明
  • Linux におけるドライバモジュールのパラメータ転送プロセスの分析

<<:  Vueでパスワードの表示と非表示機能を実装するアイデアを詳しく解説

>>:  mysql5.7 でユーザーの初期パスワードを変更する方法

推薦する

Portainer を使用して複数の Docker コンテナ環境を管理する方法を説明します。

目次Portainerは複数のDockerコンテナ環境を管理します2. Dockerを管理する2.1...

Vueを使用して天気コンポーネントをロードする方法の詳細な説明

この記事では、Vueを使用して天気コンポーネントをロードする方法を参考までに紹介します。具体的な内容...

Vue+EChartsは、中国の地図の描画と省の自動回転と強調表示を実現します。

目次成果を達成する完全なコード + 詳細なコメントまとめ成果を達成する完全なコード + 詳細なコメン...

ffmpeg 中国語パラメータの詳細な説明

FFMPEG 3.4.1 バージョンパラメータの詳細使用方法: ffmpeg [オプション] [[入...

Apache Bench ストレステストツールの実装原理と使用状況分析

1: スループット(1秒あたりのリクエスト数)サーバーの同時処理能力を定量的に表したもので、reqs...

html+cssレイアウトの3つの方法(ナチュラルレイアウト/フローレイアウト/ポジショニングレイアウト)

1. 自然なレイアウト<br />レイアウトは変更せずに自動的に左揃えになります。 2....

JavaScript WeakMap の使い方の詳しい説明

WeakMap オブジェクトは、キーが弱参照であるキー/値のペアのコレクションです。キーはオブジェク...

SSDストレージを有効にしたMySQLインスタンスの詳細な説明

SSDストレージを有効にしたMySQLインスタンスの詳細な説明特に OS と MySQL が同じディ...

webpack と rollup を使用してコンポーネント ライブラリをパッケージ化する方法

序文以前、ローディングスタイルのコンポーネントを作成しました。コードの再利用性を実現するために、この...

Vue を使用してパブリック アカウントの Web ページを開発する方法

目次プロジェクトの背景始めるvue-cliでプロジェクトを作成するモバイル適応についてnormali...

Dockerボリュームのファイルマッピング方法

背景ブロックチェーン ログ モジュールで作業しているときに、コンテナーが実行されている場合は、ログ ...

JavaScript 戦略パターンを使用してフォームを検証する方法

目次概要戦略パターンを使用しないフォーム検証戦略パターンを使用して最適化する戦略パターンの利点要約す...

おすすめの無料英語手書きフォント20選

Jellyka Beesアンティーク手書き [ank]* ジェリーカ・カティカップケーキ LHF ジ...

Docker ネットワークの原理とカスタム ネットワークの詳細な分析

Docker はホストマシン上のブリッジを仮想化します。コンテナを作成して起動すると、各コンテナには...

クロスドメインの問題を解決するためのNginxの実用的な方法

フロントエンドとバックエンドを分離し、nginxを使用してクロスドメインの問題を解決するフロントエン...