当前位置: 首页 > article >正文

内核initcall解读

initcall

initcall是builtin的module启动阶段初始化的机制。

initcall提供了不同的优先级,允许module通过initcall接口把初始化函数添加到某个优先级初始化列表中。

内核启动阶段做 do_initcalls 时,会按照优先级顺序遍历每个initcall列表,逐一执行module的初始化函数。

如果module在编译时不是builtin的方式,而是编译为ko,则initcall接口会被替换为module_init。

initcall的列表在实现上被静态编译到了内存段中,见 do_initcalls 实现。

Files

/include/linux/init.h

Interfaces

#define early_initcall(fn)		__define_initcall(fn, early)
#define pure_initcall(fn)		__define_initcall(fn, 0)
#define core_initcall(fn)		__define_initcall(fn, 1)
#define core_initcall_sync(fn)		__define_initcall(fn, 1s)
#define postcore_initcall(fn)		__define_initcall(fn, 2)
#define postcore_initcall_sync(fn)	__define_initcall(fn, 2s)
#define arch_initcall(fn)		__define_initcall(fn, 3)
#define arch_initcall_sync(fn)		__define_initcall(fn, 3s)
#define subsys_initcall(fn)		__define_initcall(fn, 4)
#define subsys_initcall_sync(fn)	__define_initcall(fn, 4s)
#define fs_initcall(fn)			__define_initcall(fn, 5)
#define fs_initcall_sync(fn)		__define_initcall(fn, 5s)
#define rootfs_initcall(fn)		__define_initcall(fn, rootfs)
#define device_initcall(fn)		__define_initcall(fn, 6)
#define device_initcall_sync(fn)	__define_initcall(fn, 6s)
#define late_initcall(fn)		__define_initcall(fn, 7)
#define late_initcall_sync(fn)		__define_initcall(fn, 7s)

使用:

cmdline添加”initcall_debug=1 loglevel=9”,会打印所有执行的initcall。

公共号: 嵌入式进化论


http://www.kler.cn/a/348896.html

相关文章:

  • 随机掉落的项目足迹:解决TypeError: Cannot read properties of undefined (reading ‘push‘)报错
  • python从0快速上手(十)文件和异常处理2
  • MySQL函数特性详解
  • 案例-登录认证(上)
  • phpstrom 部署ftp 连接失败 宝塔ftp失败
  • 1879 C. Make it Alternating
  • 瑞_RabbitMQ_Java客户端SpringAMQP
  • Redis 常用指令技术解读
  • MySQL表的基本查询上
  • 中国各大一线及二线省会城市程序员收入大比拼,看看你所在的城市的统计是否准确
  • Flask Web应用开发流程
  • 自定义注解和组件扫描在Spring Boot中动态注册Bean(二)
  • opencv学习:人脸识别FisherFaceRecognizer_create算法的使用
  • MATLAB(Octave)混电动力能耗评估
  • 电话聊天狂人
  • 关于Transformer的相关问题
  • 【含文档】基于Hadoop平台的大学多媒体教学管理系统(含源码+数据库+lw)
  • MySQL C/C++ 的 API
  • PHP如何解决异常处理
  • 深入了解Linux与Windows目录结构及服务器优化