摄像头驱动之实现数据传输5_调试_学习笔记

1、实验

(1)编译好驱动程序,卸载原来的驱动,安装新驱动


(2)查看设备节点


(3)桌面环境下调用xawtv应用程序进行测试(出现段错误)


摄像头驱动之实现数据传输5_调试_学习笔记_第1张图片

(4)查看 之前存储内核信息的文本文件(显示:无法提交urb。因而在提交urb的那段程序存在问题)

摄像头驱动之实现数据传输5_调试_学习笔记_第2张图片

返回值是-22,随便写一个错误的宏(如EIO ),然后搜索内核,可以看出参数存在问题


摄像头驱动之实现数据传输5_调试_学习笔记_第3张图片

(5)如果看不出错误,可以在程序的前面部分加上返回值,判断前面程序的正确性

摄像头驱动之实现数据传输5_调试_学习笔记_第4张图片

(6)重新测试,可以看出在分配和初始化urb时出错



2、实验2

(1)对分配和初始化urb函数的返回值ENOMEM(因为返回值是12),表示分配和初始化内存有问题.

下面程序是分配的urb_buffer是空,但是分配的urb结构体非空,就会出错,因而后面的分配的urb结构体为空才会输出错误,因而后面部分应该加上‘!’符号


(2)当无法操作时,重启虚拟机,切换到root用户,设置打印级别,重新编译,安装驱动

摄像头驱动之实现数据传输5_调试_学习笔记_第5张图片

(3)把内核给我们自动安装的驱动卸载掉(系统重启后,接上usb摄像头,会自动帮我们安装自带的驱动)


(4)安装驱动后出现无法进行下一步操作(查看内核打印信息)

在函数myuvc_video_complete中出错


修改后,还是在此函数中出错


在此函数,每一句话间都加打印语句


摄像头驱动之实现数据传输5_调试_学习笔记_第6张图片


在文件的619行出现错误


函数在for循环里面是处理urb的各个包,处理完后再把buf给删掉。所以这些代码应该在for循环之外来调用。


摄像头驱动之实现数据传输5_调试_学习笔记_第7张图片


3、从linux桌面环境退出时,出现段错误

(1)错误内容


(2)查看 内核打印信息(在myuvc_video_reqbufs出现段错误)


(3)加打印,确认在释放buffer的函数中出现问题


下面是释放buffer的函数(是kfree函数调用有问题,我们申请buffer时是用vmalloc_32的,在别的文件中,释放是用vfree函数释放的)

摄像头驱动之实现数据传输5_调试_学习笔记_第8张图片

你可能感兴趣的:(摄像头驱动)