系统:Ubuntu
笔记本型号:Toshiba L600
问题:无法显示电脑电池相关信息
1 secret@L600:~$ cat /proc/acpi/battery/BAT1/* 2 present: no 3 present: no 4 present: no 5 secret@L600:~$ dmesg | grep battary 6 [ 1.370268] ACPI: Battery Slot [BAT1] (battery absent)
解决办法:
得到系统原始的DSDT:
# cat /sys/firmware/acpi/tables/DSDT > DSDT.dat
反汇编:
# iasl -d DSDT.dat #(如果没有iasl, 就安装一下)
# vim DSDT.dsl
找到:
OperationRegion (EMEM, SystemMemory, 0×FF808001, 0×FF) 修改成 OperationRegion (EMEM, SystemMemory, 0×00, 0×FF)
然后再重新编译:
# iasl -tc DSDT.dsl
可能会出现如下错误:
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文件,定位到有问题的两行,这两个错误都是长度不正确,所以只要修改长度就可以了,根据有问题行上面的Range Minimum和Range Maximum的值修改Length, 打开一个十六进制的计算器,用Range Maximum - Range Minimum,将得到的值+1,得到的十六进制即为Length的值,修改原来的0x00000000后保存。然后再重新编译:
# iasl -tc DSDT.dsl
就不会有错了,此时仍然有警告,忽略就可以了。接下来,重新编译内核,首先安装必要的数据包:
#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 ~/source #cd ~/source #apt-get source linux-image-$(uname -r)
从你当前的内核中复制配置文件:
#cp -vi /boot/config-`uname -r` ./linux-*/.config
复制之前编译生成的DSDT.hex到内核的include文件夹中:
#cp [PATH]/DSDT.hex linux-*/include #PATH为刚才编译的路径
再打开刚才拷贝的配置文件:
#vim ./linux-*/.config
修改如下:
CONFIG_STANDALONE=n CONFIG_ACPI_CUSTOM_DSDT=y CONFIG_ACPI_CUSTOM_DSDT_FILE="DSDT.hex"
如果没有自己给添加上,然后保存退出,然后进入内核文件夹
#cd linux-*/
#make menuconfig
在最后找到 Load an Alternate Configuration File
选择修改够的.config文件,最后选择Save an Alternate Configuration File. 保存即可。
接下来就是编译内核的过程了,首先应该导出CONCURRENCY_LEVEL变量的值,这个值应该为你CPU核心数+1
1 #cat /proc/cpuinfo | grep -i processor 2 processor : 0 3 processor : 1 4 processor : 2 5 processor : 3
我的电脑为i3CPU 4核心,所以
# export CONCURRENCY_LEVEL=5
开始编译:
我将我的内核命名为dream,你可以换成任何你喜欢的,或者直接复制也没有问题:
# make-kpkg clean # fakeroot make-kpkg --initrd --append-to-version=-dream kernel-image kernel-headers
(编译是一个很漫长的过程,大约要1个小时,根据机器配置而定)编译完成后会在上一层目录中找到生成的内核文件。
# cd ../ # dpkg -i linux-image-*.(根据自己的当前的内核版本选择).deb # dpkg -i linux-headers-*.(根据自己的当前的内核版本选择).deb
# update-initramfs -c -k [3.2.14-dream] #([]部分要根据你自己生成的文件名)
最后更新引导程序
# update-grub
重新启动后进入新的内核即可。最后效果:
可以看到电池的信息了,感觉Ubuntu还是比较省电,无线网开着,大约可以使用两个半小时,与Windows差不多。