printk は、Linux カーネルで最も一般的に使用されるデバッグ関数の 1 つであり、変数の値、関数の実行フロー、エラーの原因などのデバッグ情報をカーネル バッファまたはコンソールに出力するために使用されます。等printk の利点は、シンプルで使いやすく、追加の機器やドライバーを必要としないことです。 printk の実装には、カーネル バッファ、ログ レベル、フォーマット文字列などの概念が含まれます。この記事では、Linux カーネルのデバッグ技術である printk の原理と手法を紹介し、その使用方法と注意点を例を挙げて説明します。
カーネル デバッグ テクノロジの中で、最も単純なのは printk の使用です。その使用法は、C 言語アプリケーションでの printf の使用に似ています。アプリケーションは stdio.h のライブラリに依存しますが、Linux にはそのようなライブラリはありませんLinux カーネルでこの printk を使用するには、カーネルの実装をある程度理解する必要があります。
printf と printk の違い: printk は先頭に "" スタイルの文字を追加します。N の範囲は 0 ~ 7 で、この情報のレベルを示します。
printk(""....); の n の場合
カーネル ファイル Printk.c (カーネル) の console_loglevel レベルを 7.
に初期化します。 リーリー# cat /proc/sys/kernel/printk
7 4 1 7
7 4 1 7 は、console_loglevel、default_message_loglevel、minimum_console_loglevel、default_console_loglevel に対応します。
printk を使用する:
リーリー①と②では、出力された情報を確認するためにバッファ log_buf 内のデータをチェックする必要があります。 #dmesg
コマンドを使用する必要があります。 リーリーcat /proc/kmsg& を使用してバックグラウンドで実行し、デバッグ情報をリアルタイムで出力することもできます。 ②の__FILE__、
FUNCTION、__LINE__がそれぞれそのファイル、その関数、どの行に対応します。とても実用的です。リーリー
5. シリアル ポートと printk 関数の関係:この関数はハードウェアに関連しています。レジスタを読んで、データが送信されたかどうかを確認します。最後に、データをバイトごとにレジスタに書き込みます。s3c2440 シリアル ポート コントローラが自動的にデータを送信します。
リーリーLinux で uboot の console=ttySAC0 がシリアルポート 0 として認識される場合、/kernel/printk.c,
に次のコードがあります。 リーリーカーネルの実行開始時、コマンド ライン パラメータ "console=..." が見つかると、データ分析のために console_setup 関数が呼び出されます。コマンド ライン パラメータ "console=ttySAC0" の場合、デバイス名 (名前) は ttySAC として解析され、インデックス Index は 0、この情報はタイプ console_cmdline および名前 console_cmdline のグローバル配列に保存されます (注: 配列名は配列タイプと同じです)
後続の register_console(&s3c24xx_serial_console); では、s3c24xx_serial_console 構造体が console_cmdline 配列内のデバイスと比較されます。
①解析された名前は S3C24XX_SERIAL_NAME、つまり「ttySAC」で、console_cmdline のコマンドの名前も「ttySAC」です。
②s3c24xx_serial_console 構造のインデックス Index は -1 です。これは、コマンド ライン パラメーター「console=ttySAC0」のインデックスを使用することを意味します。インデックス = 0
透過本文,我們了解了Linux核心調試技術之printk的原理和方法,它們可以用來實現對核心的調試和輸出。我們應該根據實際需求選擇合適的方法,並遵循一些基本原則,如使用正確的日誌等級,使用正確的格式化字串,使用正確的輸出函數等。 printk是Linux核心中最簡單而有效的調試函數之一,它可以實現對核心的回饋和監控,也可以提升核心的可維護性和可擴展性。希望本文能對你有所幫助與啟發。
以上がLinuxカーネルのデバッグ出力機能:printkの詳細説明の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。