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.

_______________________________________________
Mailing list: https://launchpad.net/~sony-vaio-z-series
Post to     : sony-vaio-z-series@lists.launchpad.net
Unsubscribe : https://launchpad.net/~sony-vaio-z-series
More help   : https://help.launchpad.net/ListHelp

Reply via email to