sony-vaio-z-series team mailing list archive
-
sony-vaio-z-series team
-
Mailing list archive
-
Message #00684
Arch Linux initrd and acpi_osi
the default arch linux kernel's initrd scripts do not like this quoted string parameter and will not
boot if it is present.
In summary (if you don't care about what's going on) another solution is to put a # on the command
line prior to the acpi_osi flag, as in this example grub 'kernel' line:
kernel /boot/vmlinuz26 root=/dev/sda1 ro vga=773 # acpi_osi="!Windows 2006"
explanation:
the offending code in the initrd's /bin/init script is this for loop:
read CMDLINE </proc/cmdline
...
for cmd in ${CMDLINE}; do
case "${cmd}" in
\#*) break ;; # ignore everything after a # in the commandline
# The kernel passes those to the kernel on its own
[0123456Ss]) ;;
single) ;;
#Allow "init=X" to pass-through
init=*) kinit_params="${kinit_params} ${cmd}" ;;
# only export stuff that does work with dash :)
*=*) cmd="$(replace -s= "${cmd}" '.' '_')"
cmd="$(replace -s= "${cmd}" '-' '_')"
export "${cmd}"
;;
*) cmd="$(replace "${cmd}" '.' '_')"
cmd="$(replace "${cmd}" '-' '_')"
export "${cmd}=y"
;;
esac
done
without that # addition, its the last case match, *, where it finds the 2006" parameter and tries to
export 2006"=y which the shell does not like. then the machine halts :)
Other solutions are building your own kernel without initrd at all, or someone else reported that
you can compile this acpi_osi flag into the kernel and the initrd would no longer process it.
There's a bug in arch to fix this, but it looks like its been there for a while and might be low
priority considering I am the only one that voted for it: http://bugs.archlinux.org/task/13900
I modified the arch /bin/init script to be able to properly handle quoted strings, but then rebooted
with my new initrd and realized their shell is actually dash. I don't know how to do things like
${cmd%\"*} in dash.
so the easiest solution turned out to much easier than all that anyway because there's a match on
the command line argument '#' that breaks from the loop! just drop that in prior to any arguments
you know the export statement won't like/need and...problem solved. I was also worried that the
kernel might complain if it sees a random unexpected hash symbol on its command line, but it doesn't
seem to.
Follow ups