어셈블러를 링 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'

관련 정보