Hello,
Le 01/10/2015 15:15, Michael Brown a écrit :
On 30/09/15 16:43, Patrick Agrain wrote:
I tought that a first step could be to add the PCI_ROM() macro with the
correct IDs, so that the device should be, at least, probed.
The console output let me think that this is even not reached.
Am I missing anything in the procedure ?
Is there a way to increase the debug level ?
<snip>
Booting from ROM...
Booting from c100:0361
iPXE (PCI 00:14.0) starting execution...ok
Note: from here it hangs...
So, it looks as though you may not be successfully reaching main().
This kind of problem is difficult to track down outside of a VM,
unless you have some kind of hardware debugger available.
Though I have a hardware debugger, I'm not able to pick up a location
where to put a breakpoint. This is the code where I hang:
<...>
F000:FF08 0000 ADD byte ptr [BX+SI],AL
F000:FF0A 66E89CACFFFF CALL near32 ptr abac
F000:FF10 6631C0 XOR EAX,EAX
F000:FF13 E6F0 OUT f0,AL
F000:FF15 B020 MOV AL,20
F000:FF17 E6A0 OUT a0,AL
F000:FF19 E620 OUT 20,AL
F000:FF1B 66BA26000000 MOV EDX,00000026
F000:FF21 67668D442402 LEA EAX,dword ptr [ESP]+02
F000:FF27 664A DEC EDX
F000:FF29 67C6041000 MOV byte ptr [EAX][EDX],00
F000:FF2E 6685D2 TEST EDX,EDX
F000:FF31 75F4 JNE short ptr ff27
F000:FF33 67C74424260002 MOV word ptr [ESP]+26,0200
F000:FF3A 66BA87D50000 MOV EDX,0000d587
F000:FF40 660FB7D2 MOVZX EDX,DX
F000:FF44 66E89D9AFFFF CALL near32 ptr 99e7
F000:FF4A 6683C428 ADD ESP,00000028
F000:FF4E 66C3 RETN
F000:FF50 CD19 INT 19
F000:FF52 CB RETF
F000:FF53 CF IRET <------------------------
My recommendation would be to first find the simplest and most
reliable mechanism available for debug output on this board. If you
have a debug I/O port available (similar to port 0xe9 in qemu VMs)
then use that. If you have a text-mode VGA console attached, then try
writing directly to video memory at 0xb8000. You ideally want
something that can work even in the middle of a transition from real
to protected mode.
The target is a Mohon Peak CRB. I will now try to output something on
port 80h for which 7-segments LEDs are foreseen.
Keep you in touch.
Once you have something sufficiently robust, try adding output between
the point that the "ok" is printed (the "call print_message" for
exec_message_post_install in arch/i386/prefix/romprefix.S) and the
point that the "initialising devices" message gets printed (in
core/main.c).
Find out the code portion to check:
<...>
/* Print message indicating successful installation */
movw $exec_message_post_install, %si
xorw %di, %di
call print_message <---- "ok"
/* Set up real-mode stack */
movw %bx, %ss
movw $_estack16, %sp
/* Jump to .text16 segment */
pushw %ax
pushw $1f
lret
.section ".text16", "awx", @progbits
1:
/* Retrieve PCI bus:dev.fn, if applicable */
.ifeqs BUSTYPE, "PCIR"
movw init_pci_busdevfn, %ax
.endif
/* Set up %ds for access to .data16 */
movw %bx, %ds
/* Store PCI bus:dev.fn, if applicable */
.ifeqs BUSTYPE, "PCIR"
#ifdef AUTOBOOT_ROM_FILTER
movw %ax, autoboot_busdevfn
#endif /* AUTOBOOT_ROM_FILTER */
.endif
/* Call main() */
pushl $main
pushw %cs
call prot_call
popl %eax /* discard */
<...>
Michael
Kind regards,
Patrick
_______________________________________________
ipxe-devel mailing list
[email protected]
https://lists.ipxe.org/mailman/listinfo.cgi/ipxe-devel