Existe uma correção sugerida, conforme descrito por este blogueiro aqui .
Eu reproduzi o artigo aqui para completar a resposta à pergunta.
NOTA IMPORTANTE: Esta correção sugerida está muito envolvida e envolve a recompilação do seu próprio kernel. Então esteja preparado para algumas horas de trabalho. Eu recomendo strongmente que você faça um backup do seu sistema primeiro - por exemplo, use clonezilla.
Também recomendo que você leia os comentários do blog primeiro para ver se algum dos problemas relatados pode se referir a você. Já que você está usando 10.10 - há um comentário sobre a criação do kernel 2.6.35 que pode se aplicar a você.
"A causa do problema é que a Toshiba incluiu dois conjuntos de dados de inicialização que informam ao SO qual hardware existe na máquina. O Windows lê o correto enquanto o Linux não. Precisamos construir nosso próprio kernel para fazer isso Nós precisaremos extrair a DSDT (Tabela de Descrição do Sistema Diferenciado) da máquina, a ASL modificada, e um novo DSLT da AML pode ser compilado.As seções abaixo mostram a maneira de dizer ao Linux para usar este DSDT modificado em vez da versão que veio com o BIOS.
Obtenha o DSDL original da máquina:
sudo su
cat /sys/firmware/acpi/tables/DSDT > DSDT.dat
Desmonte-o
iasl -d DSDT.dat
Faça as alterações:
vi DSDT.dsl
pesquisa por linha: OperationRegion (EMEM, SystemMemory, 0xFF808001, 0xFF) e substituí-lo por: OperationRegion (EMEM, EmbeddedControl, 0 × 00, 0xFF) salve o arquivo.
Construa:
iasl -tc DSDT.dsl
Isto irá criar um arquivo DSDT.hex (Este arquivo é usado para recompilação do kernel)
Recebi os dois erros abaixo durante esta compilação
N: B: - Você pode realmente ignorar esses erros, isso funciona mesmo com esses erros não corrigidos. Mas, se estiver interessado, você pode resolver isso. Else diretamente para a seção "Recompilação do Kernel".
DSDT.dsl 2656: 0x00000000, // Length
Error 4122 - ^ Invalid combination of Length and Min/Max fixed flags
DSDT.dsl 2663: 0x00000000, // Length
Error 4122 - ^ Invalid combination of Length and Min/Max fixed flags
Correção: (Se você não recebeu nenhum erro, pule esta parte)
abra o arquivo DSDT.dsl e vá para a linha onde o iasl indicou o erro. No meu caso eu vou para as linhas 2656 e 2663.
iasl está reclamando da linha “Length” “0 × 00000000 ″. Isto está errado. Olhe para o "Range Minimum" e "Range Maximum". Abra o seu Kcalc ou o que as pessoas do Gnome usem e mude para o modo Numeral System. Verifique se HEX está selecionado e agora subtraímos o intervalo mínimo do intervalo máximo e então adicionamos 1. Como o intervalo mínimo é 0 (E você não pode subtrair 0) eu vou inserir FEAFFFFF e então adicionar 1 que me dá FEB00000 ( Não fique confuso, estou simplesmente omitindo "0x", a calculadora não precisa disso. Eu mudo 0 × 00000000 para 0xFEB00000 por Comprimento. Então agora parece com isso:
0×00000000, // Granularity
0×00000000, // Range Minimum
0xFEAFFFFF, // Range Maximum
0×00000000, // Translation Offset
0xFEB00000, // Length
A linha 2663 foi alterada para
0×00000000, // Granularity
0xFED40000, // Range Minimum
0xFED44FFF, // Range Maximum
0×00000000, // Translation Offset
0×00005000, // Length
compile novamente.
Recompilação de Kernel:Instalar os pacotes necessários:
apt-get install fakeroot kernel-wedge build-essential makedumpfile kernel-package libncurses5 libncurses5-dev
apt-get build-dep --no-install-recommends linux-image-$(uname -r)
mkdir /root/source
cd /root/source
apt-get source linux-image-$(uname -r)
NB: Meu uname -r era 2.6.38.2-generic
cd linux-2.6.38
(substitua isso pela sua versão do kernel)
copie o arquivo de configuração do kernel do seu kernel atual:
cp -vi /boot/config-'uname -r' .config
agora copie o arquivo DSDT.hex para a pasta include dentro da fonte do kernel
cp DSDT.hex /root/source/linux-2.6.38/include
abra o arquivo .config que acabamos de copiar
vi /root/source/linux-2.6.38/.config
Faça as alterações abaixo
CONFIG_STANDALONE=n
CONFIG_ACPI_CUSTOM_DSDT=y
CONFIG_ACPI_CUSTOM_DSDT_FILE="DSDT.hex"
salve e saia.
Meu pwd: /root/source/linux-2.6.38
comece a compilar o Kernel:
make menuconfig
carregue o arquivo .config, salve o arquivo de menu e saia.
Estamos prestes a iniciar o processo de compilação. Um pequeno truque que você pode fazer é definir a variável CONCURRENCY_LEVEL para acelerar a compilação do kernel. O número deve ser o número de processadores que você tem mais um. Então, no meu caso, eu tenho um processador dual core, então adicionarei um que seria três.
export CONCURRENCY_LEVEL=3
Começar a criar:
Aqui eu nomeei meu kernel personalizado como tuxsage, substitua-o pelo que você deseja.
make-kpkg clean
fakeroot make-kpkg --initrd --append-to-version=-tuxsage kernel-image kernel-headers
(Isso levará algum tempo)
Uma vez que isto esteja completo, você encontrará o kernel construído em um diretório a partir do seu diretório atual
cd /root/source
dpkg -i linux-image-2.6.38.(This part will be whatever name you gave it).deb
dpkg -i linux-headers-2.6.38.(This part will be whatever name you gave it).deb
Faça o initramfs:
update-initramfs -c -k 2.6.38+tuxsage (replace tuxsage with correct name)
Atualizar o Grub:
update-grub
Reinicie para o novo Kernel "