从学校里出来,到公司实习,已经快半年了。感觉这半年里学的东西,比学校里两年学到的还要多。现在觉得在学校好自由,没人管,想干吗就干吗。初到索玛,被分配到的是Linux驱动这块工作。以前在学校,也只是象征性的在VM上跑了下Linux,真正的系统是没有跑过的,等于是没有用过。第一次用,跟用Windows没什么区别,因为命令都不会,更不用说在上面写驱动了。现在想想,都好象还是昨天的事情。年后回来,工作调度,我不再负责Linux驱动的编写,而是负责XINE和Gstreamer解码库。现在手头上做的事,已经不是Linux下的活了,已经转到了Windows下,要用到DDK。
家里有个摄像头,一直想把它在Linux下驱动起来,随后就开始动手写了,那是3月底的事情了,那时我已经不负责Linux驱动了。写程序,定框架很重要,可以说是第一步。当然那些小的测试程序是不用搭框架的。框架定下来以后,功能模块就定下来了,虽然Linux是用C写的,但是写程序的思想,还是要借鉴C++,毕竟面向对象的才是好的,且清晰。我在我的摄像头驱动里,一共分了4个模块:主调用模块、URB模块、V4L2模块、配置芯片模块。然后把接口定义好,在主调用模块里调用就是了,呵呵,就和C++里的类一样。
在编写的过程中,失败过两次,原因都是没有定框架,结果都是写到后面就写不下去了,感觉像进了汪洋大海,顿时迷失了方向。其实写这个驱动之前,我也没多想,只是想:我一定能行的。自信心很重要。自己都没信心,还指望什么呢。作为程序员,写代码是家常便饭,写的多了,自然就会有感觉。我很感谢我们软件组的组长,他说的话,对我来说,是很受用的。
这个驱动代码,主要是参考了内核自带的OV511以及ZC0301源码,还有曹荣荣的BLOG(caorr.cublog.cn)。代码的coding时间,花了大概7个晚上;随后的测试和修改,花了大概也有个3、4个晚上吧。平时实在是没时间,只能利用晚上时间来做点自己喜欢做的事情。编写过程中出现的问题,在此就不一一列出,因为我遇到的,你不一定遇到。原则只有一个:遇到问题,就要搞定它。这也是积累。这个驱动只在FC8 2.6.24.3下测试过,其他版本没有测试过。这个驱动只适用于专用设备,在Linux下插上摄像头,然后执行"lsusb",看看你的摄像头的PID/VID是不是0x0ac8/0x301,如果是话,刚好可以用。在用之前,必须先卸载系统自动加载的驱动,名叫:zc0301,执行"lsmod"就可以看看它是否已经加载了。还要提一点,一定要进root用户,普通用户即使加载了驱动,摄像头也是不能用的。对此问题,网上有解决的方法,但我没去试过。秉承Linux开源精神,我也上传代码。
下一步打算写个基于V4L2的音频设备驱动,只是没有合适的外设。音频应该比视频简单,所以我认为,搞定它是没问题的。
上张图,这是用FC8自带的ekiga拍的。MPlayer也可以测摄像头,图就不上传了。
最近刚好是四川大地震,在这里祈祷灾区人民,四川加油,中国加油
摄像头代码:
|
文件: |
摄像头驱动源码.rar |
大小: |
43KB |
下载: |
下载 | |
阅读(1846) | 评论(2) | 转发(0) |