Yes, I agree with that. Gabe
On Thu, Jan 29, 2015 at 4:45 AM, Steve Reinhardt via gem5-dev < gem5-dev@gem5.org> 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 < > gem5-dev@gem5.org> > 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 < > > gem5-dev@gem5.org > > > 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 < > > > gem5-dev@gem5.org> 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 < > > > > gem5-dev@gem5.org> > > > > 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 > > > > > gem5-dev@gem5.org > > > > > http://m5sim.org/mailman/listinfo/gem5-dev > > > > > > > > > _______________________________________________ > > > > gem5-dev mailing list > > > > gem5-dev@gem5.org > > > > http://m5sim.org/mailman/listinfo/gem5-dev > > > > > > > _______________________________________________ > > > gem5-dev mailing list > > > gem5-dev@gem5.org > > > http://m5sim.org/mailman/listinfo/gem5-dev > > > > > _______________________________________________ > > gem5-dev mailing list > > gem5-dev@gem5.org > > http://m5sim.org/mailman/listinfo/gem5-dev > > > _______________________________________________ > gem5-dev mailing list > gem5-dev@gem5.org > http://m5sim.org/mailman/listinfo/gem5-dev > _______________________________________________ gem5-dev mailing list gem5-dev@gem5.org http://m5sim.org/mailman/listinfo/gem5-dev