アセンブラをリング 0 として実行

アセンブラをリング 0 として実行

私はCPU温度センサーとファン速度モニターの読み取り値を報告するアプリケーションを作成しています。ただし、PECIに関するIntelの文書によると、必要な指示はリング0モード、つまりカーネルモードで実行する必要があり、そうでないと例外が発生します。

保護モードからカーネルモードに変換するコードをオンラインで見たことがありますが、ユーザーモードからカーネルモードに変換するコードはなく、カーネルで禁止するという内容を読みました。カーネルをパッチせずに元のユーザーモードにあったプログラムをカーネルモードで実行できるようにする解決策はありますか?

答え1

カント。カーネルは、ユーザーモードコードがリング0で実行されるのを防ぐために特別に設計されています。

これを行うには、カーネルモジュールを作成し、ioctlユーザーモードプログラムの任意の方法(おそらく)を介してモジュールと通信する必要があります。

カーネルモジュールの作成には必要ありません。修理するカーネルですが、カーネルモジュールは非常に慎重に作成する必要があります。同様の作業を行うサンプルモジュールから始めて、必要に応じて修正するのが最善です。

答え2

これは始めるのに役立つ素晴らしいガイドです。 http://www.thegeekstuff.com/2013/07/write-linux-kernel-module/

makefileは私には機能しませんが( "all"は何もする必要はありません)、カーネルmakeコマンドを直接実行するとうまくいきます。

user@gauss:~/a$ make -C /lib/modules/$(uname -r)/build M=$PWD modules
make: Entering directory `/usr/src/linux-headers-3.13.0-29-generic'
  CC [M]  /home/user/a/hello.o
  Building modules, stage 2.
  MODPOST 1 modules
  CC      /home/user/a/hello.mod.o
  LD [M]  /home/user/a/hello.ko
make: Leaving directory `/usr/src/linux-headers-3.13.0-29-generic'

関連情報