在工作中,遇到一个问题:
某一嵌入式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