关于printk的分析
来源:互联网 发布:电脑工作备忘录软件 编辑:程序博客网 时间:2024/05/06 01:12
前面转了一篇文章,但一直没弄清楚为何printk(linux_banner)会留在log_buf里,今天仔细跟了一下,记录如下,另外还要看一下dmesg...:
printk->vprintk
在函数vprintk
if(acquire_console_semaphore_for_printk(this_cpu))
release_console_sem();
在函数static int acquire_console_semaphore_for_printk(unsigned intcpu)中
static int acquire_console_semaphore_for_printk(unsigned intcpu)
{
int retval = 0;
在函数static int acquire_console_semaphore_for_printk(unsigned intcpu)中
static int acquire_console_semaphore_for_printk(unsigned intcpu)
{
if (!try_acquire_console_sem()) {
retval = 1;
if (!can_use_console(cpu)){
console_locked= 0;
up(&console_sem);
retval =0;
}
}
printk_cpu = UINT_MAX;
spin_unlock(&logbuf_lock);
return retval;
}
其中的can_use_console
static inline int can_use_console(unsigned int cpu)
{
return cpu_online(cpu) ||have_callable_console();
}
没有console注册,have_callable_console返回0,而cpu_online(cpu)的返回值也要等到kernel_init中调用smp_prepare_cpus函数之后才会为1,所以can_use_console在kernel启动之后一段时间为0,进而acquire_console_semaphore_for_printk返回0,打印就留在log_buf中,
}
其中的can_use_console
static inline int can_use_console(unsigned int cpu)
{
}
没有console注册,have_callable_console返回0,而cpu_online(cpu)的返回值也要等到kernel_init中调用smp_prepare_cpus函数之后才会为1,所以can_use_console在kernel启动之后一段时间为0,进而acquire_console_semaphore_for_printk返回0,打印就留在log_buf中,
static int __init kernel_init(void * unused)
smp_prepare_cpus(setup_max_cpus);
void__init smp_prepare_cpus(unsigned int max_cpus)
current_thread_info()->cpu = 0;
0 0
- 关于printk的分析
- 关于printk的分析
- 关于printk的分析
- printk 的简要分析
- Linux kernel printk的分析
- 内核printk的实现分析
- printk的详细原理分析
- 内核printk的实现分析
- Printk的loglevel和日志记录分析
- Printk的loglevel和日志记录分析
- Printk的loglevel和日志记录分析
- Printk的loglevel和日志记录分析
- [系统启动]Printk与sched_clock_init的一点分析
- Printk的loglevel和日志记录分析
- Printk与sched_clock_init的一点分析
- 关于linux中printk的显示等级
- 关于 printk函数 与 控制台 以及 kernel.printk 的关系 详解
- printk 实现分析
- kernel启动控制台还不可用时发生cr…
- Redis内部数据结构详解之压缩链表(ziplist)
- start_kernel()之prink()
- start_kernel()之prink()
- 关于printk的分析
- 关于printk的分析
- Linux启动参数及实现 __setup…
- Linux启动参数及实现 __setup…
- Linux内核的early_param原理追踪
- Linux内核的early_param原理追踪
- 2013年12月15日
- 2013年12月15日
- 将博客搬至CSDN
- 将博客搬至CSDN