1. Introdução

O objetivo desse tutorial é mostrar como incluir suporte ACPI no Linux para computadores que possuem a implementação do padrão ACPI com problemas.

2. Sistema Teste

3. Sintomas Iniciais

4. Por que não funciona

Para a implementação do padrão ACPI, existem dois fabricantes de compiladores: Microsoft e Intel. A vasta maioria dos fabricantes de laptops utiliza o compilador da Microsoft, que segue parcialmente a especificação do padrão ACPI, o que resulta em tabelas DSDT com mais erros que o desejado, pois o compilador da Microsoft ignora um monte de erros e avisos em tempo de compilação.

Como o compilador da Microsoft é feito para rodar no ambiente Windows, na hora de se gerar tabelas DSDT para o Linux, precisamos utilizar o compilador da Intel, que implementa o padrão ACPI literalmente. Por esse motivo, precisamos gerar uma nova tabela DSDT para rodar no Linux, pois a que vem no sistema de fábrica não é 100% aceita, apesar de no Windows rodar sem problemas.

5. O Que foi Feito

5.1. Compilação da tabela DSDT

5.1.1. Instalação do compilador iasl

O compilador iasl serve para gerar a nova tabela iasl. Você pode encontrá-lo aqui.

Na versão que eu instalei na máquina, ele dava alguns problemas na hora da compilação. Para resolver, apenas comentei a linha 4031 do arquivo aslcompilerlex.c (#undef yytext_ptr). Feito isso, compilou sem problemas.

5.1.2. Obtendo a nova tabela DSDT

Se você tiver sorte, pode encontrar uma tabela DSDT corrigida aqui. Caso contrário, terá que corrigir a tabela você mesmo.

5.1.3. Corrigindo a tabela DSDT

Se você não conseguiu encontrar uma tabela DSDT para o seu computador, você terá que corrigí-la sozinho. Aqui segue os passos a serem feitos:

cat /proc/acpi/dsdt >> /tmp/dsdt.dat

Para gerar um arquivo com o código da tabela, execute:

iasl -d /tmp/dsdt.dat

Isso irá criar um arquivo dsdt.dsl, que contém o código a ser corrigido. Em seguida, tente gerar uma nova tabela DSDT, usando o comando:

iasl -tc /tmp/dsdt.dsl

Se tudo der certo, ele irá compilar com 0 Errors, 0 Warnings, 0 Remarks e 0 Optimizations. Se você não conseguir compilar, terá que corrigir o código, até cumprir todas as condições necessárias do compilador. Para algumas dicas de como resolver os problemas em tempo de compilação, consulte este documento.

5.2. Instalando a nova tabela DSDT

Após a compilação, serão gerados dois arquivos, um com o nome DSDT.aml e outro com o nome dsdt.hex (ou algo parecido). Copie o arquivo DSDT.aml para o diretório /etc/mkinitramfs.

Após, execute o comando:

sudo dpkg-reconfigure linux-image-$(uname -r)

Feito isso, reinicie o computador e seja feliz :)

6. Resultados finais

7. Referências

Nível anterior