Os estados de ativação ACPI podem ser modificados a partir do kernel?

1

Recentemente comecei a tocar um pouco com o Wake-on-LAN para tornar a configuração da minha casa um pouco mais confortável, mas no processo fiquei curioso sobre a configuração da ACPI.

Após uma verificação rápida, notei que o meu controlador de Ethernet tinha suporte para WOL, então eu joguei com ele um pouco:

Settings for eth0:
    [...]
    Supports Wake-on: pumbg
    Wake-on: g

Depois de alguns testes, percebi que:

  • Quando meu computador é suspenso, o WOL funciona bem em outro dispositivo.
  • Quando meu computador está desligado, nada acontece.

Agora, quero usar o WOL para que meu computador possa ficar pronto antes de eu chegar em casa. Não tenho necessidade do recurso se precisar manter o computador no modo de suspensão para que ele funcione (o sistema será retomado em apenas alguns segundos).

Eu investiguei um pouco e notei que minha placa Ethernet tinha uma entrada S4 estado S em /proc/acpi/wakeup :

Device  S-state   Status    Sysfs node
PXSX    S4        *enabled  pci:0000:09:00.0

Pelo que eu li, isso significa que meu controlador Ethernet pode ser usado como um gatilho quando e somente quando o sistema está no estado S4 (ou abaixo), que corresponde à hibernação. Isso explica porque eu posso usar WOL quando em modo suspenso (S1 / S3), mas não uma vez que eu execute poweroff (que eu acredito que coloque a máquina em S5, Soft Off).

Não estou muito familiarizado com a ACPI e meu conhecimento em hardware certamente não se estende aos controladores Ethernet. O que eu estou querendo saber é: existe alguma maneira que eu poderia ter meu sistema manter energia para o controlador Ethernet no S5 (quando o sistema foi desligado)? O kernel do meu (3.13) Linux tem uma palavra a dizer, ou é tudo para o design da minha placa-mãe (ou do controlador)?

Parece que posso decidir quais dispositivos podem atuar como acionadores escrevendo para /proc/acpi/wakeup (que, acredito, está obsoleto agora). Mas posso ser mais específico e também decidir em que estado um dispositivo pode acordar a máquina?

    
por John WH Smith 17.04.2016 / 23:00

1 resposta

1

Cabe ao design da placa-mãe.

/proc/acpi/wakeup é gerado a partir da auto-descrição da sua placa-mãe nas tabelas ACPI. Ele lista todos os dispositivos que seu computador pode usar para eventos de ativação e os estados que a placa-mãe suporta para esses eventos. Você não pode ser mais específico do que ativar / desativar uma fonte de ativação, mas pode haver mais configurações no menu do BIOS.

Você está certo em que poweroff coloca a máquina no S5. Mas S5 e S4 são estados bastante semelhantes. Muitas vezes, a única diferença são alguns bits nos registradores em um chip na placa-mãe que estão configurados na hibernação. Isso significa que, em termos de hardware, muitas vezes é possível configurar o wakeup a partir do S5, se você conseguir alterar manualmente os registradores relevantes, cutucando as portas de E / S da sua placa-mãe ou gravando em um dispositivo I²C. Você precisaria ler as folhas de dados para o chipset, chip SuperIO, etc. para que isso funcionasse. Como alternativa, pode ser possível modificar o daemon init para substituir a última parte da sequência de desligamento por algo como hibernação + reinicialização para forçar o BIOS a manter as fontes de ativação ativas.

Como a ativação do S4 é suportada em sua máquina, a solução mais simples seria usar a hibernação (por exemplo, via pm-hibernate ) em vez de usar poweroff .

    
por 03.05.2016 / 22:03

Tags