123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899 |
- ACPI Custom DSDT read from initramfs
- 2003 by Markus Gaugusch < dsdt at gaugusch dot at >
- Special thanks go to Thomas Renninger from SuSE, who updated the patch for
- 2.6.0 and later modified it to read inside initramfs
- 2004 - 2008 maintained by Eric Piel < eric dot piel at tremplin-utc dot net >
- This option is intended for people who would like to hack their DSDT and don't
- want to recompile their kernel after every change. It can also be useful to
- distros which offers pre-compiled kernels and want to allow their users to use
- a modified DSDT. In the Kernel config, enable the initial RAM filesystem
- support (in General Setup) and enable ACPI_CUSTOM_DSDT_INITRD at the ACPI
- options (General Setup|ACPI Support|Read Custom DSDT from initramfs).
- A custom DSDT (Differentiated System Description Table) is useful when your
- computer uses ACPI but problems occur due to broken implementation. Typically,
- your computer works but there are some troubles with the hardware detection or
- the power management. You can check that troubles come from errors in the DSDT by
- activating the ACPI debug option and reading the logs. This table is provided
- by the BIOS, therefore it might be a good idea to check for BIOS update on your
- vendor website before going any further. Errors are often caused by vendors
- testing their hardware only with Windows or because there is code which is
- executed only on a specific OS with a specific version and Linux hasn't been
- considered during the development.
- Before you run away from customising your DSDT, you should note that already
- corrected tables are available for a fair amount of computers on this web-page:
- http://acpi.sf.net/dsdt . Be careful though, to work correctly a DSDT has to
- match closely the hardware, including the amount of RAM, the frequency of the
- processor and the PCI cards present! If you are part of the unluckies who
- cannot find their hardware in this database, you can modify your DSDT by
- yourself. This process is less painful than it sounds. Download the Intel ASL
- compiler/decompiler at http://www.intel.com/technology/IAPC/acpi/downloads.htm .
- As root, you then have to dump your DSDT and decompile it. By using the
- compiler messages as well as the kernel ACPI debug messages and the reference
- book (available at the Intel website and also at http://www.acpi.info), it is
- quite easy to obtain a fully working table.
- Once your new DSDT is ready you'll have to add it to an initramfs so that the
- kernel can read the table at the very beginning of the boot. As the file has to
- be accessed very early during the boot process the initramfs has to be an
- initramfs. The file is contained into the initramfs under the name /DSDT.aml .
- To obtain such an initramfs, you might have to modify your initramfs script or
- you can add it later to the initramfs with the script appended to this
- document. The command will look like:
- initramfs-add-dsdt initramfs.img my-dsdt.aml
- In case you don't use any initramfs, the possibilities you have are to either
- start using one (try mkinitrd or yaird), or use the "Include Custom DSDT"
- configure option to directly include your DSDT inside the kernel.
- The message "Looking for DSDT in initramfs..." will tell you if the DSDT was
- found or not. If you need to update your DSDT, generate a new initramfs and
- perform the steps above. Don't forget that with Lilo, you'll have to re-run it.
- ====================== Here starts initramfs-add-dsdt ==========================
- #!/bin/bash
- # Adds a DSDT file to the initrd (if it's an initramfs)
- # first argument is the name of archive
- # second argument is the name of the file to add
- # The file will be copied as /DSDT.aml
- # 20060126: fix "Premature end of file" with some old cpio (Roland Robic)
- # 20060205: this time it should really work
- # check the arguments
- if [ $# -ne 2 ]; then
- program_name=$(basename $0)
- echo "\
- $program_name: too few arguments
- Usage: $program_name initrd-name.img DSDT-to-add.aml
- Adds a DSDT file to an initrd (in initramfs format)
- initrd-name.img: filename of the initrd in initramfs format
- DSDT-to-add.aml: filename of the DSDT file to add
- " 1>&2
- exit 1
- fi
- # we should check it's an initramfs
- tempcpio=$(mktemp -d)
- # cleanup on exit, hangup, interrupt, quit, termination
- trap 'rm -rf $tempcpio' 0 1 2 3 15
- # extract the archive
- gunzip -c "$1" > "$tempcpio"/initramfs.cpio || exit 1
- # copy the DSDT file at the root of the directory so that we can call it "/DSDT.aml"
- cp -f "$2" "$tempcpio"/DSDT.aml
- # add the file
- cd "$tempcpio"
- (echo DSDT.aml | cpio --quiet -H newc -o -A -O "$tempcpio"/initramfs.cpio) || exit 1
- cd "$OLDPWD"
- # re-compress the archive
- gzip -c "$tempcpio"/initramfs.cpio > "$1"
|