你了解Linux驱动加载顺序?.doc

上传人:白大夫 文档编号:3381546 上传时间:2019-08-20 格式:DOC 页数:2 大小:15.50KB
返回 下载 相关 举报
你了解Linux驱动加载顺序?.doc_第1页
第1页 / 共2页
亲,该文档总共2页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述

《你了解Linux驱动加载顺序?.doc》由会员分享,可在线阅读,更多相关《你了解Linux驱动加载顺序?.doc(2页珍藏版)》请在三一文库上搜索。

1、你了解Linux驱动加载顺序?Linux内核为不同驱动的加载顺序对应不同的优先级,定义了一些宏:includelinuxinit.h#define pure_initcall(fn) _define_initcall(0,fn,1)#define core_initcall(fn) _define_initcall(1,fn,1)#define core_initcall_sync(fn) _define_initcall(1s,fn,1s)#define postcore_initcall(fn) _define_initcall(2,fn,2)#define postcore_initca

2、ll_sync(fn) _define_initcall(2s,fn,2s)#define arch_initcall(fn) _define_initcall(3,fn,3)#define arch_initcall_sync(fn) _define_initcall(3s,fn,3s)#define subsys_initcall(fn) _define_initcall(4,fn,4)#define subsys_initcall_sync(fn) _define_initcall(4s,fn,4s)#define fs_initcall(fn) _define_initcall(5,f

3、n,5)#define fs_initcall_sync(fn) _define_initcall(5s,fn,5s)#define rootfs_initcall(fn) _define_initcall(rootfs,fn,rootfs)#define device_initcall(fn) _define_initcall(6,fn,6)#define device_initcall_sync(fn) _define_initcall(6s,fn,6s)#define late_initcall(fn) _define_initcall(7,fn,7)#define late_initc

4、all_sync(fn) _define_initcall(7s,fn,7s)#define _initcall(fn) device_initcall(fn)把自己的驱动的函数名用这些宏去定义之后,就会对应不同的加载时候的优先级。其中,我们写驱动中所用到的module_init对应的是#define module_init(x) _initcall(x);而#define _initcall(fn) device_initcall(fn)所以,驱动对应的加载的优先级为6在上面的不同的优先级中,数字越小,优先级越高。同一等级的优先级的驱动,加载顺序是链接过程决定的,结果是不确定的,我们无法去手

5、动设置谁先谁后。不同等级的驱动加载的顺序是先优先级高,后优先级低,这是可以确定的。所以,像我们之前在驱动中用:module_init(i2c_dev_init);module_init(as352x_afe_init);module_init(as352x_afe_i2c_init);module_init(enc28j60_init);所以,大家都是同一个优先级去初始化,最后这些驱动加载的顺序,可以查看在根目录下,生成的system.map:/*/研究mx53开发板上sgtl5000的音频驱动时,发现有sgtl5000_i2c_driver和imx_3stack_sgtl5000_audio

6、_driver两个驱动,前面的驱动总是在前面执行,但是好像二者都是用的module_init,那么是什么地方决定了它的执行顺序呢?找到makefile内容如下:snd-soc-core-objs := soc-core.o soc-dapm.o soc-jack.o soc-cache.o soc-utils.oobj-$(CONFIG_SND_SOC) += snd-soc-core.oobj-$(CONFIG_SND_SOC) += codecs/obj-$(CONFIG_SND_SOC) += fsl/obj-$(CONFIG_SND_SOC) += imx/obj-$(CONFIG_SND_SOC) += mxs/sgtl5000_i2c_driver驱动是在codecs目录下,imx_3stack_sgtl5000_audio_driver是在imx目录下,难道与编译顺序有关?调整makefile中的顺序后,再编译运行,果然,二者的执行顺序变过来了。看来如果使用同一级别的初始化,执行顺序与编译顺序有关。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 其他


经营许可证编号:宁ICP备18001539号-1