It's very difficult debug these sections of code without an hardware
emulator like bdi2000 or similar.
In the following link there is a simple introduction to the step made from
the kernel in the early boot sequence
http://gicl.cs.drexel.edu/people/sevy/linux/PPC_Linux_boot_sequence.html.

Maybe the problem is due to the machine type code that is not correctly
saved.

Best Regards,
Andrea Bernardi


2008/7/5 YenHung Chen <[EMAIL PROTECTED]>:

>
> I am porting linux-2.6.23-android-m5-rc14 kernel to TI Davinci DM355,
> and encountered a problem, could anyone help me to fix the problem?
>
> My development environment:
>
> Fedora Core 8
> GCC 4.1.2 <-- I build the cross compiling tool by myself
> linux-2.6.23-android-m5-rc14 kernel
>
> My problem is the compiled kernel could not boot on EVM board,
> I have checked the booting process, the uncompress kernel process is done,
> the problem is happened at the places in 2 files as following list:
>
> arch/arm/kernel/head.S
> arch/arm/kernel/head-common.S
>
> ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
>
> The booting information is:
>
> Starting kernel ...
>
> Uncompressing
> Linux...................................................................................................................
> done, booting the kernel.
>
>
> Then, there is no other information on the screen.
>
> ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
>
> In file arch/arm/kernel/head.S, function __turn_mmu_on
>
> ENTRY(stext)
>     msr    cpsr_c, #PSR_F_BIT | PSR_I_BIT | SVC_MODE @ ensure svc mode
>                         @ and irqs disabled
>     mrc    p15, 0, r9, c0, c0        @ get processor id
>     bl    __lookup_processor_type        @ r5=procinfo r9=cpuid
>     movs    r10, r5                @ invalid processor (r5=0)?
>     beq    __error_p            @ yes, error 'p'
>     bl    __lookup_machine_type        @ r5=machinfo
>     movs    r8, r5                @ invalid machine (r5=0)?
>     beq    __error_a            @ yes, error 'a'
>     bl    __vet_atags
>     bl    __create_page_tables
>
>     /*
>      * The following calls CPU specific code in a position independent
>      * manner.  See arch/arm/mm/proc-*.S for details.  r10 = base of
>      * xxx_proc_info structure selected by __lookup_machine_type
>      * above.  On return, the CPU will be ready for the MMU to be
>      * turned on, and r0 will hold the CPU control register value.
>      */
>     ldr    r13, __switch_data        @ address to jump to after
>                         @ mmu has been enabled
>     adr    lr, __enable_mmu        @ return (PIC) address <--- this line has 
> run
>     add    pc, r10, #PROCINFO_INITFUNC <--- this line has run
>
>     .align    5
>     .type    __turn_mmu_on, %function
> __turn_mmu_on:
>     mov    r0, r0
>     mcr    p15, 0, r0, c1, c0, 0        @ write control reg  <--- not sure 
> that it has run
>     mrc    p15, 0, r3, c0, c0, 0        @ read id reg
>     mov    r3, r3
>     mov    r3, r3
>     mov    pc, r13
>
>
> ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
>
> In file arch/arm/kernel/head-common.S, I am not sure that object 
> __switch_data and function
> __mmap_switched have run?
>
>     .type    __switch_data, %object
> __switch_data:
>     .long    __mmap_switched
>     .long    __data_loc            @ r4
>     .long    __data_start            @ r5
>     .long    __bss_start            @ r6
>     .long    _end                @ r7
>     .long    processor_id            @ r4
>     .long    __machine_arch_type        @ r5
>     .long    __atags_pointer            @ r6
>     .long    cr_alignment            @ r7
>     .long    init_thread_union + THREAD_START_SP @ sp
>
> /*
>  * The following fragment of code is executed with the MMU on in MMU mode,
>  * and uses absolute addresses; this is not position independent.
>  *
>  *  r0  = cp#15 control register
>  *  r1  = machine ID
>  *  r2  = atags pointer
>  *  r9  = processor ID
>  */
>     .type    __mmap_switched, %function
> __mmap_switched:
>     adr    r3, __switch_data + 4
>     ldmia    r3!, {r4, r5, r6, r7}
>     cmp    r4, r5                @ Copy data segment if needed
> 1:    cmpne    r5, r6
>     ldrne    fp, [r4], #4
>     strne    fp, [r5], #4
>     bne    1b
>     mov    fp, #0                @ Clear BSS (and zero fp)
> 1:    cmp    r6, r7
>     strcc    fp, [r6],#4
>     bcc    1b
>     ldmia    r3, {r4, r5, r6, r7, sp}
>     str    r9, [r4]            @ Save processor ID
>     str    r1, [r5]            @ Save machine type
>     str    r2, [r6]            @ Save atags pointer
>     bic    r4, r0, #CR_A            @ Clear 'A' bit
>     stmia    r7, {r0, r4}            @ Save control register values
>     b    start_kernel
>
> -------------------------------------------------------------------------------------------
>
> Could anyone recommend me how to fix the problem?
>
> Thanks!
>
> YenHung Chen
>
>
>
>
> >
>

--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"Android Internals" group.
To post to this group, send email to android-internals@googlegroups.com
To unsubscribe from this group, send email to [EMAIL PROTECTED]
For more options, visit this group at 
http://groups.google.com/group/android-internals?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to