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

    文章

    1613

    浏览量

    83833
  • Linux
    +关注

    关注

    85

    文章

    10263

    浏览量

    205820
  • 函数
    +关注

    关注

    3

    文章

    3248

    浏览量

    60663
收藏 人收藏

    评论

    相关推荐

    Linux挂载NTFS格式的硬盘的方法

    挂载exFAT和NTFS格式硬盘的驱动安装和配置 http://www.linuxidc.com/Linux/2012-10/71831.htmCentOS下
    发表于 07-08 08:39

    Linux下的磁盘挂载

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

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

    Linux基础教程之Linux查看磁盘挂载有哪些方法详细方法概述详细资料免费下载。
    发表于 10-26 17:15 1次下载

    Linux 挂载文件系统

    Linux 挂载文件系统 1、
    发表于 01-18 12:51 2110次阅读

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

    Linux服务器后,进行如下操作 提醒:
    发表于 04-23 13:39 747次阅读

    linux挂载u盘的方法

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

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

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

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

    Linux网络文件系统的注册与挂载过程进行分析
    发表于 10-13 16:28 526次阅读
    <b>Linux</b>网络文件系统的注册与<b>挂载</b>过程分析

    如何使用Linux系统下的mdev实现动态更新设备节点及动态挂载U盘

    Linux系统下的mdev实现动态更新设备节点及动态挂载U盘。
    发表于 10-17 09:22 2001次阅读

    如何在Linux挂载Windows共享目录

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

    Linux挂载硬盘

    Linux挂载硬盘
    的头像 发表于 01-12 10:52 832次阅读
    <b>Linux</b><b>挂载</b>硬盘

    Linux中的挂载命令mount是什么

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

    Linux系统的三种挂载方式

    挂载几乎是最常用的一种操作了,这周就给大家介绍一下linux文件挂载相关介绍。
    的头像 发表于 05-06 09:20 296次阅读

    linux文件挂载相关介绍

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

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

    驱动模块,可以在 Makefile 中更改其编译和链接的顺序,就会切换其挂载的顺序。(静态编译) 3、动态加载驱动模块:等 Linux 系统起来以后,手动执行 insmod 和 rmmod 即可挂载和卸载驱动,顺序自己决
    的头像 发表于 09-28 16:54 128次阅读
    <b>驱动</b>动模块之间如何更改模块<b>挂载</b>顺序