1、往期回顾
(1)根据描述符可知道摄像头支持哪几种格式(YUV、RGB、MJPEG)的视频数据,某一种格式下有哪几种分辨率(4:3),摄像头是否支持某些属性。
(2)我们在PC上做实验,为了看到内核打印(printk)的信息,我们用的是dmesg命令。这 种方法有两个缺点:一个是需要不断输入dmesg命令,另一个是驱动程序有问题,导致内核崩溃,就没有机会执行dmesg命令。所以要把输出方式改为文件输出。
2、把输出方式改为文件输出
设置ubuntu让它从串口0输出printk信息
a. 设置vmware添加serial port, 使用文件作为串口(不使用物理串口,因为输出信息比较慢,所以输出到文件(以.txt为文件后缀))
b. 启动ubuntu,修改/etc/default/grub(开机引导文件)
GRUB_CMDLINE_LINUX_DEFAULT=""
GRUB_CMDLINE_LINUX="console=tty0 console=ttyS0,115200n8"//console=ttyS0是指从串口0(波特率是115200,n表示没有校验位,数据位是8)输出信息,console=tty0是指从终端0输出信息
sudo update-grub//grub是启动引导文件,因而更新
sudo reboot //重启系统(然后查看我们输出的.txt的log文件)
dmesg命令可以查看内核打印信息,但是信息同步不到我们之前设置的.txt文件
//修改内核打印级别,把4改成8,就可以打印所有的信息,为0时禁止打印信息。
//用su命令切换到root用户,但是切换后不成功,因为ubuntu禁止root用户登录。
c. ubuntu禁止root用户登录
先修改root密码: sudo passwd root (重新修改密码后就可以切换为root用户)????
然后执行"su root"就可以用root登录了
退出ROOT模式的话,可以输入exit 回车
Ctrl + D
Ctrl + C是终止正在执行的命令。
& 是用于使进程在后台运行
d. echo "8 4 1 7" > /proc/sys/kernel/printk
//修改内核打印级别,把4改成8,就可以打印所有的信息,为0时禁止打印信息。
int console_printk[4] = {
DEFAULT_CONSOLE_LOGLEVEL, 终端级别
DEFAULT_MESSAGE_LOGLEVEL, 默认级别
MINIMUM_CONSOLE_LOGLEVEL,让用户使用的最小级别
DEFAULT_CONSOLE_LOGLEVEL, 默认终端级别
};
再次重启后,只要执行这2个命令就可以:
su root //切换到root用户
echo "8 4 1 7" > /proc/sys/kernel/printk
3、写代码
(1)框架
1.构造一个usb_driver
2.设置
probe:
2.1. 分配video_device:video_device_alloc
2.2. 设置
.fops
.ioctl_ops (里面需要设置11项)
如果要用内核提供的缓冲区操作函数,还需要构造一个videobuf_queue_ops
2.3. 注册: video_register_device
id_table: 表示支持哪些USB设备(逻辑上的设备(接口))
3.注册: usb_register
(2)调用过程
file_operation结构体(myuvc_fops)里面的open函数调用ioctl函数(video_ioctl2)
ioctl函数调用_video_do_ioctl函数从而调用v4l2_ioctl_ops结构体
A7 APP调用该ioctl让驱动程序分配若干个缓存, APP将从这些缓存中读到视频数据
A8 查询缓存状态, 比如地址信息(APP可以用mmap进行映射)
A9 把缓存映射到APP的空间,以后APP就可以直接操作这块缓存
A10 把缓冲区放入队列, 底层的硬件操作函数将会把数据放入这个队列的缓存
A11 启动传输
应用程序怎么知道缓冲区里面有数据,利用poll函数
摄像头驱动之实现数据传输1_框架_学习笔记
- 点赞
- 评论
- 收藏
- 手机看
分享到微信朋友圈
x扫一扫,手机阅读
-
打赏
qq_42230338的博客
08-12 46
USB摄像头驱动之实现数据传输2_实现简单函数
小菜鸟的脚印
08-02 7740
海康 网络摄像头 多摄像头数据传输及流解码
qingkongyeyue的博客
01-18 1839
摄像头驱动之实现数据传输4_URB_学习笔记
基于S3C2440的网络浏览摄像头实现详细步骤
04-10摄像头拍照上传到服务器保存到数据库
USB摄像头视频传输方案!
如何将海康的摄像头数据传给自己写的人脸识别的demo里?
关于海康摄像头rtsp视频流传输的问题
...驱动1_V4L2框架分析学习笔记_运维_qingkongyeyue的..._CSDN博客
5-2
摄像头驱动之实现数据传输5_调试_学习笔记_运维_qingkongyeyue的...
3-24
请教一个摄像头数据传输的问题
USB摄像头驱动之实现数据传输2_实现简单函数_运维_qq_4..._CSDN博客
4-4
...数据,并实时传输到客户端,延迟大概40ms左右_运维_Mr..._CSDN博客
5-3
qingkongyeyue的博客
12-03 1115
摄像头驱动1_V4L2框架分析学习笔记
Python大本营的博客
03-26 2万+
“程序员数学不行,干啥都不行!”高级开发:90%都是瞎努力!
linux驱动编写(摄像头驱动)_运维_平凡的程序员-CSDN博客
5-5
自己写的uvc摄像头驱动程序_运维_zhangjianjun521的博客-CSDN博客
5-7
CJOK's blog
05-11 1万+
V4L2框架分析学习
4.USB摄像头驱动框架分析_运维_LingXiaokai的博客-CSDN博客
4-10
OV5640摄像头模块FPGA驱动及HDMI显示_运维_dongze2的博客-CSDN博客
5-5
usb摄像头的出来数据格式问题?
chinabinlang的专栏
04-08 559
读取PC端摄像头数据并进行编码和流媒体传输
如何获取usb接口摄像头采集的图像数据
请问从USB摄像头读取的原始数据如何转换成图像
怎么实现USB摄像头远程监控
qingkongyeyue的博客
01-19 645
摄像头驱动之实现数据传输5_调试_学习笔记
qq_42230338的博客
08-12 43
USB摄像头驱动之实现数据传输3_设置参数
Mr0cheng的专栏
09-27 3028
捕捉摄像头数据,并实时传输到客户端,延迟大概40ms左右
bo_的博客
03-29 285
JZ2440- USB 摄像头
EasyNVR官方技术博客
03-06 1289
如何实现摄像头监控数据实时存储及传输?
beike1的博客
06-24 4299
基于H264-USB摄像头的RTP实时视频的传输
小棋学编程的博客
01-06 1万+
从调试数据分析USB通信协议——UVC摄像头【UVC类设备】(五)
游戏人生的专栏
12-23 1万+
摄像头视频采集压缩及传输
如何获得摄像头采集到的数据格式?
如何将摄像头的数据通过耳机线传输到手机上
我的嵌入式
11-24 2702
USB摄像头驱动的移植 linux
ztshun的专栏
08-20 2696
jz2440裸板移植内核驱动,实现uvc摄像头驱动中经验总结
11-21 233
Linux USB摄像头驱动【转】
qingkongyeyue的博客
01-18 655
摄像头驱动之实现数据传输2_简单函数_学习笔记
baixingzhi2917的博客
04-19 36
驱动摄像头的三种方式
Mr.Monster的博客
07-26 8422
C++网络摄像头数据的获取与显示 (续)
似水流年
04-15 2460
ffmpeg--学习笔记(二)-将电脑的摄像头数据传输到服务器上去
01-18 2346
关于获取监控摄像头数据。车联网
wing12345678910的博客
01-18 909
ffrost:能不能通过编程实现
dwy_qiang:感谢,早点看到你这篇文章就不用晕了
lubing20044793:运行地址不一定定于链接地址!
qq_41966633:[reply]u013427969[/reply]哦哦哦,谢谢谢谢
u013427969:[reply]qq_41966633[/reply]YUV420P 4:1:1 所以转灰度要么把后面的色度值转为无色(128) 要么直接取前面灰度Y分量 Y分量大小是w*h 所以后面的u、v分量大小合计就是w*h/2