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,是要比架构初始化模块和文件系统模块优先级低。

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

    关注

    12

    文章

    1839

    浏览量

    85270
  • Linux
    +关注

    关注

    87

    文章

    11296

    浏览量

    209366
  • 函数
    +关注

    关注

    3

    文章

    4329

    浏览量

    62578
收藏 人收藏

    评论

    相关推荐

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

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

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

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

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

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

    Linux 挂载文件系统

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

    Linux基础教程之Linux查看磁盘挂载有哪些方法详细方法概述

    本文档的主要内容详细介绍的是Linux基础教程之Linux查看磁盘挂载有哪些方法详细方法概述详细资料免费下载。
    发表于 10-26 17:15 1次下载

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

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

    linux挂载u盘的方法

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

    如何在Linux挂载Windows共享目录

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

    Linux挂载硬盘

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

    Linux中的挂载命令mount是什么

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

    Linux系统的三种挂载方式

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

    linux文件挂载相关介绍

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

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

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

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

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

    Linux根文件系统的挂载过程

    Linux根文件系统(rootfs)是Linux系统中所有其他文件系统和目录的起点,它是内核启动时挂载的第一个文件系统。
    的头像 发表于 10-05 16:50 408次阅读