转载请标注原文地址:http://blog.csdn.net/uranus_wm/article/details/11176877
当串口控制台suspend时,内核c语言函数printk无法输出log
在linux2.3.0版本,arm架构下有两个汇编函数printascii和printhex,可以用于log调试
由于是用arm汇编指令写的,仅支持arm架构平台
文件位置:/arch/arm/kernel/debug.S
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)
这个函数需要在menuconfig中打开宏定义:CONFIG_DEBUG_LL
打开这个宏之后log会很多,所以建议是直接编辑:/arch/arm/kernel/Makefile
在obj-y 后面增加一项:debug.o
这样就可使直接调用这两个函数
汇编文件中可以这样使用:
#ifdef CONFIG_DEBUG_LL
adr r0, str_p1
bl printascii
mov r0, r9
bl printhex

本文介绍了在Linux 2.3.0版本的ARM架构下,如何利用汇编函数printascii和printhex进行log调试。由于这两个函数仅支持ARM平台,需要在menuconfig中启用CONFIG_DEBUG_LL宏,并在kernel/Makefile中添加debug.o。printascii适合打印ASCII字符串,而printhex可用于打印变量值。在C语言中,可以通过vsprintf将变量与字符串组合后用printascii输出。此外,还展示了在Exynos4412开发板上如何配置和使用串口进行字符打印。

1739

被折叠的 条评论
为什么被折叠?



