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

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

3天内不再提示

Linux驱动是如何挂载的

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

start_kernel 函数最后调用的是 rest_init 函数,其实 rest_init 函数不光产生了最重要的 kernel_init (PID=1)和 kthreadd (PID=2)内核进程。

kernel_init 最后演变为用户空间 init 进程(PID=1)。

rest_init 函数还有一个重要的分支:加载驱动模块,调用流程如下:

start_kernel
  |--- >rest_init 
      |--- >kernel_init
          |--- >kernel_init_freeable
              |--- >do_basic_setup
                  |--- >driver_init
                  |--- >do_initcalls
                        |--- >do_initcall_level
                            |--- >do_one_initcall

注意,这里就是驱动的初始化和驱动模块的加载。

我们知道在 rest_init 函数中,最重要的 1 号进程和 2 号进程都已经起来了,也就是说系统已经真正起来了。1 号 2 号进程起来之前,文件系统的挂载是在调用 rest_init 函数之前就挂载好了,此时加载驱动是可以的。

那么这里是如何挂载的呢?

流程中 driver_init 函数会对各个驱动入口函数进行初始化,也就是在内存中对驱动初始化函数进行寻址。而 do_initcalls 函数中,会按照驱动的优先级,对驱动一个一个进行挂载。

linux4.14/init/main.c

图片

图片

驱动的优先级 :Linux 把系统中需要挂载的各种东西,都分为14个等级,分别为 1--1s--2--2s--3--3s--4--4s--5--5s--6--6s--7--7s,数字越小优先级越高,定义在:

linux4.14/include/linux/init.h

图片

一般我们自己写的驱动模块,文件最后会声明一个 module_init 和 module_exit ,实际上被定义为 device_initcall,优先级为6,是要比架构初始化模块和文件系统模块优先级低。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 驱动
    +关注

    关注

    11

    文章

    1718

    浏览量

    84355
  • Linux
    +关注

    关注

    87

    文章

    10992

    浏览量

    206744
  • 函数
    +关注

    关注

    3

    文章

    3904

    浏览量

    61311
收藏 人收藏

    评论

    相关推荐

    linux驱动开发_文件系统本地挂载

    介绍Linux开发根文件系统挂载、NFS文件系统配置,UBOOT环境变量配置,完成文件系统启动。
    的头像 发表于 09-17 15:52 1104次阅读
    <b class='flag-5'>linux</b><b class='flag-5'>驱动</b>开发_文件系统本地<b class='flag-5'>挂载</b>

    Linux网络文件系统的注册与挂载过程分析

    本文主要对Linux网络文件系统的注册与挂载过程进行分析
    发表于 10-13 16:28 793次阅读
    <b class='flag-5'>Linux</b>网络文件系统的注册与<b class='flag-5'>挂载</b>过程分析

    Linux中的挂载命令mount你知道怎么用吗?

    Linux GUI 中,我们通常理所当然地认为,当我们插入 USB 闪存驱动器、硬盘驱动器甚至 DVD 磁盘时,它们就可以使用了。但是在后台有一个过程,设备被安装(准备好使用)并分配了一个安装
    发表于 11-03 11:55 911次阅读

    Linux模块相关命令 Linux驱动模块的编写与挂载

    Linux模块相关命令 Linux驱动模块的编写与挂载
    发表于 10-01 12:20 198次阅读
    <b class='flag-5'>Linux</b>模块相关命令 <b class='flag-5'>Linux</b><b class='flag-5'>驱动</b>模块的编写与<b class='flag-5'>挂载</b>

    Linux下的磁盘挂载

    Linux下磁盘挂载
    发表于 05-22 15:55

    Linux 挂载文件系统

    Linux 挂载文件系统 1、挂载点必须是一个目录。 2、一个分区挂载在一个已存在的目录上,这个目录可以不为空,但挂载后这个目录下以前的内
    发表于 01-18 12:51 2157次阅读

    关于Linux系统如何挂载数据盘?

    远程SSH登录上CentOS或Debian及Ubuntu等系列的Linux服务器后,进行如下操作 提醒:挂载操作会清空数据,请确认挂载盘无数据或者未使用.
    发表于 04-23 13:39 881次阅读

    linux挂载u盘的方法

    linux挂载U盘具体步骤如下:
    发表于 05-19 09:14 2435次阅读
    <b class='flag-5'>linux</b><b class='flag-5'>挂载</b>u盘的方法

    如何在Linux挂载Windows共享目录

    Linux/UNIX操作系统可以使用`mount`命令在指定的挂载挂载CIFS Windows共享目录。
    的头像 发表于 12-07 09:29 3425次阅读

    Linux挂载硬盘

    Linux挂载硬盘
    的头像 发表于 01-12 10:52 1209次阅读
    <b class='flag-5'>Linux</b><b class='flag-5'>挂载</b>硬盘

    Linux中的挂载命令mount是什么

    Linux文件系统中的所有文件都以/ 为根的大树的形式排列。这些文件可以根据您的分区表分布在各种设备上,最初你的父目录安装(即附加)到这棵树的/ ,其他的可以手动挂载使用GUI界面(如果可用)或使用挂载
    的头像 发表于 02-20 16:26 1973次阅读
    <b class='flag-5'>Linux</b>中的<b class='flag-5'>挂载</b>命令mount是什么

    Linux系统的三种挂载方式

    hello,大家好!在服务器使用过程中,mount挂载几乎是最常用的一种操作了,这周就给大家介绍一下linux文件挂载相关介绍。
    的头像 发表于 05-06 09:20 601次阅读

    linux文件挂载相关介绍

    mount是Linux下的一个命令,它可以将分区挂载或挂接到Linux的一个文件夹下,从而将分区和该目录联系起来,当我们只要访问这个文件夹时,就相当于访问该分区了。
    的头像 发表于 05-12 15:23 426次阅读

    驱动动模块之间如何更改模块挂载顺序

    fs_initcall 去声明。 2、对于同一优先级的驱动模块,可以在 Makefile 中更改其编译和链接的顺序,就会切换其挂载的顺序。(静态编译) 3、动态加载驱动模块:等 Linux
    的头像 发表于 09-28 16:54 1032次阅读
    <b class='flag-5'>驱动</b>动模块之间如何更改模块<b class='flag-5'>挂载</b>顺序

    Linux添加磁盘创建分区、挂载

    Linux添加磁盘创建分区、挂载
    发表于 04-20 17:49 99次阅读
    <b class='flag-5'>Linux</b>添加磁盘创建分区、<b class='flag-5'>挂载</b>