現在、カーネルにはstrerror
と同じ機能がありますか?私は私の思考がいいえではないが、もっと重要なことに、これについて何か議論されているので、1つを見つけることができませんでしたか?あなたがエラーコード(誰もが記憶しているわけではない)を調べなければならないし、おそらくシステム管理者や普通の日常的なユーザのために(dmesg
を介して)もっと簡単にできるので、トラブルシューティングの時間を短縮できると思います。strerrorのような機能はカーネル内にありますか?
LKMLを郵送する前にここで質問したかったのですが、私の考えは、デュアルメカニズム(エラー名の場合はEINVAL
)、もう1つは説明のためのものでした。 glibcの拡張子はerrno
なので、エラーコードを読まなければならないという点を除いて、%m
glibc拡張をprintkに追加することができます。おそらく%m
はエラー名を表示し、%M
はエラーの説明を出力できますか?
とにかく追加された場合は、テキストサイズを膨らませるため、.configオプションを指定する必要があります。サイズは、各文字列の間にヌル終端文字を持つ単一の文字列にエラー名(現在は1〜133)を格納するだけで縮めることができます。遅い文字列と反復子を強制的に反復するようにします。これは問題ではありません。内部エラー512-529は別の文字列でなければなりません。その後、何もコピーする必要がなく、ヌルで終了した文字列への直接ポインタが返される可能性があります。私の計算では、エラー名は約1322バイト、説明は#3540バイト(それぞれのエラーの#defineの後にコメント内にあり、現在欠落しているものについては "no description"を追加したものに基づいています)。
config-disabledの場合、printk %m
は%d
と解釈され、%M
は何も印刷されません。
「man strace」を試してください。実際のエラーコードに興味がある場合は、ユーザー空間から表示する代替手段があります。カーネルは 'errno'の文脈の外でより詳細なエラー情報を提供する立場にあります。これらは「dmesg」が作られたものです。 –
コメントありがとうございました。ありがとうございました。私は長い間 "strace"で遊んでいないし、それがどれほど役に立つか忘れてしまった、ありがとう!これについては、私は主にprintkでエラーコードを出力することについて考えています。私は何かをまとめてlkmlに提案するつもりだと思っていますが、私の現在のプロジェクトを終えた後です。 –
ええと、私はこれについて忘れていました。 %mを使用するとgccのprintf警告が破られたので、私は '%de'を使用しなければなりませんでした。 (私は今、忘れてしまっていると思う) - 私は、私は先に進んでこれを提出するべきだと思う。現在欠けているのは、一つのアーチでいくつかのものを解析することができないということだけ。 –