qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Qemu-devel] [PATCH 0/3] Attempting to run Microport UNIX (ca 1987)


From: Markus Armbruster
Subject: Re: [Qemu-devel] [PATCH 0/3] Attempting to run Microport UNIX (ca 1987)
Date: Mon, 30 Jul 2012 14:29:31 +0200
User-agent: Gnus/5.13 (Gnus v5.13) Emacs/24.1 (gnu/linux)

Matthew Ogilvie <address@hidden> writes:

> On Sat, Jul 28, 2012 at 08:33:54AM +0200, Markus Armbruster wrote:
>> Matthew Ogilvie <address@hidden> writes:
> [...]
>> >   1. It doesn't seem to recognize the hard drive geometry, even
>> >      if I use "-hdachs" and keep it carefully inside ancient
>> >      limitations.  Note that at the time, hard drives did not support
>> >      self-identification commands for the geometry; you had to
>> >      configure it in BIOS.   I also have some old notes from when my
>> >      dad was asking Microport about compatibility; apparently
>> >      they wanted to know the specific BIOS version in order to
>> >      decide about compatibility.  Maybe UNIX is bypassing later
>> >      standards for looking up geometry, and trying to get it in
>> >      some non-standard way (straight from CMOS or something?)
>> 
>> Please run QEMU with -trace events=trace-events, where trace-events is a
>> file containing the line "hd_geometry_*".  Post results, along with your
>> full command line.
>> 
>> [...]
>
> Thanks for the suggestion.  I've narrowed down a couple of problems
> based on it:
>
> First, the -hdachs command line option is silently ignored depending
> on its relative order compared to other command line options.  I've
> attached a patch below.

Recommend to post patches with Subject: [PATCH] ..., so that maintainers
spot them.

> ----
>
> Second, this UNIX kernel and/or bootloader always seems to think
> it has 17 sectors per track, no matter what I tell qemu (using a blank
> image; no partition table).  But UNIX does recognize the number
> of cylinders and heads correctly, and I've verified that
> the number of sectors per track is also correct in the fixed disk
> parameter table, by using the monitor's "x" (examine) command. 
>
> Potentially guess_chs_for_size() could be enhanced to return 17
> for small drive images when appropriate, to be consistent with most
> legacy drives having 17.  Or maybe there is some more
> obscure way to get UNIX to recognize non-17 sectors.
> Or either document a third party way to put a basic partition table
> on a new image, or add that ability to qemu-img, so that code
> like that in guess_disk_lchs() or similar code that might exist
> in some operating systems would have something to work with.
> I also found a 1988 posting that suggests some leads for
> further investigation:
> http://www.megalextoria.com/usenet-archive/news076f1/b96/comp/unix/microport/00000798.html
>
> But I'm not really inclined to worry much more about this
> right now, because I have a usable workaround: Always define
> my disk image size to be consistent with 17 sectors per
> track, and tell qemu to use 17.

Yes, that's best.

> ----
>
> (Now if I can just figure out what's up with the sporadic panic
> in UNIX's interrupt handlers...)
>
> ----
>
> From: Matthew Ogilvie <address@hidden>
> Date: Sat, 28 Jul 2012 17:01:14 -0600
> Subject: [PATCH] vl.c: fix -hdachs/-hda argument order parsing issues
>
> Without this patch, the -hdachs argument had to occur either
> BEFORE the corresponding "-hda" option, or AFTER the plain
> disk image name (if neither -hda nor -drive is used).  Otherwise
> it would effectively be ignored.
>
> Option -hdachs still has no effect on -drive, but that seems
> reasonable.

Pretty sure it's intentional.

> Signed-off-by: Matthew Ogilvie <address@hidden>
> ---
>  vl.c | 15 +++++++++++++--
>  1 file changed, 13 insertions(+), 2 deletions(-)
>
> diff --git a/vl.c b/vl.c
> index c18bb80..e0611eb 100644
> --- a/vl.c
> +++ b/vl.c
> @@ -2374,7 +2374,18 @@ int main(int argc, char **argv, char **envp)
>          if (optind >= argc)
>              break;
>          if (argv[optind][0] != '-') {
> -         hda_opts = drive_add(IF_DEFAULT, 0, argv[optind++], HD_OPTS);
> +            char buf[256];
> +            if (cyls == 0)
> +                snprintf(buf, sizeof(buf), "%s", HD_OPTS);
> +            else
> +                snprintf(buf, sizeof(buf),
> +                         "%s,cyls=%d,heads=%d,secs=%d%s",
> +                         HD_OPTS , cyls, heads, secs,
> +                         translation == BIOS_ATA_TRANSLATION_LBA ?
> +                         ",trans=lba" :
> +                         translation == BIOS_ATA_TRANSLATION_NONE ?
> +                         ",trans=none" : "");
> +            hda_opts = drive_add(IF_DEFAULT, 0, argv[optind++], buf);
>          } else {
>              const QEMUOption *popt;
>  

I suspect this was broken in commit e4bcb14c, Dec 2007.  Makes me doubt
-hdachs is used much.

Duplicates the code under case QEMU_OPTION_hda.  Should be factored out.

> @@ -2404,7 +2415,7 @@ int main(int argc, char **argv, char **envp)
>                                   ",trans=lba" :
>                                   translation == BIOS_ATA_TRANSLATION_NONE ?
>                                   ",trans=none" : "");
> -                    drive_add(IF_DEFAULT, 0, optarg, buf);
> +                    hda_opts = drive_add(IF_DEFAULT, 0, optarg, buf);
>                      break;
>                  }
>              case QEMU_OPTION_hdb:

This part fixes up commit 5645b0f4.



reply via email to

[Prev in Thread] Current Thread [Next in Thread]