기존 이솝 임베디드 포럼의 지식인 서비스가 게시판 형태로 변경되었습니다.
Kernel\arch\arm\kernel\head.s의 ARM(add pc, r10, #PROCINFO_INITFUNC)이부분이 head-common.s의 __mmap_switched:로 분기해야하는데 분기가 되지 않네요.
간단히 설명 드리겠습니다.
head.s의 내용 입니다.
TRACE_LINE(r8,r11,r12); @1111까지는 문제없이 출력 됩니다.
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, BSYM(__enable_mmu) @ return (PIC) address
TRACE_LINE(r8,r11,r12); @11111
ARM(add pc, r10, #PROCINFO_INITFUNC)
TRACE_LINE(r8,r11,r12); @22222
THUMB(add r12, r10, #PROCINFO_INITFUNC)
TRACE_LINE(r8,r11,r12); @333333
THUMB(mov pc, r12)
head-common.s의 내용
__map_switched:
TRACE_LINE(r8,r11,r12); @44444
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
head-common.s의 TRACE_LINE(r8,r11,r12); @44444풀력되지 않네요.
결론을 얘기하면 head-common.S의 __mmap_switched로 안간다는 말입니다.
수고하세요
TRACE_LINE 매크로 입니다
arch/arm/include/asm/ptrace.h 에 추가한 상태입니다.
구굴링 해본결과 head-common.S에서도 serial로 글자가 잘나온다고 합니다
#define STRINGIFY(x) #x
#define TOSTRING(x) STRINGIFY(x)
#define TRACE_LINE(ra,rb,rc) mov ra,r0; \
mov rb,r1; \
mov rc,r2; \
\
adr r0,9998f; \
bl printascii ; \
\
mov r2,rc; \
mov r1,rb; \
mov r0,ra; \
\
b 9999f; \
9998: ; \
.ascii "\n>>TRACE:"; \
.ascii __FILE__; \
.ascii ":"; \
.asciz TOSTRING(__LINE__); \
.align; \
9999: ;
음....오래되어서 예전 자료를 찾아봐야 하겠지만요...
일단 TRACE_LINE이란 함수의 내부 구성을 봐야할 듯 하네요....
serial로 글자를 찍는 매크로 같은데...virtual인지 physical인지를 따져봐야할 듯도 하고요.