問題タブ [kernel]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c - Linux カーネルのモジュールで機能をオーバーライドする
理由の詳細には触れずに、ローダブル モジュールからカーネル関数とシステム コールを置き換えるクリーンな (可能な限り) 方法を探しています。私の最初のアイデアは、いくつかの関数をオーバーライドするコードを作成し、元の関数を使用して (可能であれば関数を呼び出す可能性があります)、独自のコードを追加することでした。重要なのは、私が作成する関数には元の関数の名前が必要であるため、他のコードがそれにアクセスしようとすると、代わりに私の関数にアクセスすることです。
コードを適切な関数に投げ込むだけで、これをカーネルで直接 (比較的) 簡単に行うことができますが、カーネル (または C) コーディングの実践が必ずしも恐ろしいものではない小さな C マジックを誰かが知っているかどうか疑問に思っていました。同じ結果です。
#defines と typedefs の考えが頭に浮かびますが、頭の中でそれをハッキングすることはできません。
要するに、Linuxカーネルの関数を(モジュールから)効果的にオーバーライドする方法を知っている人はいますか?
編集:尋ねられたので、基本的にカーネル内から特定の機能(ディレクトリの作成/削除など)をログに記録したいのですが、健全性のために、大きなパッチを書く必要があるのではなく、ロード可能なモジュールが理にかなっているようですカーネルコードを変更し、変更ごとに再コンパイルします。カーネルに最小限のコードを追加しても問題ありませんが、ほとんどの作業をモジュールにオフロードしたいと考えています。
c - 仮想領域からページへ
Linux カーネルでは、 を指定すると、プロセスの のリストにアクセスできtask_struct
ます。これらの が与えられた場合、実際にこの vma に対応するを取得するにはどうすればよいですか?mm
vm_area_struct
vm_area_struct
struct page
mm/memory.c などで関数を探してみましたが、途方にくれました。
編集: アイデアは、vma 内のどのページが現在メモリ内にあり、どのページがそうでないかを見つけることです。しかし、これは宿題の小さな部分であり、自分で解決する必要があるため、誰かにこの方法を教えてもらいたくありません。しかし、この vma に対応するページを見つける方法がわかりません。ページを見つけることができれば、有効な pfn があるかどうかを確認できると思います。
operating-system - マルチコア/マルチ CPU マシンの割り込みはどのように機能しますか?
私は最近、低レベルの OS プログラミングに飛び込み始めました。私は現在 (非常にゆっくりと) 2 つの古い本、XINU と Build Your Own 32 Bit OS に取り組んでいます。また、以前の質問であるHow to get started in operating system development で素晴らしい SO の人々によって提案されたリソースもいくつか使用しています。
これらのリソースのいずれかでまだ遭遇していない可能性がありますが、おそらくこれらのリソースのほとんどがユビキタスなマルチコア システムの前に作成されたためですが、マルチコア/マルチプロセッサ システムで割り込みがどのように機能するのか疑問に思っています。
たとえば、ファイルの読み取り操作が完了したことを DMA が通知したいとします。割り込みが通知されたことを認識するプロセッサ/コアは? ファイルの読み取りを開始したのはプロセッサ/コアですか? 最初に到達するのはどちらのプロセッサ/コアですか?
linux - Linux カーネル /proc FIFO/パイプ
現在、カーネル イベントに基づいてデータを生成し、それらをファイルにプッシュするカーネル モジュールを作成しようとしています。これは悪いことだと読んだ後 (私も同意見です)、必要に応じてユーザー プログラムがプルできる /proc ファイルにデータを保持する方が理にかなっていると判断しました。しかし、この考えはあらゆる種類の問題、特にこのファイルをいつ、どのようにクリアするかという問題を引き起こしました。だから私は考えました...「 /proc に名前付きパイプを作成して、そこから読み取らないのはなぜですか?」
proc ファイルの読み取り関数と書き込み関数を設定する一般的な要点はわかりましたが、これをどのように行うかについてはまだ概念的な問題があります。つまり、任意のデータを取得してカーネルからそのようなパイプに書き込む関数をどのように作成すればよいでしょうか? カーネル空間から名前付きパイプにデータをプッシュする方法を知っている人はいますか? 最終的に、/proc ファイルである必要はありません(特に、そうするのが間違っている場合) が、それが私が到達した結論でした。次に、ユーザー空間プログラムからそれにアタッチする方法を理解する必要がありますが、それは別の問題だと思います。
linux - カーネル oops をどのように診断しますか?
Linux カーネルのエラーが発生した場合、問題をどのように診断しますか? 出力では、いくつかの手がかりを与えるように見えるスタック トレースを確認できます。問題を見つけるのに役立つツールはありますか? それを追跡するためにどのような基本的な手順に従いますか?
winapi - win32 のカーネルでプロセスが時間を費やしている理由を調べる
WinXp VmWare セッションで vc8 C++ プロジェクトをコンパイルしています。RedHat VmWare セッションでは gcc3.2 よりもはるかに遅いので、タスク マネージャーを調べています。私のコンパイルプロセスの非常に大きな割合がカーネルで費やされていると言っています。それは私には正しく聞こえません。
Win32 の strace に相当するものはありますか? 少なくとも、どのカーネル関数が呼び出されているかの概要を教えてくれるもの。犯人として際立っている何かがあるかもしれません。
c++ - __gxx_personality_v0とは何ですか?
これはOS開発サイトからの中古の質問ですが、どこにもまともな説明が見つからなかったので興味津々でした。
gccを使用して自立型C++プログラムをコンパイルおよびリンクすると、次のようなリンカーエラーが発生することがあります。
これは明らかに、このシンボルがlibstdc ++で定義されているためです。これは、独立した環境では欠落しています。問題を修正するには、このシンボルをどこかに定義する必要があります。
どちらがいいのですが、魔法のように機能するものは好きではありません...それで、問題は、このシンボルの目的は何ですか?
c - Linux カーネル プログラミング: 「カーネル NULL ポインターの逆参照を処理できません」
私はLinuxモジュールを書いていて、以下を取得しています:
どういう意味ですか?
linux - LinuxカーネルからUDPブロードキャストする方法は?
私は実験的なLinuxカーネルモジュールを開発しているので...
LinuxカーネルからUDPブロードキャストする方法は?
linux - 複数の .c ファイルでカーネル モジュールをコンパイルするための Makefile の配置方法は?
複数の .c ファイルでカーネル モジュールをコンパイルするための Makefile の配置方法は?
これが私の現在の Makefile です。KDevelopによって自動生成されました