Hello everyone,
I am trying to find some ways to port/launch Fiasco.OS into "The Jailhouse
hypervisor" environment using x86_64 architecture.
This hypervisor does not provide any bootloader at all. It
simply loads raw binary on the specified address and launches it in
real mode from this address.
In 'l4/pkg/bootstrap/server/src/README' I found two options
described. I think it might be suitable for me.
3)
bootstrap can boot from real-mode, esp. with
pxelinux, i.e. it can be
booted via PXE. For that it also needs
include all images.
This should also work with syslinux (e.g.
from CDs/DVDs). (Note, grub
can also read is9660 filesystems.)
4)
bootstrap starts from protected mode but
isn't started by a multiboot
compliant loader. Also needs to include all
modules.
So, I started my tries from the 3th option.
Following the bootstrap code, I find out that there is some
piece of code for real mode bootstrapping and the defining of
"REALMODE_LOADING" directive switches it on.
I have tried to compile it with REALMODE_LOADING = 1 (and also
with IMAGE_MODE = 1, and RML = 1), which I added in
'bootstrap/server/src/Makeconf.local' folder.
Also, I commented the row with error command in Makefile.rules:
ifneq ($(REALMODE_LOADING)$(RML),00)
REALMODE_LOADING := 1
#$(error Info: Default reloc needs to be 0x00100000)
# And if you have done so you probably need to relink sigma0
and/or moe
endif
I admit that I did not actually understand the purpose of this
block here.. I would really appreciate if someone explains it to me.
Unfortunately, when I continue to make it without command
mentioned above I've faced with the following compilation error:
[bootstrap] ... Compiling platform/x86_pc.o
/home/coon848/projekt-git-clones/l4re-snap/src/l4/pkg/bootstrap/server/src/platform/x86_pc.cc:
In member function ‘const char*
{anonymous}::Platform_x86_1::cmdline() const’:
/home/coon848/projekt-git-clones/l4re-snap/src/l4/pkg/bootstrap/server/src/platform/x86_pc.cc:73:26:
warning: cast to pointer from integer of different size
[-Wint-to-pointer-cast]
return (char const *)p;
^
/home/coon848/projekt-git-clones/l4re-snap/src/l4/pkg/bootstrap/server/src/platform/x86_pc.cc:
In member function ‘virtual Boot_modules::Module
{anonymous}::Platform_x86_multiboot::module(unsigned int, bool)
const’:
/home/coon848/projekt-git-clones/l4re-snap/src/l4/pkg/bootstrap/server/src/platform/x86_pc.cc:176:64:
error: ‘mbi’ was not declared in this scope
l4util_mb_mod_t *mb_mod =
(l4util_mb_mod_t*)(unsigned long)mbi->mods_addr;
^
/home/coon848/projekt-git-clones/l4re-snap/src/l4/pkg/bootstrap/server/src/platform/x86_pc.cc:
In member function ‘virtual unsigned int
{anonymous}::Platform_x86_multiboot::num_modules() const’:
/home/coon848/projekt-git-clones/l4re-snap/src/l4/pkg/bootstrap/server/src/platform/x86_pc.cc:184:41:
error: ‘mbi’ was not declared in this scope
unsigned num_modules() const { return
mbi->mods_count; }
^
/home/coon848/projekt-git-clones/l4re-snap/src/l4/pkg/bootstrap/server/src/platform/x86_pc.cc:
In member function ‘virtual void
{anonymous}::Platform_x86_multiboot::reserve()’:
/home/coon848/projekt-git-clones/l4re-snap/src/l4/pkg/bootstrap/server/src/platform/x86_pc.cc:190:43:
error: ‘mbi’ was not declared in this scope
regions->add(Region::n((unsigned long)mbi,
^
/home/coon848/projekt-git-clones/l4re-snap/src/l4/pkg/bootstrap/server/src/platform/x86_pc.cc:
In member function ‘virtual void
{anonymous}::Platform_x86_multiboot::move_module(unsigned int,
void*, bool)’:
/home/coon848/projekt-git-clones/l4re-snap/src/l4/pkg/bootstrap/server/src/platform/x86_pc.cc:232:61:
error: ‘mbi’ was not declared in this scope
l4util_mb_mod_t *mod = (l4util_mb_mod_t*)(unsigned
long)mbi->mods_addr + index;
^
/home/coon848/projekt-git-clones/l4re-snap/src/l4/pkg/bootstrap/server/src/platform/x86_pc.cc:
In member function ‘virtual l4util_mb_info_t*
{anonymous}::Platform_x86_multiboot::construct_mbi(long unsigned
int)’:
/home/coon848/projekt-git-clones/l4re-snap/src/l4/pkg/bootstrap/server/src/platform/x86_pc.cc:249:9:
error: ‘mbi’ was not declared in this scope
if (mbi->flags & L4UTIL_MB_CMDLINE)
^
/home/coon848/projekt-git-clones/l4re-snap/src/l4/pkg/bootstrap/server/src/platform/x86_pc.cc:253:9:
error: ‘mbi’ was not declared in this scope
if (mbi->flags & L4UTIL_MB_VIDEO_INFO)
^
/home/coon848/projekt-git-clones/l4re-snap/src/l4/pkg/bootstrap/server/src/platform/x86_pc.cc:263:45:
error: ‘mbi’ was not declared in this scope
total_size += sizeof(l4util_mb_mod_t) *
mbi->mods_count;
^
/home/coon848/projekt-git-clones/l4re-snap/src/l4/pkg/bootstrap/server/src/platform/x86_pc.cc:345:3:
warning: control reaches end of non-void function [-Wreturn-type]
}
^
/home/coon848/projekt-git-clones/l4re-snap/src/l4/pkg/bootstrap/server/src/platform/x86_pc.cc:
In member function ‘virtual unsigned int
{anonymous}::Platform_x86_multiboot::num_modules() const’:
/home/coon848/projekt-git-clones/l4re-snap/src/l4/pkg/bootstrap/server/src/platform/x86_pc.cc:184:58:
warning: control reaches end of non-void function [-Wreturn-type]
unsigned num_modules() const { return
mbi->mods_count; }
^
/
home/coon848/projekt-git-clones/l4re-snap/src/l4/mk/binary.inc:825:
recipe for target 'platform/x86_pc.o' failed
It says that problem is in 'platform/x86_pc.cc'.
So, my question is, does the real mode option switch on like
that or I did something wrong? How should it be done?
And if it is possible to bootstrap without multiboot complaint
loader in protected mode, how should it be compiled?
Thank you in advance.
Sincerely,
Maxim Baryshnikov.