使用printascii与printhex输出log到串口
来源:互联网 发布:适用于mac的办公软件 编辑:程序博客网 时间:2024/05/22 07:09
转载请标注原文地址: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, r2b2f1:waituart r2, r3senduart r1, r3busyuart r2, r3teqr1, #'\n'moveqr1, #'\r'beq1b2:teqr0, #0ldrnebr1, [r0], #1teqner1, #0bne1bmovpc, lrENDPROC(printascii)
这个函数需要在menuconfig中打开宏定义:CONFIG_DEBUG_LL
打开这个宏之后log会很多,所以建议是直接编辑:/arch/arm/kernel/Makefile
在obj-y 后面增加一项:debug.o
这样就可使直接调用这两个函数
汇编文件中可以这样使用:
#ifdef CONFIG_DEBUG_LLadrr0, str_p1blprintasciimovr0, r9blprinthex8adrr0, str_p2blprintasciib__errorstr_p1:.asciz"\nError: value = (0x"str_p2:.asciz").\n".align#endif
注意printascii只能打印ascii码字符串,不能打印变量值,变量值得通过ldr到寄存器,然后通过printhex打印
c语言中直接这样使用:
extern void printascii(const char *);void s3c_pm_dbg(const char *fmt, ...){va_list va;char buff[256];va_start(va, fmt);vsprintf(buff, fmt, va);va_end(va);#ifdef CONFIG_DEBUG_LLprintascii(buff);#endif}
使用vsprintf将字符串和变量保存在buff内,然后通过printascii送到串口!
我的开发板是exynos4412,在u-boot里面直接对串口进行配置,可以打印单个字符:
/* * uart_asm_init: Initialize UART in asm mode, 115200bps fixed. * void uart_asm_init(void) */.globl uart_asm_inituart_asm_init:/* set GPIO to enable UART */@ GPIO setting for UART for UART0/1/2/3ldrr0, =0x11400000ldrr1, =0x22222222str r1, [r0]ldrr0, =0x11400020ldrr1, =0x222222str r1, [r0]ldrr0, =S5PV310_CLOCK_BASEldrr1, =CLK_SRC_PERIL0_VALldrr2, =CLK_SRC_PERIL0_OFFSETstrr1, [r0, r2]ldrr1, =CLK_DIV_PERIL0_VALldrr2, =CLK_DIV_PERIL0_OFFSETstrr1, [r0, r2]ldrr0, =S5PV310_UART_CONSOLE_BASEldrr1, =0x111strr1, [r0, #UFCON_OFFSET]movr1, #0x3strr1, [r0, #ULCON_OFFSET]ldrr1, =0x3c5strr1, [r0, #UCON_OFFSET]ldrr1, =UART_UBRDIV_VALstrr1, [r0, #UBRDIV_OFFSET]ldrr1, =UART_UDIVSLOT_VALstrr1, [r0, #UDIVSLOT_OFFSET]ldrr1, =0x4f4f4f4fstrr1, [r0, #UTXH_OFFSET]@'O'
直接通过配置串口寄存器0x11400000,0x11400020等对串口初始化
ldr r0, =S5PV310_UART_CONSOLE_BASE 获取平台定义的log输出端口,如uart1
最后两行就是打印字符‘O’,UTXH_OFFSET寄存器只能接受8bit,所以只能打印一个字符
uart初始化好之后,我们可以这样使用,打印一个字符‘K’
/* Print 'K' */ldrr0, =S5PV310_UART_CONSOLE_BASEldrr1, =0x4b4b4b4bstrr1, [r0, #UTXH_OFFSET]
- 使用printascii与printhex输出log到串口
- recovery log直接输出到串口
- WinCE LOG 输出到文件(串口)控制
- Android中使用log4j输出log内容到sd卡
- KeilC51使用printf输出到串口打印的实现
- MFC输出Log信息到log文件
- PHP输出log到文件!!!
- log信息输出到文件
- Android系统开发中LOG的输出与使用
- Android系统开发中LOG的输出与使用
- [转]Android系统开发中LOG的输出与使用
- springmvc log只输出到console,不输出到文件
- 树莓派3 使用串口查看log
- 高通平台bootloader里面串口log输出配置方法
- 高通平台bootloader里面串口log输出配置方法 .
- Log输出到sdcard工具类
- RMAN输出到log文件中
- windbg 命令输出到log文件
- asp程序错误详细说明例表
- service httpd start
- 一条sql添加分区过滤条件后cost反而上升
- 关于java.io.File类
- VC中如何让子对话框响应最大化、最小化、关闭等系统消息
- 使用printascii与printhex输出log到串口
- 数据库操作
- 静态包含与动态包含的区别
- UVA301- Transportation
- Aizu 1315 Gift from the Goddess of Programming 解题报告
- Android开发权威指南(第2版)新书发布(免费下载随书光盘内容,包括Android源代码)
- 2009-03-30 16:41 Http和Socket连接区别
- 简述Linux进程间通信的几种方式
- oracle用存储过程实现分页