0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

Linux启动流程中console_init分析

麦辣鸡腿堡 来源:嵌入式Linux系统开发 作者:Jasonangel 2023-09-28 16:23 次阅读

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

    文章

    2695

    浏览量

    47434
  • Linux
    +关注

    关注

    87

    文章

    11296

    浏览量

    209353
  • 函数
    +关注

    关注

    3

    文章

    4329

    浏览量

    62575
收藏 人收藏

    评论

    相关推荐

    Linux启动流程基本分析

    Linux启动流程总的来说可以分成三个阶段 Linux启动流程图   第一步:上电 Ø在 x86
    的头像 发表于 05-11 08:49 667次阅读
    <b class='flag-5'>Linux</b><b class='flag-5'>启动</b><b class='flag-5'>流程</b>基本<b class='flag-5'>分析</b>

    linux启动流程分析

    linux启动流程分析
    发表于 08-04 00:27

    嵌入式linux 串口console注册

    是__con_initcall_start,该段的所有函数在driver\tty\tty_io.c\console_init函数调用,console_init在start_kern
    发表于 03-05 13:53

    如何解决板子启动时串口提示can not open init console问题?

    板子启动时 串口提示can not open init console??找了很多资料 没能 解决
    发表于 07-12 05:45

    「正点原子Linux连载」第三十六章Linux内核启动流程

    文件arch/arm/kernel/head.S,因此要分析Linux内核的启动流程,就得先从文件arch/arm/kernel/head
    发表于 03-17 11:07

    详细分析嵌入式Linux系统启动流程

    在嵌入式Linux专题(一)已经对嵌入式Linux系统的架构及启动流程有了初步的介绍,本文将详细分析
    发表于 11-05 09:25

    在rtthreadjlink的rtt作为console口的具体使用流程

    来作为console口进行调试,省得再单独引出一个串口,具体使用流程如下:在rtthread setting开启systemview包。修改console口的名称为segger修改b
    发表于 08-01 15:26

    Linux运行级init详解

    Linux 启动时需要哪些步骤呢?本文将详细描述不同的运行级在启动的作用。 对于那些在DOS/Win9x/NT 平台下的高级用户而言,Linux
    发表于 11-07 10:59 0次下载

    详解bootloader的执行流程与ARM Linux启动过程分析

    S3C2410 ARM处理器为例,详细分析了系统上电后 bootloader的执行流程及 ARM Linux启动过程。
    的头像 发表于 12-21 09:24 1w次阅读
    详解bootloader的执行<b class='flag-5'>流程</b>与ARM <b class='flag-5'>Linux</b><b class='flag-5'>启动</b>过程<b class='flag-5'>分析</b>

    走进Linux之systemd启动过程

    Linux系统的启动方式有点复杂,而且总是有需要优化的地方。传统的Linux系统启动过程主要由著名的init进程(也被称为SysV
    发表于 04-27 19:14 3175次阅读

    Linux系统下init进程的前世今生

    Linux系统init进程(pid=1)是除了idle进程(pid=0,也就是init_task)之外另一个比较特殊的进程,它是Linux
    发表于 04-28 17:23 966次阅读

    解析基于ARM64的init用户进程究竟如何启动

    [导读] 前面的文章有提到linux启动的第一个进程为init,那么该进程究竟是如何从内核启动入口一步一步运行起来的,而该进程又有些什么作...
    发表于 01-26 17:05 2次下载
    解析基于ARM64的<b class='flag-5'>init</b>用户进程究竟如何<b class='flag-5'>启动</b>?

    linux内核启动过程会执行用户空间的init进程

    linux内核启动过程的后期,在kernel_init()函数代表的init线程,会尝试执行用户空间的
    的头像 发表于 10-14 09:12 1154次阅读

    kernel执行第一个init应用程序的实现原理

    Linux系统启动过程中通过`init_task`创建0号idle进程。然后通过`kernel_thread`创建1号init进程。
    的头像 发表于 06-05 14:53 849次阅读
    kernel执行第一个<b class='flag-5'>init</b>应用程序的实现原理

    STM32的完整启动流程分析

    STM32的完整启动流程分析
    的头像 发表于 10-25 16:00 1386次阅读
    STM32的完整<b class='flag-5'>启动</b><b class='flag-5'>流程</b><b class='flag-5'>分析</b>