ubuntuusers.de

Custom DSDT with Grub 2 (09_linux_dsdt)

Datum:
8. Februar 2012 20:00
Code:
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
--- 10_linux	2011-10-01 14:40:35.000000000 +0200
+++ 09_linux_dsdt	2012-02-08 19:42:17.800478439 +0100
@@ -23,6 +23,14 @@
 libdir=${exec_prefix}/lib
 . ${libdir}/grub/grub-mkconfig_lib
 
+GRUB_CUSTOM_ACPI="/boot/dsdt.aml"
+if [ x${GRUB_CUSTOM_ACPI} != x ] && [ -f ${GRUB_CUSTOM_ACPI} ] \
+        && is_path_readable_by_grub ${GRUB_CUSTOM_ACPI}; then
+    echo "Found custom ACPI table: ${GRUB_CUSTOM_ACPI}" >&2
+else
+	exit 0
+fi
+
 export TEXTDOMAIN=grub
 export TEXTDOMAINDIR=${prefix}/share/locale
 
@@ -87,7 +95,7 @@
   else
     title="$(gettext_quoted "%s, with Linux %s")"
   fi
-  printf "menuentry '${title}' ${CLASS} {\n" "${os}" "${version}"
+  printf "menuentry '${title}, fixed DSDT' ${CLASS} {\n" "${os}" "${version}"
   cat << EOF
 	recordfail
 EOF
@@ -121,6 +129,9 @@
 EOF
   fi
   cat << EOF
+	acpi (\$root)`make_system_path_relative_to_its_root ${GRUB_CUSTOM_ACPI}`
+EOF
+  cat << EOF
 	linux	${rel_dirname}/${basename} root=${linux_root_device_thisversion} ro ${args}
 EOF
   if test -n "${initrd}" ; then
@@ -186,7 +197,7 @@
 in_submenu=false
 while [ "x$list" != "x" ] ; do
   linux=`version_find_latest $list`
-  echo "Found linux image: $linux" >&2
+  echo "Found linux image: $linux (with fixed DSDT)" >&2
   basename=`basename $linux`
   dirname=`dirname $linux`
   rel_dirname=`make_system_path_relative_to_its_root $dirname`
@@ -244,7 +255,7 @@
   list=`echo $list | tr ' ' '\n' | grep -vx $linux | tr '\n' ' '`
 
   if [ "$list" ] && ! $in_submenu; then
-    echo "submenu \"Previous Linux versions\" {"
+    echo "submenu \"Previous Linux versions, with fixed DSDT\" {"
     in_submenu=:
   fi
 done