东芝 Satellite L655 上显示“无电池”

东芝 Satellite L655 上显示“无电池”

我使用东芝 Satellite L655 笔记本电脑,最近安装了 Ubuntu 10.10。在 gnome-power-manager 中没有“使用电池”选项。当我运行命令时:dmesg | grep batt它返回:

[ 0.752856] ACPI: Battery Slot [BAT1] (battery absent)

请任何人帮忙解决这个问题!


thuci@ubuntu:~$ cat /sys/firmware/acpi/tables/DSDT > DSDT.dat
cat: /sys/firmware/acpi/tables/DSDT: Permission denied

答案1

这位博主描述了一个建议的修复方法这里

我在这里重现了该文章以完成对该问题的回答。

重要提示:建议的修复方法非常复杂,需要您重新编译自己的内核。因此,请做好几个小时工作的准备。我强烈建议您先备份系统 - 例如使用 clonezilla。

我还建议您先阅读博客中的评论,看看是否有任何报告的问题与您有关。由于您使用的是 10.10 - 有一条关于构建 2.6.35 内核的评论可能适用于您。

“问题的原因在于东芝包含了两组启动数据,这些数据会告诉操作系统机器中存在哪些硬件。Windows 读取正确的数据,而 Linux 则不会。我们需要构建自己的内核来实现这一点。我们需要从机器中提取 DSDT(区分系统描述表),修改 ASL,然后编译新的 AML DSDT。以下部分显示了如何告诉 Linux 使用这个修改后的 DSDT,而不是 BIOS 附带的版本。

获取机器的原始 DSDL:

sudo su
cat /sys/firmware/acpi/tables/DSDT > DSDT.dat

拆解

iasl -d DSDT.dat

进行更改:

vi DSDT.dsl

搜索行:OperationRegion (EMEM, SystemMemory, 0xFF808001, 0xFF) 并将其替换为:OperationRegion (EMEM, EmbeddedControl, 0×00, 0xFF) 保存文件。

构建:

iasl -tc DSDT.dsl

这将创建一个文件 DSDT.hex(此文件用于内核重新编译)

我在编译过程中收到以下两个错误

注意:- 您实际上可以忽略这些错误,即使这些错误未修复,这种方法也能奏效。但如果有兴趣,您可以想办法修复这些问题。否则,请直接转到“内核重新编译”部分。

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

修复:(如果您没有收到任何错误,请跳过此部分)

打开 DSDT.dsl 文件并转到 iasl 指出错误的行。 在我的情况下,我转到第 2656 行和第 2663 行。

iasl 抱怨“长度”行“0×00000000”。这是错误的。查看“范围最小值”和“范围最大值”。打开 Kcalc 或 Gnome 用户使用的任何程序,并将其更改为数字系统模式。确保选择了 HEX,现在我们从最大范围中减去最小范围,然后加 1。由于最小范围是 0(并且您不能减去 0),我将输入 FEAFFFFF,然后加 1,得到 FEB00000(不要混淆,我只是省略了“0x”,计算器不需要这个)。我根据长度将 0×00000000 更改为 0xFEB00000。所以现在它看起来像这样:

0×00000000,         // Granularity
0×00000000,         // Range Minimum
0xFEAFFFFF,         // Range Maximum
0×00000000,         // Translation Offset
0xFEB00000,         // Length

第 2663 行更改为

0×00000000,    // Granularity
0xFED40000,         // Range Minimum
0xFED44FFF,         // Range Maximum
0×00000000,         // Translation Offset
0×00005000,         // Length

再次编译。

内核重新​​编译:

安装必要的软件包:

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)

注意:我的 uname -r 是 2.6.38.2-generic

cd linux-2.6.38

(将其替换为您的内核版本)

从当前内核复制内核配置文件:

cp -vi /boot/config-`uname -r` .config

现在将 DSDT.hex 文件复制到内核源内的包含文件夹中

cp DSDT.hex /root/source/linux-2.6.38/include

打开我们刚刚复制的 .config 文件

vi /root/source/linux-2.6.38/.config

进行以下更改

CONFIG_STANDALONE=n
CONFIG_ACPI_CUSTOM_DSDT=y
CONFIG_ACPI_CUSTOM_DSDT_FILE="DSDT.hex"

保存并退出。

我的密码:/root/source/linux-2.6.38

开始编译内核:

make menuconfig

加载.config文件,保存菜单文件并退出。

我们即将开始编译过程。您可以使用一个小技巧来设置 CONCURRENCY_LEVEL 变量来加快内核的编译速度。该数字应该是您拥有的处理器数量加一。所以在我的情况下,我有一个双核处理器,所以我将加一,也就是三。

export CONCURRENCY_LEVEL=3

开始构建:

这里我将我的自定义内核命名为 tuxsage,请将其替换为您期望的内核。

make-kpkg clean
fakeroot make-kpkg --initrd --append-to-version=-tuxsage kernel-image kernel-headers

(这需要一些时间)

一旦完成,你将在当前目录的上一级目录中找到构建的内核

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

制作 initramfs:

update-initramfs -c -k 2.6.38+tuxsage (replace tuxsage with correct name)

更新Grub:

update-grub

重新启动到新内核”

相关内容