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

    文章

    2056

    浏览量

    45712
  • Linux
    +关注

    关注

    85

    文章

    10263

    浏览量

    205820
  • 函数
    +关注

    关注

    3

    文章

    3248

    浏览量

    60663
收藏 人收藏

    评论

    相关推荐

    linux启动流程分析

    发表于 08-04 00:27

    嵌入式linux 串口console注册

    的所有函数在driver\tty\tty_io.c\console_init函数调用,console_init在start_kernel函数中被调用. console的注册和driver
    发表于 03-05 13:53

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

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

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

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

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

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

    【1024平头哥开发套件开发体验】- sc5654 启动流程分析

    启动流程分析文件目录如下 目录结构介绍:Project├── Boards
    发表于 12-05 21:45

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

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

    在rtthread中使用jlink的rtt作为console口的具体使用流程

    console口进行调试,省得再单独引出一个串口,具体使用流程如下:在rtthread setting开启systemview包。修改console口的名称为segger修改board.c
    发表于 02-10 16:38

    Linux运行级init详解

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

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

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

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

    分析了系统上电后 bootloader的执行流程及 ARM Linux启动过程。
    的头像 发表于 12-21 09:24 9870次阅读
    详解bootloader的执行<b>流程</b>与ARM <b>Linux</b><b>启动</b>过程<b>分析</b>

    走进Linux之systemd启动过程

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

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

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

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

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

    linux操作系统的进程创建和销毁函数解析

    Linux启动流程,reset_init函数调用kernel_thread函数创建了2个内核进程:kernel_init和kthreadd。
    发表于 06-26 09:12 120次阅读
    <b>linux</b>操作系统<b>中</b>的进程创建和销毁函数解析