console_init
分析
Linux 启动函数 start_kernel 会调用 console_init 函数。
linux4.14/kernel/printk/printk.c

linux4.14/drivers/tty/n_tty.c

我们可以看到,console_init 主要做了两件事情:
1、n_tty_init 主要调用 tty_register_ldisc(N_TTY,
&n_tty_ops) 注册 tty 线路规程。
2、
call = __con_initcall_start;
while (call < __con_initcall_end) {
(*call)();
call++;
}
这里主要是调用 __con_initcall_start 到 __con_initcall_end
之间的函数。
__con_initcall_start 和 __con_initcall_end 定义在:
linux4.14/include/asm-generic/vmlinux.lds.h

中间包含了 .con_initcall.init 段:
linux4.14/include/linux/init.h

我们通过 console_init 声明的驱动模块,就会出现在这个段中,被调用。普通我们声明的驱动模块都是使用
module_init,如果我们写的是串口驱动,可以使用console_init 声明。
如果要看具体中间有什么函数,可以查看编译 Linux 内核的输出 System.map 文件,这个文件记载了从头到尾
Linux 干了什么,具体的地址存储了什么东西。
System.map 文件默认在编译后的 Linux 内核根目录下, 当然我们也可以修改到其他目录。

这里会有三列:地址,区,函数名字。
如果后面我们使用 console_init(serial_5685_xxxx)去声明我们的驱动,那么这个
serial_5685_xxxx 就会出现在 __con_initcall_start 和 __con_initcall_end 之间,就会被调用。
-
模块
+关注
关注
7文章
2822浏览量
52790 -
Linux
+关注
关注
88文章
11627浏览量
217892 -
函数
+关注
关注
3文章
4406浏览量
66812
发布评论请先 登录
嵌入式linux 串口console注册
如何解决板子启动时串口提示can not open init console问题?
「正点原子Linux连载」第三十六章Linux内核启动流程
在rtthread中jlink的rtt作为console口的具体使用流程
Linux运行级init详解
走进Linux之systemd启动过程
Linux系统下init进程的前世今生
解析基于ARM64的init用户进程究竟如何启动?

Linux启动流程中console_init分析
评论