/ sys / devices / system / cpu / cpu0 / cpufreq / scaling_setspeed: argumento inválido [duplicado]

1

Eu estava preso ao tentar gravar em um arquivo de sistema para alterar a frequência da cpu:

$ cat   /sys/devices/system/cpu/cpu0/cpufreq/scaling_setspeed
<unsupported>

$ echo 1600000 | sudo tee  /sys/devices/system/cpu/cpu0/cpufreq/scaling_setspeed
1600000
tee: /sys/devices/system/cpu/cpu0/cpufreq/scaling_setspeed: Invalid argument

A alteração do usuário para o root tem o mesmo problema:

$ sudo su
# echo 1600000 >   /sys/devices/system/cpu/cpu0/cpufreq/scaling_setspeed
bash: echo: write error: Invalid argument

O seguinte provavelmente não deve estar relacionado. Anteriormente, os comandos acima todas trabalhado, mas depois o meu Ubuntu foi congelado de uma hora atrás, quando eu ligar a ficha USB do meu laptop mais frio em uma porta USB do meu laptop, então eu tive que reiniciá-lo por bater o botão de alimentação do meu laptop, e então eu tenho o problema acima.

Anteriormente, quando funcionava, cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_setspeed produzia algum valor em vez de <unsupported> . Depois de tentar várias vezes com o erro invalid argument acima, executei novamente echo 1600000 | sudo tee /sys/devices/system/cpu/cpu0/cpufreq/scaling_setspeed e ele funciona sem o erro invalid argument . Mais ou menos na mesma época, o ubuntu relatou algum erro no utilitário de frequência da cpu, que não me lembro exatamente.

    
por Tim 31.03.2018 / 23:03

1 resposta

1

Os arquivos em sysfs e procfs são interfaces para o kernel. Ler e gravar nesses arquivos chama o código em um driver no kernel. Se você receber o erro "permissão negada" (EACCESS), isso vem das permissões de arquivo. Mas se você receber um erro como "argumento inválido" (EINVAL), isso significa que o driver enviou esta resposta.

A razão mais óbvia para "argumento inválido" é que você está tentando escrever um valor que não é válido. Por exemplo, escrever algo que não seja um número para modificar uma configuração numérica ou escrever um número fora do intervalo aceitável.

Dado que a leitura retorna a string <unsupported> , naquele momento em sua máquina, o driver achou que seu hardware não suportava esse recurso. Desde que funcionou anteriormente, isso indica um erro no driver ou uma falha de hardware.

Você indicou que agora funciona novamente. Então, foi um problema transitório que a reinicialização foi corrigida. O resto da minha resposta é um conselho para pessoas que acabaram de ser confrontadas com um problema semelhante.

Se você atualizou seu kernel recentemente, tente reverter para a versão anterior.

Como o problema está no kernel, ou pelo menos entre o kernel ou o hardware, você precisa se aprofundar nos logs do kernel para encontrar mais informações. Em um sistema recente o suficiente com o systemd, execute sudo journalctl -k para ver os logs do kernel. Como alternativa, consulte /var/log/kern* , que inclui registros salvos mais antigos.

Encontrar a mensagem de log correta pode ser difícil. Se você puder encontrar a hora aproximada em que as coisas começaram, procure por mensagens de log nessa época. Tente acessar o arquivo em /sys agora, isso pode ou não gerar uma nova mensagem de registro a cada vez, dependendo de como o driver funciona.

Se você teve alguma falha relacionada ao hardware e reinicializou, algum firmware (software executado em um dos chips auxiliares no computador) ainda pode ter dados incorretos. Para redefinir completamente todo o firmware para o estado de inicialização, você precisa desligar completamente o sistema. Em um laptop, às vezes é necessário desconectar completamente a energia (remova o plugue da tomada e da bateria e coloque-os de volta).

    
por 01.04.2018 / 12:07