linuxbios on geode gx1 with sst-39SF020A and CompactFlash [PMX:#]

ramesh bios ramesh_bios at yahoo.com
Mon Jan 10 21:43:00 CET 2005


Ok. So I took a look at the code to figure out why the
last output that I see is "Jumping to LinuxBIOS".

My assembly is weak so I'd appreciate corrections to
my interpretation of the asm below.

decompr_end_n2b:
        movb $0x12, %al ; outb %al, $0x80
        movl %esp, %ebp
        mov $str_pre_main, %ebx ; lea 0f, %esp ; jmp
console_tx_string ; 
0:
        leal _iseg, %edi
        jmp %edi

This suggests to me that since the console_tx_string
succesfully wrote to the serial port, that leal _iseg,
%edi; jmp %edi is the area of my problem.

looking at _iseg, by dumping crt0.o, i see:

00000aab <decompr_end_n2b>:
 aab:   b0 12                   mov    $0x12,%al
 aad:   e6 80                   out    %al,$0x80
 aaf:   89 e5                   mov    %esp,%ebp
 ab1:   bb 1c 00 00 00          mov    $0x1c,%ebx
 ab6:   8d 25 c1 0a 00 00       lea    0xac1,%esp
 abc:   e9 fa f7 ff ff          jmp    2bb
<console_tx_string>
 ac1:   8d 3d 00 00 00 00       lea    0x0,%edi
 ac7:   ff e7                   jmp    *%edi
 ac9:   b0 ee                   mov    $0xee,%al
 acb:   e6 80                   out    %al,$0x80
 acd:   f4                      hlt
 ace:   eb f9                   jmp    ac9
<decompr_end_n2b+0x1e>

i was surprised by the lea 0x0, %edi; jmp *%edi. but
then i figured _iseg might get defined later by the
ldscript.

i see that the i386 config sets _iseg to _RAMBASE. and
that was set to 0x4000 in another i386 default. so
dumping linuxbios shows:

000f0aab <decompr_end_n2b>:
   f0aab:       b0 12                   mov   
$0x12,%al
   f0aad:       e6 80                   out   
%al,$0x80
   f0aaf:       89 e5                   mov   
%esp,%ebp
   f0ab1:       bb ec 0a 0f 00          mov   
$0xf0aec,%ebx
   f0ab6:       8d 25 c1 0a 0f 00       lea   
0xf0ac1,%esp
   f0abc:       e9 fa f7 ff ff          jmp    f02bb
<console_tx_string>
   f0ac1:       8d 3d 00 40 00 00       lea   
0x4000,%edi
   f0ac7:       ff e7                   jmp    *%edi
   f0ac9:       b0 ee                   mov   
$0xee,%al
   f0acb:       e6 80                   out   
%al,$0x80
   f0acd:       f4                      hlt
   f0ace:       eb f9                   jmp    f0ac9
<decompr_end_n2b+0x1e>

that _iseg looks better now. so next, i need to figure
out what ought to be at 0x4000. looking at __main
since that's where the copying to ram serial output
comes from, i see a mov f0ad0,ebx, output, then lea
0x4000,%edi. and a 0xf0b14 into %esi. we then jump to
dcl1_n2b. i don't really understand the code there.
but i think that looks like it's copying f0b14 to
4000. i think that's what the movsb 
%ds:(%esi),%es:(%edi) is doing. i wonder when that
loop terminates. 

i guess i must be wrong here, f0b14, is after
_binary_linuxbios_payload_start. i doubt we're
supposed to be jumping to filo at that point. i was
expecting pci initialization, other stuff and then
filo to come in and read the kernel elf from an ext2
partition from the ide (CompactFlash) device. are
those assumptions valid?

ok. i ought to reread the code. i suspect that most
likely i've got misprogrammed sdram or something like
that. in the meantime, if anyone's got
suggestions/advice, i'm all ears.

000f09f2 <__main>:
   f09f2:       bb d0 0a 0f 00          mov   
$0xf0ad0,%ebx
   f09f7:       8d 25 02 0a 0f 00       lea   
0xf0a02,%esp
   f09fd:       e9 b9 f8 ff ff          jmp    f02bb
<console_tx_string>
   f0a02:       b0 11                   mov   
$0x11,%al
   f0a04:       e6 80                   out   
%al,$0x80
   f0a06:       fc                      cld
   f0a07:       8d 35 14 0b 0f 00       lea   
0xf0b14,%esi
   f0a0d:       8d 3d 00 40 00 00       lea   
0x4000,%edi
   f0a13:       89 ec                   mov   
%ebp,%esp
   f0a15:       bd ff ff ff ff          mov   
$0xffffffff,%ebp
   f0a1a:       eb 05                   jmp    f0a21
<dcl1_n2b>

000f0a1c <decompr_literals_n2b>:
   f0a1c:       a4                      movsb 
%ds:(%esi),%es:(%edi)

000f0a1d <decompr_loop_n2b>:
   f0a1d:       01 db                   add   
%ebx,%ebx
   f0a1f:       75 07                   jne    f0a28
<dcl2_n2b>

000f0a21 <dcl1_n2b>:
   f0a21:       8b 1e                   mov   
(%esi),%ebx
   f0a23:       83 ee fc                sub   
$0xfffffffc,%esi
   f0a26:       11 db                   adc   
%ebx,%ebx

000f0a28 <dcl2_n2b>:
   f0a28:       72 f2                   jb     f0a1c
<decompr_literals_n2b>
   f0a2a:       31 c0                   xor   
%eax,%eax
   f0a2c:       40                      inc    %eax

--- ramesh bios <ramesh_bios at yahoo.com> wrote:

> Hi Ron,
> 
> Just wanted to report that your suggestion was
> excellent. I'm now getting serial output saying
> "Jumping to LinuxBIOS". It took only a few minutes
> to
> get this working so I was pleasantly surprised. :-)
> Thanks! 
> 
> Ok, I'm now going to read a bit more about x86
> booting
> and figure out what's next and what the memory
> output
> means.
> 
> LinuxBIOS-1.0.0 Tue Jan 11 06:22:00 IST 2005
> starting...
> Setting up default parameters for memory
> Sizing memory
> Probing for DIMM0
> Probing for DIMM1
>     Found DIMM1
>     Page Size:       00001000
>     Component Banks: 4
>     Module Banks:    2
>     DIMM size:       08000000
> Memory sizing done, MC_BANK_CFG = 0x55200070
> Copying LinuxBIOS to ram.
> Jumping to LinuxBIOS.
> 
> Thanks all!
> 
> 
> 
> --- "Ronald G. Minnich" <rminnich at lanl.gov> wrote:
> 
> > your plan is fine. use the advantech pcm5823 as a
> > model board, and use 
> > freebios, not freebios2.
> > 
> > Don't fit linux into the flash. Use filo and boot
> > linux from a hard drive. 
> > 
> > Keep me posted on how it goes and good luck. 
> > 
> > ron
> > _______________________________________________
> > Linuxbios mailing list
> > Linuxbios at clustermatic.org
> >
>
http://www.clustermatic.org/mailman/listinfo/linuxbios
> > 
> 
> 
> 
> 		
> __________________________________ 
> Do you Yahoo!? 
> Yahoo! Mail - 250MB free storage. Do more. Manage
> less. 
> http://info.mail.yahoo.com/mail_250
> _______________________________________________
> Linuxbios mailing list
> Linuxbios at clustermatic.org
>
http://www.clustermatic.org/mailman/listinfo/linuxbios
> 






		
__________________________________ 
Do you Yahoo!? 
Read only the mail you want - Yahoo! Mail SpamGuard. 
http://promotions.yahoo.com/new_mail 



More information about the coreboot mailing list