我的目标是用于飞思卡尔iMX53 Arm CPU板的嵌入式Linux 2.6.35.3。
当所有各种CAN总线相关驱动程序(FlexCAN)在内核启动过程中初始化并准备好使用时,我需要进行更改。我需要CAN总线初始化的时间要早得多,以便我可以在用户空间准备好脚本完成工作之前很快发送一些特定的CAN原始消息。
如何控制编译(内置)内核模块/驱动程序在内核启动和初始化过程中由内核进行内部探测。
我不是在讨论可以在脚本中进行模式探测的文件系统级.ko文件..这是在此之前。
抱歉我格式不正确的linux问题..我不经常在内核空间工作..尝试尽可能快地破解我的方式。
答案 0 :(得分:1)
initcall排序在这里定义:
http://lxr.free-electrons.com/source/include/linux/init.h#L194
,供参考:
/*
* A "pure" initcall has no dependencies on anything else, and purely
* initializes variables that couldn't be statically initialized.
*
* This only exists for built-in code, not for modules.
* Keep main.c:initcall_level_names[] in sync.
*/
#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)
由于module_init
#defined为device_initcall
,因此一个没有任何依赖它的通用模块会在序列结束时初始化。要尽早加载您的模块,只需将其module_init
调用更改为之前发生的其他内容(例如subsys_initcall
)
注意:只是在事物上切换顺序会破坏其他依赖关系,你可以从地狱中获取catch-22依赖循环。