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中。

 

转载于:https://www.cnblogs.com/jkserge/p/7592932.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值