2

I use toshiba satellite L655 laptop, I recently installed Ubuntu 10.10. In gnome-power-manager there is no tap for 'On Battery'. When I run the command: dmesg | grep batt it returns:

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

Please anyone help to solve this!


thuci@ubuntu:~$ cat /sys/firmware/acpi/tables/DSDT > DSDT.dat
cat: /sys/firmware/acpi/tables/DSDT: Permission denied
3
  • 2
    what is the output of: cat /proc/acpi/battery/BAT1/info
    – lucazade
    Jun 26, 2011 at 16:53
  • you need to be logged in as root to do this - i.e. sudo su ... I've amended my answer to reflect this.
    – fossfreedom
    Jun 28, 2011 at 11:27
  • You do not need to recompile the kernel, having custom_method is enough, see bbs.archlinux.org/viewtopic.php?pid=1190357#p1190357. Converting those instructions to Ubuntu is an exercise for the reader.
    – Lekensteyn
    Dec 8, 2012 at 11:46

1 Answer 1

1

There is a suggested fix as described by this blogger here.

I've reproduced the article here to complete the answer to the question.

IMPORTANT NOTE: This suggested fix is very involved and involves you recompiling your own kernel. So be prepared for a few hours work. I would strongly recommend you take a backup of your system first - for example use clonezilla.

I would also recommend you read the comments from the blog first to see if any of the issues reported could refer to you. Since you are using 10.10 - there is one comment about building the 2.6.35 kernel which may apply to you.

"The cause of issue is because Toshiba included two sets of boot data that tell the OS what hardware exists in the machine. Windows reads the correct one whereas Linux doesn’t. We will need to build our own kernel to make this happen. We will need to extract the DSDT (Differentiated System Description Table) from the machine, the ASL modified, and a new AML DSDT can be compiled. The sections below show the way to tell Linux to use this modified DSDT instead of the version that came with the BIOS.

Get the original DSDL of machine:

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

Disassemble it

iasl -d DSDT.dat

Make the changes:

vi DSDT.dsl

search for line : OperationRegion (EMEM, SystemMemory, 0xFF808001, 0xFF) and replace it with : OperationRegion (EMEM, EmbeddedControl, 0×00, 0xFF) save the file.

Build it:

iasl -tc DSDT.dsl

This will create a file DSDT.hex (This file is used for kernel recompilation)

I received the below two errors during this compilation

N:B :- You can actually ignore these errors, this works even having these error unfixed. But if interested you can work out to get those fixed. Else directly goto ‘Kernel Recompilation’ section.

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

Fix : (If you didnt receive any error please skip this part )

open DSDT.dsl file and go to the line where iasl indicated the error. In my case I go to lines 2656 and 2663.

iasl is complaining about the “Length” line “0×00000000″. This is wrong. Look at the “Range Minimum” and “Range Maximum”. Open up your Kcalc or whatever you Gnome people use and change it to Numeral System Mode. Make sure HEX is selected and now we subtract the minimun range from the maximun range and then we add 1. Since the minimum range is 0 (And you can’t subtract 0) I will input FEAFFFFF and then add 1 which gives me FEB00000 (Don’t get confused, I’m simply omitting “0x”, the calculator doesn’t need this). I change 0×00000000 to 0xFEB00000 by Length. So now it looks like this:

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

Line 2663 changed to

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

compile again.

Kernel Recompilation :

Install necessary packages:

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: My uname -r was 2.6.38.2-generic

cd linux-2.6.38

(replace this with your kernel version)

copy kernel config file from your current kernel:

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

now copy the DSDT.hex file to the include folder inside kernel source

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

open .config file we have just copied

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

Make the below changes

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

save and quit.

My pwd : /root/source/linux-2.6.38

start compiling the Kernel:

make menuconfig

load the .config file, save the menu file and exit.

We are about to start the compile process . A little trick you can do is to set the CONCURRENCY_LEVEL variable to speed up the compile of the kernel. The number should be the number of processors you have plus one. So in my case I have a dual core processor so I will add one which would be three.

export CONCURRENCY_LEVEL=3

Start Building :

Here I named my custom kernel as tuxsage, replace it with the one you wish.

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

(This will take some time)

Once this is completed you will find the built kernel one directory up from your present directory

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

Make initramfs:

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

Update Grub :

update-grub

Reboot to the New Kernel"

2
  • I am getting output as follows while running the command "apt-get build-dep --no-install-recommends linux-image-$(uname -r)" Output: Reading package lists... Done Building dependency tree Reading state information... Done E: Could not open file /var/lib/apt/lists/security.ubuntu.com_dists_ubuntu_dapper-security_source_Sources - open (2: No such file or directory) Is there any alternate step to perform? Please advice. Thanks & Regards, Karthik.
    – user21936
    Jul 20, 2011 at 16:34
  • The key part of your question is "ubuntu_dapper-security..." - dapper is no longer supported and the repository no longer exists. Any reason why you are using such an old version of ubuntu? Suggest download at least the 10.04 LTS.
    – fossfreedom
    Jul 20, 2011 at 19:36

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .