在linux设备启动时,修改加载设备驱动的顺序

在嵌入式Linux设备中,由于USB摄像头和CMOS摄像头在启动时加载顺序导致设备号不符合应用需求。解决方法是通过修改内核源码中的驱动加载优先级,如将CMOS驱动的加载优先级设置得比USB更高,或者降低USB驱动的优先级。具体步骤包括修改`init.h`文件添加新的优先级,调整驱动文件中的`module_init()`调用,以及更新链接文件`vmlinux.lds.h`。经验证,修改后CMOS摄像头成为/dev/video0,USB摄像头成为/dev/video3,启动顺序得以调整。
摘要由CSDN通过智能技术生成

在工作中,遇到一个问题:

某一嵌入式linux设备带有USB摄像头和cmos摄像头,启动后,都为/dev/video设备,其中USB摄像头为/devvideo0,cmos摄像头为/dev/video3。但是应用层程序中要求USB摄像头为video3,cmos摄像头为video0。所以,现在遇到问题了,当系统启动时,先加载USB摄像头的驱动,所以先生成video0,后加载cmos驱动,生成video3。现在我们需要把顺序修改下:让cmos摄像头驱动先加载,USB摄像头驱动后加载。

方法:1、将cmos摄像头驱动放到USB驱动前面。

    2、将USB摄像头驱动放到cmos后面。

 步骤:

首先,通过万能百度,搜到http://bbs.chinaunix.net/thread-1950216-1-1.html这里的文章,对我有很大启发,并且很有参照意义。

现在,我们知道在内核源码目录中linux-3.0.8/include/linux/init.h,其实linux已经为设备挂载驱动定义了不同的优先级:

194 #define pure_initcall(fn)       __define_initcall("0",fn,0)
195 
196 #define core_initcall(fn)       __define_initcall("1",fn,1)
197 #define core_initcall_sync(fn)      __define_initcall("1s",fn,1s)
198 #define postcore_initcall(fn)       __define_initcall("2",fn,2)
199 #define postcore_initcall_sync(fn)  __define_initcall("2s",fn,2s)
200 #define arch_initcall(fn)       __define_initcall("3",fn,3)
201 #define arch_initcall_sync(fn)      __define_initcall("3s",fn,3s)
202 #define subsys_initcall(fn)     __define_initcall("4",fn,4)
203 #define subsys_initcall_sync(fn)    __define_initcall("4s",fn,4s)
204 #define fs_initcall(fn)         __define_initcall("5",fn,5)
205 #define fs_initcall_sync(fn)        __define_initca
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值