- 论坛徽章:
- 8
|
本帖最后由 firocu 于 2015-09-04 15:09 编辑
Hi all,
我现在遇到了smp初始化的问题. 在 secondary core初始化的汇编代码加了printascii 导致secondary core初始化失败!
我的bsp4个cpu core, 加了打印后1 2 3号core没起来, 0号core起来了.
我在arch/arm/mach-相关secondary core boot的汇编代码里面只是加了两个printascii的打log的指令,- ENTRY(axp_secondary_startup)
- #ifdef CONFIG_CPU_ENDIAN_BE32
- /* convert CPU to big endian */
- .word 0x100f11ee /* mrc p15, 0, r0, c1, c0 */
- .word 0x800080e3 /* orr r0, r0, #0x80 */
- .word 0x100f01ee /* mcr p15, 0, r0, c1, c0 */
- #endif
- #ifdef CONFIG_BE8_ON_LE
- setend be
- #endif
- ARM( mov r0, r0 )
- ARM( b 1f )
- THUMB( adr r12, BSYM(1f) )
- THUMB( bx r12 )
- THUMB( .thumb )
- 1:
- /*
- // Added by firo 第一个printascii
- adr r0, firo_str1
- bl printascii //应该就是停在这个函数里面了, 这是arch提供的调试函数在arch/arm/kernel/debug.S
- firo_str1: .asciz "\naaaaaaa\n" //这个输出了
- // Added by firo 第二个printascii
- adr r0, firo_str2
- bl printascii
- firo_str2: .asciz "\nbbbbbbb\n" //这个没输出
- // Added by firo
- */
- /*
- * Add CPU to coherency fabric
- */
- mrc p15, 0, r0, c0, c0, 5
- and r0, r0, #15
- mov r4, #1
- add r5, r0, #24
复制代码 printascii的源码- ENTRY(printascii)
- addruart_current r3, r1, r2
- b 2f
- 1: waituart r2, r3
- senduart r1, r3
- busyuart r2, r3
- teq r1, #'\n'
- moveq r1, #'\r'
- beq 1b
- 2: teq r0, #0
- ldrneb r1, [r0], #1
- teqne r1, #0
- bne 1b
- mov pc, lr
- ENDPROC(printascii)
复制代码 只输出了aaaaaaa, 没有输出后面的bbbbbbb, 感觉像是停在了第一个printascii里面.
我的问题:
1. 大家知道有什么安全的print一类的 打log的函数吗? 不影响cpu初始化的, 找了很久未果.
2. 为什么printascii会导致hang住呢?
|
|