- 博客(13)
- 收藏
- 关注
原创 NVIDIA DRIVE SDK学习(二)——NvMedia
可以通过使用NvSciBuf API通过NvMedia Tensor属性分配NvSciBuf来创建NvMedia张量。由于NvSciBuf API有助于NvMedia和NVIDIA®CUDA®之间的数据共享,这使得分配的张量可以在NvSciBuf API允许的情况下重复使用。它支持图像聚合操作。NvSciSync组件使得NvMedia组件可以与其他组件保持同步,比如CUDA组件、基于NvSciSync的组件等。立体视差模式:在这种模式下,该模块通过左图像和右图像来产生立体视差,从而进行物体深度测量。
2024-01-09 13:36:07
1086
1
原创 NVIDIA DRIVE SDK学习(一)——整体架构
架构图:图上描述了NVIDIA车载软件架构的整体架构,NVIDIA提供了:英伟达提供的软件整体架构:Hypervisor:Trusted Software server that separates the system into partitions。guest OS:Allocates peripherals that Guest OS needs to control.Services:Services for DRIVE Update.Bootloader:Firmware that ru
2024-01-08 16:15:34
1691
1
原创 ARM架构学习(1)——Exception level
在Armv8.0-A,EL2只能运行在非安全模式下,因为虚拟化实现不支持安全模式,但是Armv8.4-A添加了S.EL2寄存器,所以可以运行在两种模式下;AArch32兼容了老的32位架构,并且从Armv9-A开始,就限制了它只能在EL0下使用,AArch64可以在所有的EL等级下使用。不同后缀的寄存器是独立的、单独的寄存器(虽说功能相同,但是权限不同),在指令集中有自己的编码,并将在硬件中单独实现。**非安全模式:**这种模式只能访问非安全物理地址,和允许非安全访问的寄存器。时通过寄存器来确定的。
2023-12-19 16:01:23
1039
1
原创 gstreamer学习(3)——动态创建pipeline
此博客是在gstreamer官网学习并总结的学习概要,具体参考gstreamer官网教程:动态pipeline惯例,先上官网示例代码:运行结果同时,耳机中会有音频播放(因为这个教程就是只把audio部分播放出来)。信号用来对感兴趣的事件执行某些指定操作,它通过名字区分不同信号,并且每个GObject都有自己的信号。gstreamer有4种states,分别是:需要注意的是,你不能从NULL状态直接流转到PLAYING状态,只能按照NULL --> READY --> PAUSED --> PLAYIN
2023-12-05 18:27:36
132
原创 gstreamer学习(2)——手动创建一个pipeline并运行
此博客是在gstreamer官网学习并总结的学习概要,具体参考gstreamer官网教程:基础教程 2:GStreamer 概念依然先运行官网给的实例,代码在下面(也可以在gstreamer代码中找到):运行结果元素(elements)是gstreamer里面的基础模块,一个最简单的pipeline如下:source元素解析视频数据,通过filter元素,发送给sink模块播放元素类型可参考链接: 简易元素bin是一个可以包含其他元素的元素(它的类型就是GstElement),如何派生出来的:从
2023-12-01 18:13:02
335
1
原创 gstreamer学习(1)——运行第一个hello word
这是基础的编译命令,如果你需要其他的gstreamer组件,可以在后面加上所需组件,比如video组件:gstreamer-video-1.0。host使用Ubuntu 20.04。
2023-11-29 15:28:27
82
1
原创 media controller framework
由调用者持有media device和media devnode,这个函数初始化一个device(实例在devnode里),并将创建的cdev node绑定到这个device上,生成用户态node节点。media devnode驱动的入口函数,调用了alloc_chrdev_region和bus_register创建media总线。在media devnode注册之后(调用media_devnode_register成功之后),open才会有效。调用media devnode的ioctl回调。
2023-11-17 15:43:54
111
原创 V4L2 subdev & video device
在用户态打开video device的node,然后通过ioctl来调用内核态操作的时候,会调用到这个ioctl_ops。驱动不会调用这些接口,只有v4l2 framework会调用这些ops。配置要调过每帧前几行或者前几帧。
2023-11-14 16:21:02
137
原创 V4L2-core(基于linux5.4.258)
作为用户态设备节点往内核态调用的入口,调用对应设备节点 私有数据里面video device成员的fops。video device的ops调用流程与subdev的调用流程相似,区别在于,在调用。:flash LED驱动,包含subdev,media,ctrl, async功能。: 创建v4l2的class,分配cdev的主设备号,videoX设备节点是在。,如果是用户自定义的控制字,则调用用户自定义的ioctl回调。以及cdev的fops实现。:根据不同的设备类型,创建不同的cdev设备节点。
2023-10-31 19:21:58
303
1
原创 vivid驱动 —— virtual video test driver
vivid驱动程序probe回调,根据驱动入参创建devs,调用vivid_create_instance创建设备节点。一些v4l2控制句柄以及要创建的video设备节点,vivid驱动 中所有类型的设备都有video设备节点。: 有几个输入设备,默认4个:0 = WEBCAM, 1 = TV, 2 = SVID, 3 = HDMI。每个类型的设备节点的能力集,组合起来就是当前vivid设备的能力集。vivid驱动入口,注册vivid设备和vivid驱动。vivid驱动实际入口,创建vivid设备节点。
2023-10-16 18:04:17
186
原创 DMA-BUF
模块初始化函数,注册dma_buf_fs,初始化db_list,初始化debugfs。初始化一个attach节点,并把它加入到dmabuf的attachments列表中。成功会返回&dma_buf的指针,失败会返回一个负数(通过ERR_PTR包装)。创建一个dmabuf,并把它关联到一个anon file上,以便暴露这块内存。锁住一块dmabuf。从系统中获取一个可用的fd,并把它跟dmabuf->file绑定起来。调用用户定义的unmap_dma_buf回调。调用用户定义的map_dma_buf回调。
2023-10-13 15:41:38
331
原创 DMA FENCE
调用函数__dma_fence_enable_sw_signaling,判断当前fence有没有被signaled,如果没有,调用用户自定义函数: ops->enable_signaling函数,如果使能失败,则signal当前fence。该函数会调用dma_fence_signal_locked,除此之外,还会调用dma_fence_begin/end_signalling和spin_lock/unlock_irqsave函数。fence的引用计数减1,当减到0时,调用release函数释放fence。
2023-10-11 19:18:45
260
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人