raw_idt_notify on i386ex
Juergen Zeller
juergen.zeller at argovision.de
Mon Feb 16 07:20:46 UTC 2004
Joel Sherrill schrieb:
> Juergen Zeller wrote:
>
>> Hello all, please help, I get frustrated!
>>
>> I'm not very experienced in BSP-porting and I have to run RTEM 4.6.0
>> on a specific board with an intel i386ex, 512k flash, 1M Ram. I'm not
>> able to run the hello sample. The initialisation stops with the
>> message 'raw_idt_notify has been called' after the _Context_Switch.
>> The init - task never gets reached.
>> When I try to run the ticker sample I also get the message
>> 'raw_idt_notify has been called'. I read in the list that this should
>> be some interrupt problem but how can I figure it out? I changed the
>> console driver for simply polling data out via sio1, therefore the
>> clock driver should be the only interrupt source. A furher printk
>> tells me that my clock isr gets invoked. I figured out that the
>> raw_idt_notify is called by exception 6.
>> I thought the interrupt setting should be ok if my isr gets invoked?
>> The hello sample uses no clock driver. What goes wrong here?
>
>
> Exception 6 is an illegal instruction. So the question is what
> instruction is at the faulting address?
>
> It might be as simple as you are compiling the BSP with the wrong
> CPU flags to gcc and getting code that this CPU cannot handle.
> Or it could be a piece of assembly that is using some instruction
> that is not there. My guess is the former.
>
> As a learning point, the fact that a message indicating exception 6
> occurred was a BIG hint. :)
>
> --joel
>
>>
>> regards
>>
>> juergen
>>
>>
>>
>
>
>
>
Hello Joel,
sorry for the late answer and thank you for your help.
the problem was the following definition in linkcmds
.init : { _init = .; *(.init) } = 0x9090
.fini : { _fini = .; *(.fini) } = 0x9090
I took this out of the i386ex BSP-linkcmds to avoid compiling error and
forgot this. As I understood the 0x9090 is just twice nop and without
definition of .init and .fini section in start.S there must be executed
an illegal instruction somewhere behind. Am I right?
But why is the Macro __USE_INIT_FINI__ defined per default? Whatfor is
it used and how can I compile without this macro? I simply comment out
the code with the macro and everything works fine. But this is not the
way I want to continue.
best regards
Juergen
More information about the users
mailing list