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文章
2540浏览量
46757 -
Linux
+关注
关注
87文章
11030浏览量
207251 -
函数
+关注
关注
3文章
4119浏览量
61550
发布评论请先 登录
相关推荐
嵌入式linux 串口console注册
如何解决板子启动时串口提示can not open init console问题?
「正点原子Linux连载」第三十六章Linux内核启动流程
【正点原子FPGA连载】第十七章Linux内核启动流程-领航者ZYNQ之linux开发指南
在rtthread中jlink的rtt作为console口的具体使用流程
Linux运行级init详解
走进Linux之systemd启动过程
嵌入式 Linux 启动流程和 bootloader 介绍
![嵌入式 <b class='flag-5'>Linux</b> <b class='flag-5'>启动</b><b class='flag-5'>流程</b>和 bootloader 介绍](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
解析基于ARM64的init用户进程究竟如何启动?
![解析基于ARM64的<b class='flag-5'>init</b>用户进程究竟如何<b class='flag-5'>启动</b>?](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
评论