On Mon, 11 Sep 2006, David Härdeman wrote: > I've attached a new version of the script (which I haven't had time to > test yet). It should work properly with builtin or modular fb drivers > and also support the extra options which can be passed to fb modules via > the kernel command line.
ok thanks! > -- > David Härdeman > #!/bin/sh > > PREREQ="" > prereqs() > { > echo "$PREREQ" > } > case $1 in > # get pre-requisites > prereqs) > prereqs > exit 0 > ;; > esac > > parse_kernel_opts() i'll make that parse_video_opts() as it's specific to that, rootnfs opts are very different for example. > { > local OPTS="$1" > local IFS="," > > # Must be a line like video=<fbdriver>:<opt1>,[opt2]... > if [ "$OPTS" = "${OPTS%%:*}" ]; then > return > fi > OPTS="${OPTS#*:}" > > # The options part of the kernel "video=" argument (i.e. everyting > # after "video=<fbdriver>:") has very inconsistent rules. > # > # Generally the following applies: > # 1) options are comma-separated > # 2) options can be in either of these three forms: > # <arg>=<value> > # <arg>:<value> > # <boolean-arg> > # 3) the "mode" option has the form > <xres>x<yres>[M][R][-<bpp>][@<refresh>][i][m] > # and may or may not start with "mode=" > # > # When the options are used with modules, they need to be > space-separated > # and the following conversions are needed: > # <arg>:<value> -> <arg>=<value> > # <boolean-arg> -> <boolean-arg>=1 > # <modevalue> -> mode=<modevalue> > > for opt in $OPTS; do > if [ "$opt" != "${opt#*=}" ]; then > # Already in the "<arg>=<value>" form > echo -n "$opt " > elif [ "$opt" != "${opt#[[:digit:]]*x[[:digit:]]}"; then > # Sadly no regexps are available > # but presumably a modevalue without the "mode=" prefix > echo -n "mode=$opt " you can use printf as regex replacement, it's both in dash as in ash, see load_modules() from scripts/functions > else > # Presumably a boolean > echo -n "$opt=1 " > fi > done > } > > FB="" > OPTS="" > > for x in $(cat /proc/cmdline); do > case $x in > splash*) > # Let the other options take precedent > if [ -z "$FB" ]; then > FB="vga16fb" > OPTS="" > fi > ;; > vga=*) > FB="vesafb" > OPTS="" > ;; > video=*) > TMP=${x#*=} > FB="${TMP%%:*}" > OPTS="$(parse_kernel_opts "$TMP")" > ;; > esac > done > > if [ -n "$FB" ]; then > modprobe -q $FB $OPTS > fi > > if [ -e /proc/fb ]; then > while read fbno desc; do > mknod /dev/fb$fbno 29 $fbno > done < /proc/fb > > for i in 0 1 2 3 4 5 6 7 8; do > mknod /dev/tty$i c 4 $i > done > fi i'll test it out for the 0.80 release, seems very valuable indeed. -- maks