全球最实用的IT互联网信息网站!

AI人工智能P2P分享&下载搜索网页发布信息网站地图

当前位置:诺佳网 > 电子/半导体 > 嵌入式技术 >

Linux启动流程中console_init分析

时间:2023-09-28 16:23

人气:

作者:admin

标签: 模块  函数 

导读: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...

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 之间,就会被调用。

温馨提示:以上内容整理于网络,仅供参考,如果对您有帮助,留下您的阅读感言吧!
相关阅读
本类排行
相关标签
本类推荐

CPU | 内存 | 硬盘 | 显卡 | 显示器 | 主板 | 电源 | 键鼠 | 网站地图

Copyright © 2025-2035 诺佳网 版权所有 备案号:赣ICP备2025066733号
本站资料均来源互联网收集整理,作品版权归作者所有,如果侵犯了您的版权,请跟我们联系。

关注微信