Thanks for the feedback, everyone.

I know that this is not a lightweight project.

Let me digest for a bit and then discuss with my peeps.


On Thu, Jan 29, 2015 at 7:43 AM, nathan binkert via gem5-dev <
[email protected]> wrote:

> The easiest way to boot windows might be to use the X86 Xen stuff (which is
> working, right?) and use it to run coreboot and the windows bootloader.
> Then at least, you don't have to worry about missing instructions/modes
> during the boot process.
>
>   Nate
>
> On Thu, Jan 29, 2015 at 4:45 AM, Steve Reinhardt via gem5-dev <
> [email protected]> wrote:
>
> > Thanks for all the detailed info, Gabe.
> >
> > Mike, you're right that the current SE mode code is pretty specific to
> > Linux.  It would be a small to moderate amount of effort to support other
> > Unix-like OSes like one of the BSDs (in fact our originally support for
> DEC
> > Tru64 on Alpha is still in there). Doing an SE-mode for Windows apps
> would
> > be basically starting over with the system call emulation code, though,
> and
> > would entail writing emulated versions of all the syscalls your apps use.
> > As many caveats as Gabe mentioned about getting Windows up in FS mode, I
> > would guess that doing SE mode would be even more work and require even
> > deeper access to proprietary Microsoft information (and thus end up being
> > something that you'd be far less likely to be able to contribute back to
> > the public code base).
> >
> > Steve
> >
> > On Thu, Jan 29, 2015 at 1:38 AM, Gabe Black via gem5-dev <
> > [email protected]>
> > wrote:
> >
> > > Hi Mike. When we boot Linux on gem5, the simulator acts as the
> > bootloader.
> > > It unpacks the kernel, provides various tables in memory that would
> > > normally be provided by the BIOS/firmware, does some setup of machine
> > > state, and then jumps to the kernel. On a real system, the components
> > that
> > > get you to that point look more like this:
> > >
> > > 1. The CPU starts running firmware at a well defined address. If MP is
> > > supported (and it has been for a long, long time) then there's a little
> > > dance that's supposed to happen so that the CPUs figure out where
> > everybody
> > > is and who's the main CPU.
> > > 2. The other CPUs (the APs or application processors) go to sleep,
> > waiting
> > > for the main CPU (the BP, or bootstrap processor) to wake them up and
> > tell
> > > them to do something. The BP continues executing in the firmware which
> > > begins machine initialization.
> > > 3. The firmware goes through it's paces, creating various tables for
> > > consumption by later software. It can support several different
> standards
> > > for booting off of different types of media. Harddrives will boot using
> > > code in the first little bit of the drive, I forget exactly what floppy
> > > disks do but I think it's similar, etc.
> > > 4. When you're booting linux, at this point your favorite bootloader,
> > > frequently grub, will start running since it's what was actually in the
> > > magic location on the disk. That goes through it's own procedure to get
> > > itself loaded, including grabbing additional parts of itself off of the
> > > remainder of the disk.
> > > 5. Grub (as an example) will follow the instructions in its config to
> > find
> > > a kernel. It will follow a well established boot protocol where it
> takes
> > a
> > > data structure stored in what's called the zero page from the front of
> > the
> > > kernel image and fills in parts of it that are missing. It then puts
> that
> > > and the kernel where it wants to be in memory (generally specified in
> > that
> > > data structure) and starts executing it.
> > > 6. The start of the kernel is generally a stub which decompresses the
> > rest
> > > of the image which is actually the kernel, and the stub then jumps to
> it.
> > >
> > > Again, in gem5, we short circuit all that and skip right to the end. We
> > > actually load a kernel image which has not been compressed so that we
> can
> > > use an ELF loader on it and don't have to have it decompress itself in
> > > simulation.
> > >
> > > If you wanted to boot windows, I think it generally will want to start
> > > running around where grub starts running. You can start windows from
> > grub,
> > > but when you do you use a mechanism called chain loading where it
> > basically
> > > gets windows ready and then jumps to it as if grub hadn't run at all.
> > > Windows is non the wiser and starts running like normal.
> > >
> > > If you wanted to boot windows like we boot Linux, you'd need to get at
> > the
> > > part of windows that their boot strap process actually sets up, figure
> > out
> > > what work it does, and then get gem5 to do it. My assumption is that
> > that's
> > > basically impossible unless you work at Microsoft, and even then is
> > > probably quite difficult.
> > >
> > > Another option would be to make gem5 boot more like a real system.
> You'd
> > > need some firmware to act as the BIOS (or at least fake it within gem5
> > > itself), and you'd probably want to load windows off of the actual disk
> > (or
> > > let the firmware do it) and start it using the standard PC boot
> > mechanism.
> > > Writing a real BIOS for a real computer is very, very, very, very
> > > complicated, but writing a BIOS for a fake computer is significantly
> > > easier. If you want a reference, you can look at the BIOS
> implementation
> > > QEMU uses. There are also differences between a traditional BIOS
> > > implementation like you'd have found in older PCs, and EFI which you'd
> > find
> > > on newer systems. EFI is probably a lot harder to fake since it's a lot
> > > bigger and more complex, so if you can get away with looking like a
> > regular
> > > BIOS you're life might be a lot easier. More recent versions of windows
> > may
> > > require EFI, or they may just require it to put a sticker on the case
> > that
> > > says windows. You're mileage may vary.
> > >
> > > All in all, I think it might be a significant challenge to get windows
> > > running under gem5. You could probably do it, but beyond the difficult
> of
> > > getting it started, realistically you're also likely to run into bugs
> in
> > > gem5 itself. If you do, it might be really hard to debug them since you
> > > don't know what windows is trying to do since you can't (I assume) look
> > at
> > > its source. It would be really neat if you get it to work, but I
> wouldn't
> > > want you to jump into this without warning you what you were taking on.
> > >
> > > Good luck!
> > >
> > > Gabe
> > >
> > > On Wed, Jan 28, 2015 at 10:26 PM, mike upton via gem5-dev <
> > > [email protected]
> > > > wrote:
> > >
> > > > I was going down 2 parallel paths.
> > > >
> > > > SE (win on win), and FS (on whatever works).
> > > > I have pretty much given up on the SE windows mode.
> > > > For now at least.
> > > >
> > > > I may revisit once cygwin/mingw support C11.
> > > > Even then, there are a lot of linux-isms built into the simulator.
> > > >
> > > >
> > > >
> > > > On Wed, Jan 28, 2015 at 10:14 PM, nathan binkert via gem5-dev <
> > > > [email protected]> wrote:
> > > >
> > > > > I have a question.  If you're trying to simulate a windows guest
> on a
> > > > linux
> > > > > host.  What are you doing with cygwin?
> > > > >
> > > > > On Wed, Jan 28, 2015 at 8:05 PM, mike upton via gem5-dev <
> > > > > [email protected]>
> > > > > wrote:
> > > > >
> > > > > > I would like to get started on trying to simulate a windows x86
> > > machine
> > > > > (on
> > > > > > top of a linux host).
> > > > > > I am not too picky about type at this point, XP, win7 or win8.1
> > would
> > > > all
> > > > > > be acceptable.
> > > > > >
> > > > > > I spent quite a while trying to get gem5 compiled under cygwin,
> but
> > > it
> > > > is
> > > > > > currently broken because of a lack of C11 support in the gcc
> stack
> > on
> > > > > > windows.
> > > > > >
> > > > > > I don’t really know how to get started.
> > > > > >
> > > > > > My understanding is that windows requires a USB device to be
> > present.
> > > > > > So it seem like the first step is to get that going.
> > > > > >
> > > > > > Any pointers on how to proceed?
> > > > > > Is there any kind of OS bringup documentation. I searched and did
> > not
> > > > > find
> > > > > > anything.
> > > > > >
> > > > > >
> > > > > > I was able to bring up win8.1 on qemu+kvm without much
> difficulty,
> > > so I
> > > > > am
> > > > > > hopeful.
> > > > > >
> > > > > > Thanks,
> > > > > >
> > > > > > Mike
> > > > > > _______________________________________________
> > > > > > gem5-dev mailing list
> > > > > > [email protected]
> > > > > > http://m5sim.org/mailman/listinfo/gem5-dev
> > > > > >
> > > > > _______________________________________________
> > > > > gem5-dev mailing list
> > > > > [email protected]
> > > > > http://m5sim.org/mailman/listinfo/gem5-dev
> > > > >
> > > > _______________________________________________
> > > > gem5-dev mailing list
> > > > [email protected]
> > > > http://m5sim.org/mailman/listinfo/gem5-dev
> > > >
> > > _______________________________________________
> > > gem5-dev mailing list
> > > [email protected]
> > > http://m5sim.org/mailman/listinfo/gem5-dev
> > >
> > _______________________________________________
> > gem5-dev mailing list
> > [email protected]
> > http://m5sim.org/mailman/listinfo/gem5-dev
> >
> _______________________________________________
> gem5-dev mailing list
> [email protected]
> http://m5sim.org/mailman/listinfo/gem5-dev
>
_______________________________________________
gem5-dev mailing list
[email protected]
http://m5sim.org/mailman/listinfo/gem5-dev

Reply via email to