問題タブ [kernel-module]

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.

0 投票する
3 に答える
8869 参照

linux-kernel - Linuxカーネルモジュール内のバッテリーレベルを取得するにはどうすればよいですか?

Linuxカーネルモジュール内のバッテリーレベルを取得しようとしています(モジュールはmodprobeを介して挿入されます)。理想的には、カーネルAPI呼び出しを使用してバッテリー情報を取得したいと思います。私はWebで解決策を検索しました。また、LinuxカーネルソースとMichaelMeskesによるプログラム「acpi」のソースを調べてアイデアを探しました。

これらは私が使用できると思うテクニックのいくつかです:

  1. 読み取り、解析/proc/acpi/battery/BAT0/state、および/proc/acpi/battery/BAT0/info
  2. /sys/class/power_supply/BAT0/charge_now解析をcharge_full伴わずに読み取ります。
  3. インターフェイスを公開する方法がわかれば、Linuxカーネルソースdrivers / acpi/battery.cからの呼び出しを使用してみることができます。私はおそらくメソッドacpi_battery_get_statusacpi_battery_get_info
  4. また、drivers / acpi / sbs.c内にメソッドがacpi_battery_readあり、そのすぐ上に「ドライバーインターフェイス」というコメントがあることに気付きました。誰かがこれを使用する方法を知っているなら、これは別の方法かもしれません。

カーネルモジュール内でファイルを読み取ることはおそらく悪い考えだと思いますが、それらのファイルがカーネル関数呼び出しにどのようにマッピングされるかは正確にはわからないため、問題ない可能性があります。

それで、皆さんは私にいくつかの提案/推奨事項を教えてもらえますか?

編集:私は私の解決策を以下の答えに含めました。

0 投票する
2 に答える
428 参照

linux-kernel - modinfo() 同等の INSIDE カーネル?

2 つのモジュール A、B があります。A には、グローバルにアクセスできる関数 f() があります。つまり、f() シンボルがエクスポートされます。B は時々 f() を呼び出したいと思うかもしれません。ただし、モジュール A がロードされている場合にのみ、B は f() を呼び出す必要があります。A がロードされているかどうかを B が判断する最善の方法は何ですか?

この質問のパート b は、f() がエクスポートされているかどうかを確認する方法はありますか?

どちらの方法がより効率的かはわかりません。

0 投票する
2 に答える
545 参照

linux-kernel - Syscall 実装カーネル モジュール 2.6

いくつか読んだ後、LKM を介して新しいシステムコールを追加することが 2.6 で難しくなっていることがわかりました。syscall テーブルがエクスポートされなくなったため、実行時に新しい呼び出しを挿入する (不可能?) ようです。

私が達成したいことは次のとおりです。

特定のタスクを実行しているカーネル モジュールがあります。このタスクは、ユーザー ランド プロセスによって提供される入力に依存します。この情報は、モジュールに到達する必要があります。この目的のために、カーネルモジュールに実装され、ユーザーランドプロセスから呼び出し可能な新しいシステムコールを導入します。

新しい syscall を追加するためにカーネルを再コンパイルする必要がある場合は、実際の syscall ロジックをカーネル モジュールの外部に記述する必要もありますよね?

これを行う別の方法はありますか?

乾杯、イークナイ

0 投票する
5 に答える
43352 参照

c - Linuxカーネルスペースで現在の時間(時刻)を取得する方法

時間が指定された2時間の間にあるかどうかを確認し、そうである場合は入力を無効にするカーネルモジュールを作成しています。これは私が早く寝ることを確認したいということと関係があります。(cronなどを含むさまざまな手法を使用することもできますが、カーネルプログラミングを学びたかったのですが...)

したがって、最初のバージョンとして、現在の時間が開始と終了の間にあるかどうかを確認します。これは、モジュールへのパラメーターを介して設定されます。

したがって、私の質問は次のとおりです。現在の時間を取得するにはどうすればよいですか。私はカーネル空間にいるので、標準ライブラリの通常の時間関数にアクセスできません。これにはdo_gettimeofday()を使用する必要があると思いますが、これでは秒とナノ秒しか得られず、今日は何時間も必要です。

ありがとう。

0 投票する
2 に答える
1245 参照

c - カーネルモジュールの再構築/更新

こんにちは、次の問題: 私はここでかなり奇妙な Linux ディストリビューション (Centos 5) を使用していますが、これには古いカーネル (または少なくともカーネルのいくつかの違い) があり、単純に更新することはできません。私がインストールする必要があるプログラムには、ファイル linux/crypto/api.c に含まれている関数 crypto_destro_tfm (さらに問題がありますが、現時点ではこれが唯一のエラーです) が必要です。問題は次のとおりです。私のディストリビューションには、crypto/api.c さえありません。モジュール crypto_api.ko はありますが、この関数はそこにないようです。

私の計画は次のとおりです。新しい Linux ディストリビューションから crypto_api を取得し、それをコンパイルしてモジュールを centos にロードします。

そのモジュールを再構築して交換するために何をする必要があるか教えてください。もちろん、新しいカーネルのすべてのソース ファイルがあります。(思い出してください:私は単純に再コンパイルして新しいカーネルを使用することはできません.b/c centosはこの方法ではうまくいきません)ありがとう

FWIW: これが正確なエラーです

警告: "crypto_destroy_tfm" [/home/Chris/digsig-patched/digsig_verif.ko] 未定義!

0 投票する
2 に答える
1579 参照

c - Linuxカーネルモジュールからキーボードとマウスへのアクセスを無効にするにはどうすればよいですか?

特定の時間帯の入力を無効にするカーネル モジュールを作成しようとしています。時刻を取得する方法 (Linux カーネル空間で現在の時刻 (時刻) を取得する方法) と関数をスケジュールする方法を見つけました。ただし、入力を無効にする方法がわかりません。カーネルがこれを行う場所が必要だと思いますが、API を読んだので、まだ前進していません。ドライバーに直接アクセスしてシャットダウンするか何かする必要があると思いますが、それは少し一般的ではないようです。これは可能ですか?

御時間ありがとうございます。

0 投票する
1 に答える
528 参照

linux - Linuxカーネル:replaceを介した関数インターセプトの観点から、命令キャッシュとmp-IRQサブシステムとは何ですか?

カーネル関数インターセプトを実装しようとしています(この古いメソッド(c)Silvioを使用して、System.mapの関数へのポインターを置き換えます)。このフォーラムの投稿によると、いくつかの考えられる欠陥は、インターセプト後にフラッシュ/更新されない命令キャッシュとmp-IRQソースに関連している可能性があります。

これらのサブシステムとは何ですか?この場合、それらをどのように処理しますか?

0 投票する
0 に答える
507 参照

android - Archos 5 IT 用の Cisco VPN クライアントのインストールに関する問題

Android 1.6 を搭載した Archos 5 IT ファームウェア v2.0.38 を使用していますが、vpnc のインストール方法に関するサイトが見つかりませんでした。主な問題は、tun.ko モジュールと vpnc パッケージをコンパイル/クロスコンパイルする方法がわからないことです。デバイスにルート アクセス権があります。

0 投票する
3 に答える
41205 参照

c - rmmodでLinuxカーネルスレッドを停止する方法は?

カーネルスレッドを作成するために、次のコードを記述しました。

insmodコマンドを実行すると、「pradeep」という名前のカーネルスレッドを作成でき、 ps -ef次のコマンドを使用して新しいスレッドを確認できます。

その親はKthreaddであり、そのPIDは2です。しかし、rmmodコマンドを実行してもこのスレッドを停止することはできません。次の出力が得られます。

誰かがこのスレッドを殺す方法を教えてもらえますか?