[OpenBIOS] [Qemu-devel] OpenBios in Sparc can't handle long kernel command lines.

Mark Cave-Ayland mark.cave-ayland at ilande.co.uk
Thu Mar 28 20:20:44 CET 2013


On 22/03/13 05:19, Rob Landley wrote:

> If I do this:
>
> qemu-system-sparc -nographic -no-reboot -kernel image -hda hda.sqf
> -append 'root=/dev/sda rw init=/sbin/init.sh panic=1
> PATH=/usr/distcc:/bin:/sbin console=ttyS0 HOST=sparc CPUS=1
> DISTCC_HOSTS=10.0.2.2:31322/1 FTP_SERVER=10.0.2.2 FTP_PORT=31307
> NATIVE_BUILD=lfs-bootstrap ' -hdb hdb.img -hdc lfs-bootstrap.hdc -m 256
>
> qemu goes:
>
> ^[[H^[[JConfiguration device id QEMU version 1 machine id 32
> CPUs: 1 x FMI,MB86904
> Unhandled Exception 0x00000007
> PC = 0xffd07d28 NPC = 0xffd07d2c
> Stopping execution
>
> And then hangs. I've never figured out why it clears the screen first
> (none of the other targets do), but I _have_ figured out that the
> unhandled exception is "kernel command line too long". Because 197 bytes
> is just too much data for Sparc to cope with.

This is actually a bug in OpenBIOS which declares the command line 
storage like this:

static void
arch_init( void )
{
         static char cmdline[128];

         ....

         kernel_cmdline = (const char *) 
fw_cfg_read_i32(FW_CFG_KERNEL_CMDLINE);
         if (kernel_cmdline) {
             size = strlen(kernel_cmdline);
             memcpy(cmdline, kernel_cmdline, size);
             obp_arg.argv[1] = cmdline;
         }
         cmdline[size] = '\0';

         ....
}

Would increasing it to 256 bytes be enough? I can't say I've ever come 
across command lines in a normal environment with more than about 80 
characters, but I don't see an issue with increasing it.


ATB,

Mark.



More information about the OpenBIOS mailing list