栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

Linux内置驱动程序加载顺序是什么?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Linux内置驱动程序加载顺序是什么?

内置驱动程序不会被 加载
,因此是内置的。当内核自行设置时,将调用它们的初始化函数并激活驱动程序。这些init函数在中调用

init/main.c::do_initcalls()
。所有init调用都按级别进行分类,这些级别在
initcall_levels
和中定义
include/linux/init.h

这些级别是在链接描述文件(

arch/*/kernel/vmlinux.lds.*
)中定义的实际符号。在内核编译时,链接器收集标记为
module_init()
或其他的所有函数
*_initcall()
,按级别分类,将同一级别中的所有函数放在同一位置,然后像函数指针数组一样创建。

do_initcall_level()在运行时所执行的操作是调用数组中指针所指向的每个函数。在do_initcall_level中,除了级别以外,没有任何调用策略,但是数组的顺序由链接时间决定。

因此,现在您可以看到在链接时驱动程序的启动顺序是固定的,但是您该怎么办?

  1. 将您的init函数放在更高的级别,或者
  2. 将设备驱动程序放在更高的位置
    Makefile

如果您已阅读以上内容,则第一个内容很清楚。即)如果合适,请使用early_initcall()。

第二个需要更多解释。

Makefile
问题的顺序是当前内核构建系统的工作方式以及链接器的工作方式。简而言之,构建系统将所有目标文件放入
obj-y
并将它们链接在一起。它是高度依赖于环境的,但是链接程序很有可能将第一个目标文件
obj-y
放在较低的地址中,因此称为较早的地址。

如果只希望您的驱动程序早于同一目录中的其他驱动程序被调用,这是最简单的方法。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/401083.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号