forked from torvalds/linux
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
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 <[email protected]> Signed-off-by: Eric Piel <[email protected]> Signed-off-by: Len Brown <[email protected]>
- Loading branch information
Showing
5 changed files
with
199 additions
and
5 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -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" |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters