From 71fc47a9adf8ee89e5c96a47222915c5485ac437 Mon Sep 17 00:00:00 2001 From: Markus Gaugusch Date: Tue, 5 Feb 2008 00:04:06 +0100 Subject: ACPI: basic initramfs DSDT override support The basics of DSDT from initramfs. In case this option is selected, populate_rootfs() is called a bit earlier to have the initramfs content available during ACPI initialization. This is a very similar path to the one available at http://gaugusch.at/kernel.shtml but with some update in the documentation, default set to No and the change of populate_rootfs() the "Jeff Mahony way" (which avoids reading the initramfs twice). Signed-off-by: Thomas Renninger Signed-off-by: Eric Piel Signed-off-by: Len Brown --- Documentation/acpi/dsdt-initrd.txt | 99 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 99 insertions(+) create mode 100644 Documentation/acpi/dsdt-initrd.txt (limited to 'Documentation/acpi') diff --git a/Documentation/acpi/dsdt-initrd.txt b/Documentation/acpi/dsdt-initrd.txt new file mode 100644 index 00000000000..736043359df --- /dev/null +++ b/Documentation/acpi/dsdt-initrd.txt @@ -0,0 +1,99 @@ +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" -- cgit v1.2.3 From d89e9d6b4930c6505ac3ed35f57ab7f4311d6cf6 Mon Sep 17 00:00:00 2001 From: Len Brown Date: Wed, 6 Feb 2008 19:28:02 -0500 Subject: ACPI: update DSDT override documentation Signed-off-by: Len Brown --- Documentation/acpi/dsdt-initrd.txt | 99 -------------------------------- Documentation/acpi/dsdt-override.txt | 15 +++++ Documentation/acpi/initramfs-add-dsdt.sh | 43 ++++++++++++++ 3 files changed, 58 insertions(+), 99 deletions(-) delete mode 100644 Documentation/acpi/dsdt-initrd.txt create mode 100644 Documentation/acpi/dsdt-override.txt create mode 100755 Documentation/acpi/initramfs-add-dsdt.sh (limited to 'Documentation/acpi') diff --git a/Documentation/acpi/dsdt-initrd.txt b/Documentation/acpi/dsdt-initrd.txt deleted file mode 100644 index 736043359df..00000000000 --- a/Documentation/acpi/dsdt-initrd.txt +++ /dev/null @@ -1,99 +0,0 @@ -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" diff --git a/Documentation/acpi/dsdt-override.txt b/Documentation/acpi/dsdt-override.txt new file mode 100644 index 00000000000..5008f256a2d --- /dev/null +++ b/Documentation/acpi/dsdt-override.txt @@ -0,0 +1,15 @@ +Linux supports two methods of overriding the BIOS DSDT: + +CONFIG_ACPI_CUSTOM_DSDT builds the image into the kernel. + +CONFIG_ACPI_CUSTOM_DSDT_INITRD adds the image to the initrd. + +When to use these methods is described in detail on the +Linux/ACPI home page: +http://www.lesswatts.org/projects/acpi/overridingDSDT.php + +Note that if both options are used, the DSDT supplied +by the INITRD method takes precedence. + +Documentation/initramfs-add-dsdt.sh is provided for convenience +for use with the CONFIG_ACPI_CUSTOM_DSDT_INITRD method. diff --git a/Documentation/acpi/initramfs-add-dsdt.sh b/Documentation/acpi/initramfs-add-dsdt.sh new file mode 100755 index 00000000000..17ef6e838e1 --- /dev/null +++ b/Documentation/acpi/initramfs-add-dsdt.sh @@ -0,0 +1,43 @@ +#!/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" + -- cgit v1.2.3