一.printk函数简介
1.printk简介
printk是在内核中运行的向控制台输出显示的函数,Linux内核首先在内核空间分配一个静态缓冲区,作为显示用的空间,然后调用sprintf,格式化显示字符串,最后调用tty_write向终端进行信息的显示
2.printk函数定义
asmlinkage int printk(const char *fmt, ...)
{
va_list args;
int r;
#ifdef CONFIG_KGDB_KDB
if (unlikely(kdb_trap_printk)) {
va_start(args, fmt);
r = vkdb_printf(fmt, args);
va_end(args);
return r;
}
#endif
va_start(args, fmt);
r = vprintk_emit(0, -1, NULL, 0, fmt, args);
va_end(args);
return r;
}
其中asmlinkage表示将函数参数存放在局部栈中,va_start和va_end是获取可变参数的方法,该方法读取可变参数的过程其实就是在 堆栈中,使用 指针,遍历

本文介绍了Linux内核中的printk函数,详细讲解了其工作原理,包括函数简介、定义和vprintk_emit流程。同时,文章探讨了如何设置串口为调试串口,详细阐述了串口初始化和register_console函数的流程,以及如何通过cmdline配置调试串口。

1896

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



