I am trying to boot L4-Linux using the Fiasco
microkernel. The microkernel boots fine, but when L4Linux is booting, in module
chead.c you have the code:
/* create idt */
{
extern long idt_table;
struct
entry_t {unsigned short w0, w1,w2,w3;} ;
struct entry_t
*entries =
(struct entry_t *)((unsigned
long)emu_lib_text +
((unsigned long)&idt_table -
EMULIB_CODE_ADDRESS));
unsigned short int
tmp;
int i;
for (i=0; i<20; i++,
entries++)
{
tmp =
entries->w1;
entries->w1 =
entries->w3;
entries->w3 = tmp;
}
}
My system hangs when it attempts to execute this
code. I understand why you are swapping the shorts in the table (swapping the
offset bytes with the selector bytes) but there are a couple of things I don't
understand Several questions:
1.) Why are you calculating the address of the
table by subtracting out EMULIB_CODE_ADDRESS (Which is 0xA0008000?)
?
2.) How & why is the emulator code moved to
"special page". Where is the "special page" set up since
paging isn't set up until after this code is executed?
3.) Any clue why this is hanging here? I
should have a remote debugger set up soon, but I have -nokdb set and I don't get
any kernel panics or reg dumps. The system just hangs.
Thanks in advance!!
Paul Phillips