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 串口注册的主要内容,如果未能解决你的问题,请参考以下文章

Centos 7.5 1804安装绿联PL2303串口驱动

如何将字符发送到串口?

请问linux下串口向外发送数据要用啥函数,代码要怎么写?谢谢

Linux基础(串口编程)

linux 怎么查看串口波特率

python串口代码在windows中工作,但在linux中不工作