zoukankan      html  css  js  c++  java
  • 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中。

     

  • 相关阅读:
    GET和POST两种基本请求方法的区别
    GET与POST类型接口
    TCP连接与断开详解(socket通信)
    QC02
    QC01
    tcp三次握手和四次挥手
    ssh整合
    redis主从切换
    缓存解释(一级缓存,二级缓存)
    cxf整合spring代码
  • 原文地址:https://www.cnblogs.com/jkserge/p/7592932.html
Copyright © 2011-2022 走看看