大家应该都在找printf的实现,其实linux内核中就有,我本来想查一下,既然linux覆盖了中断向量表,那么怎么输出文字?就查printk的代码,发现原来printk就是printf。代码在printk.c
#printk
asmlinkage int printk( const char *fmt, ...)
{
va_list args;
int r;
va_start (args, fmt);
r = vprintk(fmt, args);
va_end (args);
return r;
}
# vsprintk
asmlinkage int vprintk( const char *fmt, va_list args)
{
int printed_len = 0;
int current_log_level = default_message_loglevel;
unsigned long flags;
int this_cpu;
char *p;
boot_delay_msec();
preempt_disable();
/* This stops the holder of console_sem just where we want him */
raw_local_irq_save(flags);
this_cpu = smp_processor_id();
/*
* Ouch, printk recursed into itself!
*/

这篇博客探讨了Linux内核中printf的实现,重点介绍了printk和vprintk的功能。作者在研究如何在内核级别输出信息时,发现了printk实际上就是printf的内核版本。内容来源于对printk.c源代码的分析。
&spm=1001.2101.3001.5002&articleId=100969475&d=1&t=3&u=3aa213046b394e87bb63d879213ce33c)
9435

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



