> I'm not sure how far you've gotten since saturday, but it sound to me like
> you are almost there. I have set up a system to boot Linux from a flash.
> From your descriptions, I believe you are on the right track. Before
> jumping to Linux at 0x1000 for .....
Not far!
I still have seveere trouble in starting the kernel ...
from the firmware/init/main.c I am loading a vmlinux (1.2megs,
uncompressed) image into my memory at 0x100000.
I found out that the code in head.S is at offset 0x1000 inside the
image. So I jump to 0x101000. That works.
I modified the file:
kernel/head.S: to notify me if I reached the head code:
/* this is my dummycode ... to see if kernel starts
.asciz "This is the kernel image entry point\n" << I used
this to verify that I dont load garbage into RAM ...
Fallback from Protected mode into Realmode, CLR PE1
*/
movl %cr0,%eax
andl $0xfffffffe,%eax
movl %eax,%cr0
jmp flush
flush:
mov $0x3f8,%dx //here i give a char out to the uart
(cause I dont have anything else to talk)
mov $0x59,%al
out %al ,%dx
>>>>> until here everything works fine. but then ...
cld
movl $(__KERNEL_DS),%eax
movl %ax,%ds
movl %ax,%es
movl %ax,%fs
movl %ax,%gs
#ifdef __SMP__
orw %bx,%bx
jz 1f
...
...
a bit later it should do: (same file)
xorl %eax,%eax
lldt %ax
cld # gcc2 wants the direction flag cleared at
all times
call SYMBOL_NAME(start_kernel)
L6:
jmp L6 # main should never return here, but
# just in case, we know what happens.
...
therefore I expected to see the message i have put in
/usr/src/linux/init/main.c : start_kernel(void)
asmlinkage void __init start_kernel(void)
{
char * command_line;
int i;
#ifdef __SMP__
static int boot_cpu = 1;
/* "current" has been set up, we need to load it now */
if (!boot_cpu)
initialize_secondary();
boot_cpu = 0;
#endif
/*
* Interrupts are still disabled. Do necessary setups, then
* enable them
say that were here already ...
*/
outb(0x58,0x03f8);
for (i=0; i<0x0fff; i++);
printk(linux_banner);
....
....
but somewhere inbetween the machine stops. I cannot see my second char on
the uart. I dont have an in-circuit debugger
and since I´m not the prophet I dont know why and where it crashes ...
Any ideas on that ??
btw. sorry for the lots of code i sent, but like that it was easier to show
where I got stuck ...
greetings, Jake.
-
To unsubscribe: send mail to majordomo(a)freiburg.linux.de
with 'unsubscribe openbios' in the body of the message