linux 3.10 串口注册
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了linux 3.10 串口注册相关的知识,希望对你有一定的参考价值。
这个调用过程特别奇特,值得记下来。
最外层调用start_kernel的console_init()进行串口注册。
console_init()调用drivers/tty/tty_io.c:
void __init console_init(void)
{
initcall_t *call;
/* Setup the default TTY line discipline. */
tty_ldisc_begin();
/*
* set up the console device so that later boot sequences can
* inform about problems etc..
*/
call = __con_initcall_start;
while (call < __con_initcall_end) {
(*call)();
call++;
}
}
其中 __con_initcall_start 和 __con_initcall_end的定义:
#define CON_INITCALL \
VMLINUX_SYMBOL(__con_initcall_start) = .; *(.con_initcall.init) VMLINUX_SYMBOL(__con_initcall_end) = .;
这个宏代表 .con_initcall.init 函数嵌入在两者之间,通过之前的while访问
关于.con_initcall.init:##为代入展开符,即
#define console_initcall(FN) static initcall_t __initcall_FN __used __section(.con_initcall.init) = FN
console_initcall(FN)定义在:arch/mips/dec/promcon.c :
static int __init prom_console_init(void)
{
register_console(&sercons);
return 0;
}
console_initcall(prom_console_init);
最后register_console定义在kernel/printk.c中。
以上是关于linux 3.10 串口注册的主要内容,如果未能解决你的问题,请参考以下文章