Executando o programa assembly como anel 0

1

Estou escrevendo um aplicativo que reporta as leituras dos sensores de temperatura da CPU e do monitor de velocidade do ventilador. No entanto, de acordo com a documentação da Intel sobre PECI, as instruções necessárias devem ser executadas no modo de anel 0, ou seja, no modo kernel ou uma exceção é lançada.

Encontrei o código online para fazer a transição do modo protegido para o modo kernel, mas nenhum do usuário para o modo kernel, e li que era proibido pelo kernel. Existe uma solução, espero que isso não requeira correção do kernel, para permitir que um programa inicialmente no modo de usuário seja executado como modo de kernel?

    
por AnonymousPhysicist 02.07.2014 / 23:54

2 respostas

3

Não. O kernel é projetado especificamente para não permitir que o código do modo de usuário seja executado no anel 0.

Para fazer isso, você terá que escrever um módulo do kernel, e então falar com o seu módulo através de algum método (talvez ioctl ) do seu programa de modo de usuário.

Escrever um módulo do kernel não requer o patch do kernel, mas o módulo do kernel deve ser escrito com muito cuidado. É melhor começar com um módulo de exemplo que faça algo semelhante e modifique-o para atender às suas necessidades.

    
por 03.07.2014 / 00:00
0

Aqui está um guia muito bom para começar; link

O makefile não funcionou para mim (nada a ser feito para 'all'), mas apenas executar o comando make do kernel funciona diretamente bem;

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'
    
por 03.07.2014 / 00:15