前五节完成了摄像头的图片采集,是基于裸跑方式的。熟悉Zynq的朋友应该都了解,开发Zynq的方式基本有两种:Standalone(裸跑)和Linux。裸跑不带操作系统,所有的操作都是寄存器级的,没有内存映射的概念,优点是可以定制,能够灵活的访问底层地址,针对一些简单的流程控制和算法实现是完全够用的,可以当作一个性能更好的单片机。对于复杂应用和复杂外设,裸跑就显得力不从心了,比如DP显示、USB3.0、VCU视频编解码链路、DPU AI加速器的上层应用等,这些需要复杂的驱动和上层应用支持,虽然有的也可以使用裸跑实现,但用户就是市场,Linux作为开源系统的鼻祖,在系统可靠性与易用性方面对任何自定义的驱动都是降维打击,Xilinx也一直向Linux靠拢,针对Linux的支持一直都在更新迭代,具体可见Petalinux更新日志。所以这两种开发方式各有应用场景,在简单的不涉及复杂外设的情况下,裸跑更合适,开发也更简单;在开发高级应用时,使用Linux更加合理,驱动更加完善,但驱动的开发难度相应的也会更大一些。
站在巨人的肩膀上,才能看的更高,Linux经过无数位工程师的验证,性能稳定,功能强大。Xilinx对Linux的支持基本完备,除了有些自定义的IP核需要用户自己开发驱动外,其他标准的IP核以及标准外设接口都有相应的驱动。本节介绍两个在Zynq视频应用开发过程中用到的最常用的两个框架:V4L2和Gstreamer。
一个USB摄像头插到电脑上,会在设备管理器中看到这个设备,为什么硬件之间连接起来,就会在系统的软件层面看到?这个就是驱动的功劳。同样的在Linux操作系统下插入USB摄像头