Pergunta

Dupe no stackoverflow por um dos meus amigos com o mesmo problema:

Copiei o código deste tutorial: http://www.thegeekstuff.com/2012/04/create-proc-files/

E fiz o módulo que criou meu procfile.

Fiquei feliz ao descobrir que ganhei um procfile que poderia ecoar "text" > proc/name_of_procfile

Eu também posso ler com gato!!

Eu estive brincando com isso e agora tenho um número considerável de valores em meu perfil - sempre que eu faço isso, ele passa por esses valores sequencialmente:

Q1.Eu me pergunto - como excluo valores do procfile?

TAMBÉM, mais tarde, tentarei obter o comportamento de que sempre que um arquivo lê meu procfile, ele altera o valor de tudo o que acabou de ler no proc_file.

Q2.Eu sei que isso seria implementado no meu método "int read_info", mas alguma dica sobre como fazer isso?

Foi útil?

Solução

Q1.

Você não pode excluir esses valores no sentido normal de uma operação de exclusão em um sistema de arquivos.Você pode echo algo no procfile se for gravável.Então depende do comportamento do módulo como esses dados 'recebidos' são tratados.Será armazenado ou descartado ou de alguma forma contabilizado internamente - o módulo decide.Para ser mais preciso, a lógica que você coloca no módulo define o tratamento.O módulo deste exemplo possui uma lógica muito simples:ele memoriza uma string em seu buffer interno quando o kernel chama seu write_info função - na verdade, ela concatena novos dados com o conteúdo atual.Então ele pode retornar o conteúdo deste buffer quando o kernel chamar sua função read_info.Então, se você fizer isso:

echo "some text">/proc/yourprocfile
echo "another text">/proc/yourprocfile

Então cat /proc/yourprocfile iria imprimir

some text
another text

na tela.Para resumir:o comportamento completo desses arquivos é module-defined.

Q2.

Você poderia fazer isso quase como faz normalmente C programa.Existem duas diferenças principais:

  • a API acessível no modo kernel é diferente.Algumas funções têm nomes e funcionalidades iguais ou muito semelhantes aos seus análogos no padrão C biblioteca tem.As outras funções têm nomes diferentes, mas ainda são análogas a algumas funções do espaço do usuário.E então, algumas funções específicas que estão disponíveis apenas no espaço do kernel.

  • tudo o que você faz no espaço do kernel deve ser verificado várias vezes por você e depurado on the sheet of paper já que qualquer bug no seu módulo pode causar no mínimo o core dump do kernel (o kernel simplesmente para e então você tem que pressionar reset botão para reiniciar o sistema) e pode, na pior das hipóteses, causar corrupção de dados dos seus sistemas de arquivos.

Então, recomendo que você configure o pacote VirtualBox;criar com esta bela ferramenta uma máquina virtual;para instalar a versão mínima do Linux e fazer um instantâneo do disco virtual após a instalação.Portanto, se algo der errado, você sempre poderá reverter qualquer dano.Você não precisa instalar todas as suas ferramentas de construção e fontes do kernel lá - você estará apenas carregando e testando/depurando seus módulos/aplicativos nesta máquina virtual.

Mas de qualquer forma, a área que você vai tocar, ou, para ser mais correto, já tocada, é muito interessante.

Boa sorte

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top