initcall有多个级别,module_init实际就是device_initcall,其级别为6。initcall最终会声明一个initcall_t静态变量,链接时放到内核的.init.data段。 /// include/linux/module.h#ifndef MODULE/*** module_init() - driver initialization entry point* @x: function to be run at kernel boot time or module inse...
未使能 MODULE 情况下,module_init 实际上是作为特殊 initcall,用于声明初始化函数并控制函数调用顺序。initcall 有多个级别,module_init 实际对应于 device_initcall,级别为 6。initcall 会在编译时声明一个 initcall_t 类型的静态变量,并放入内核的 .init.data 段。initcall 的实现和行为可以通过查看...
static initcall_t __initcall_##fn##id __used \ __attribute__((__section__(".initcall" level ".init"))) = fn 最终我们看到的是module_init的真身:__define_initcall(level,fn,id),仔细 推敲这个真身,知道这是个宏,它把传给module_init的函数名组装成以__initcall为前缀的、以6为后缀的函数名,...
#define device_initcall_sync(fn) __define_initcall("6s",fn,6s) #define late_initcall(fn) __define_initcall("7",fn,7) #define late_initcall_sync(fn) __define_initcall("7s",fn,7s) #define __initcall(fn) device_initcall(fn) #define module_init(x) __initcall(x); #else /* MODULE...
先看下initcall_t的定义: typedefint(*initcall_t)(void); 它是一个接收参数为void, 返回值为int类型的函数指针。这样就明白了,其实前两句话只是做了一个检测,当你传进来的函数指针的参数和返回值与initcall_t不一致时,就会有告警。 重点在第三句,是使用alias将initfn变名为init_module,我们知道,kernel 2.4版...
一般情况下,驱动使用device_initcall或者module_init。而early_initcall一般用更早,通常是驱动初始化前的一段时间,由初始化硬件子系统的部分所使用 。 在内核代码init/main.c,首先会有少量用于初始化特定架构的代码,这部分代码在arch/<arch>boot和arch/<arch>kernel中,初始化架构结束后,start_kernel函数就会被调用,...
通过以上的调用栈可以找到最终的实际的 initcall 数据段处理函数 do_initcalls,只需要解析这些数据段即可按顺序逐句调入到个注册的函数内。 在生成vmlinux的链接阶段,编译器为initcall创建了特定的section,每一类initcall对应一组section,然后遍历执行initcall section中的initcalls。
module_init解析及内核initcall的初始化顺序 2017-02-17 15:58 −... penghan 1 14056 vue 模板 template init default.vue 2019-12-15 11:00 −``` ${0} export default { name: '$TM_FILENAME_BASE', props: {}, components: {}, data () { return { } }, watch: {}, computed: {}...
…el.org/pub/scm/linux/kernel/git/paulg/linux Pull module_init replacement part two from Paul Gortmaker: "Replace module_init with appropriate alternate initcall in non modules. This series converts non-modular code that is using the module_init() call to hook itself into the system...
The files changed here are just limited to those that would otherwise have to add module.h to obviously non-modular code, in order to avoid a compile fail, as testing has shown" * tag 'module_init-device_initcall-v4.1-rc8' of git://git.kernel.org/pub/scm/linux/kernel/git/pa...