Perf生成火焰图分析程序性能 1.一般linux系统自带perf,没有需要安装,没有需要安装。out.svg即火焰图,用浏览器打开。2.额外安装FlameGraph。(根据执行程序修改--后面内容)需要把运行库so拷贝到系统目录。
瑞芯微RK3588 camera驱动总结三调试 先介绍一些很有用的指令用于打印设备的媒体管道拓扑结构。媒体管道拓扑结构描述了多媒体设备内部各组件之间的连接关系,包括视频输入、视频输出、编码器、解码器、ISP(图像信号处理器)等组件之间的连接。这二个子指令可以查看具体的rkisp_mainpath和rkisp_selfpath查找并显示目录下所有video*子目录中的name文件内容的命令。这个命令可以帮助你快速了解系统中有哪些视频设备,并且每个设备的名称是什么。3.这几个v4l2的指令也很有用列出系统中所有可用的视频设备及其相关信息。
FFmpeg的安装目录make install -prefix=./ffmpeg_install,及会将编译的生成库放到此目录下。--prefix,这样make install就不会影响系统目录了。这样我的lib和inc就获取到了。其余的就丢到build中了。只需要看看configure,找到相关的变量就知道了。如果不进行配置,默认按照到系统目录/usr下。用于将编译好的程序和库安装到系统的指定目录。在运行./configure时,只需要制定。然后我们想要什么东西,就制定相应的目录。FFmpeg 的构建目录中运行。例如我这里需要so库和h头文件。
瑞芯微RK3588显示驱动总结一 先来看看瑞芯微RK3588支持哪些接口支持两个 HDMI/eDP TX Combo PHY支持两个 MIPI D-PHY/C-PHY Combo PHY TX支持两个 DP1.4 TX PHY(和 USB3.0 Combo)支持一个 16bit BT1120 输出接口以上这就是具体的硬件输出接口。在送到输出接口,有个视频输出处理,即VOP(Video Output Processor)。框架如下。
RK3588上手之网络Ethernet 调试 在板级文件中打开设置kernel/arch/arm64/boot/dts/rockchip/rk3588-firefly-aio-3588q.dtsi。使用ping -I eth0 -c 10 168.168.100.149来测试联通性,如果不指定eth0,有可能是ping不通的。注意这里网线有些是千兆、有些是百兆,只有用千兆网线才会显示千兆网哟。如果是直连电脑,一般是需要设置IP地址的,连接路由器会自动分配。如果是参考设计,一般不用动,只需要设置okay就行。输入指令ifconfig。
RK3588上手踩坑之启动卡死2 认真看了下文档,要求是22以上版本,果断换了ubuntu2204,一把编过,就是buildroot也是下载编好了。个人觉得还是用各大开发板商提供的核心板,毕竟经过了严格测试,还有一定的技术支持,少走些弯路。RK3588的SDK瑞芯微是没有开放的,这点太坑了,又想推广芯片,又要立牌坊。一番折腾,验证了自制硬件板是好的。自己画的板子,firefly的系统是不让用的,应该是在内核加了锁。各种检查,核对pin表和dts,检查了几遍,没啥问题。同事开发了一块RK3588Q,记录下上手的踩坑过程。崩溃了,问题出在哪?
RK3588 camera驱动总结二之图像格式 在驱动中有个重要的参数mbus-code,即Media Bus Pixel Codes,它描述的是用于在物理总线上传输的格式,比如 sensor 通过mipi dphy 向 isp 传输的图像格式,或者在 ISP 内部各子模块间传输的格式。对应Mbus-code,还有个重要的图像格式FourCC,全称 Four Character Codes,它用 4 个字符(即 32bit)来命名图像格式,存储在 Memory 中的图像格式。也有可能不支持的格式转换,具体看驱动的实现和camera的支持。
瑞芯微RK3588驱动设计之DVP并口摄像头2 sensor_register这个是camera的寄存器设置,厂商调好的,一般不动。根据相应的选择配置就行。比如上面使用c2145->framesize_cfg[0]--------gc2145_dvp_framesizes[0]----gc2145_dvp_svga_20fps。BT601和BT656/BT1120的区别就是前者有行长同步信号,后者没有, 行场同步信号嵌入在数据流中。指定数据的排列,这里用MEDIA_BUS_FMT_UYVY8_2X8。这里看看驱动的具体实现,以gc2145为例。
RK3588 camera驱动总结一 3. 当dphy0_hw使用full mode时,链路需要按照csi2_dphy1这条链路来配置,但是节点名称csi2_dphy1需要修改为csi2_dphy0,软件上是通过phy的序号来区分phy使用的模式。3. 当dphy1_hw使用full mode时,链路需要按照csi2_dphy4这条链路来配置,但是节点名称csi2_dphy4需要修改为csi2_dphy3,软件上是通过phy的序号来区分phy使用的模式。1. full mode:节点名称使用csi2_dphy0,最多支持4 lane。
瑞芯微RK3588 MIPI CSI接6路imx464驱动 拆分成2个phy使用,分别为csi2_dphy1(使用0/1 lane)、csi2_dphy2(使用2/3 lane),每个phy最多支持2 lane。拆分成2个phy使用,分别为csi2_dphy4(使用0/1 lane)、csi2_dphy5(使用2/3 lane),每个phy最多支持2 lane。rk3588支持2个dphy硬件,这里我们称之为dphy0_hw/dphy1_hw。这里使用二个摄像头共用一路i2c,注意,如果摄像头的pin没有配置对,会导致i2c挂载出错。imx464的驱动使用官方的。
瑞芯微RK3588 PCIE外接国产千兆网YT6801 这里我们是YT6801,直接采用的外供电,不去控制,就可以不用设置vpcie3v3-supply,reset-gpios这个是必须设置的,对应的是PERST_N。YT6801是裕太微电子开发的一款国产千兆PCIE以太网控制器芯片,可作为RK3588的PCIE外扩网口使用。例如使用3个PCIe 2.0 1Lane拓展出三路网口,加上本身的二个网口,就可以组成五个网口了。这个是pcie的dts推荐配置,根据自己的实际设计可以进行修改。如此dts的配置就好了,通过lspci应该就可以看到设备了。
linux内核驱动在本机编译与交叉编译 交叉编译时在make指令需要指定ARCH=$(ARCH) CROSS_COMPILE=$(CROSS_COMPILE),表示是交叉编译。重点的交叉编译需要指定EXTRA_CFLAGS ,将需要的头文件包含进来,主要是asm一类的头文件。把下面的包含了基本就行了。KSRC 指linux目录,本机编译在/lib/modules/下,交叉编译根据linux源码目录来;linux内核驱动具有通用性,可以在内核驱动中跟随系统一同编译,也可以通过模块形式编译。这里介绍写在模块形式编译时本机编译与交叉编译的配置。
瑞芯微RK3588驱动配置之DVP并口摄像头1 在瑞芯微的早期芯片都是用的cif接口来描述,实际就是连接的dvp接口。如果是8位线宽,一般就是YUYV、UYVY来传输数据,如果是16位线宽,一般就是8位Y数据,8位UV数据传输。因为瑞芯微的大部分芯片都支持DVP摄像头,配置都大同小异,这里以当下最流行的RK3588为例,从文档资料中我们可以看到对DVP的支持能力。下面就是核心的配置了。挂载在i2c下,不管摄像头有没有用到i2c,必须挂载在i2c下,因为驱动的设计就是这样的,走这个总线最方便。在实际的传输中,还有内同步外同步的区别,这根据使用的摄像头来。
RK3588上手踩坑实录 好,下载不了是吧,我在buildroot里面给你屏蔽先,继续运行,又是各种Duang,白白折腾二天,库没下全,编译不成功,闹心。原来编译内核,既生成了boot.img ,又生成了extboot.img,但是需要用到的是extboot.imx。仔细看打印消息,发现内核编译时间还是旧的,这时候怀疑没有烧写成功,重复一次,依然不行。拿到板子,首先上个电,默认烧写的貌似是ubuntu,我想用Linux,直接重新烧写。先下个buildroot的固件。重启,嗯,啥反应都没有,现象还是卡死在pcie,破防了。
拉取VLC推流故障解决记录 1.今天在使用ffmpeg拉取VLC推流,刚开始测试好的,再次测试,发现怎样都没法拉取,然后ffmpeg的状态也很诡异,不报错,也没任何动作,关闭VLC后在此开启推流也无法运行。折腾好半天,还是没法拉取,重启电脑后,又行了,在测试又不行了,这时候怀疑VLC的问题,查看任务管理器,发现VLC还有后台主流,将它关闭后,再次开启,ffmpeg拉流成功。
纯C读取文件实现解析H264裸流每一帧数据 imx的例程是设置一个大的缓冲区,一次性读入不超过10M字节数据,然后全部送到解码器进行解码,对于小于10M字节的视频数据确实很方便的解码了,但是文件大了这种方式就不行了。首先分析下H264裸流文件,发现每一帧数据的起始码是00 00 00 01,那么就可以利用这个起始码来拆分每一帧数据。代码很简单,就是持续读取文件,碰到00 00 00 01则表示一帧读完,然后把这一帧数据送到解码器处理即可。还有一种处理方式是使用FFMpeg来读取每一帧数据,然后送入解码器,是可行的。
使用FFmpeg开发2-比特流过滤器 在mp4(H264编码)文件中,一般使用的是AVVC格式,因为封装了同步信息,就去掉了上述的起始码,如果见数据直接丢到解码器,解码器是没法找到数据头进行解码的,因此需要过滤器来为数据加上这个起始码。这里给出一个实现参考,从imx的hantro中抠出来的,从中也可以一窥用法,支持的FFmpeg版本比较旧,有时间再整理下新版的代码。在wrap的使用博文中介绍了裸流解码,这时候如果搭配了FFmpeg的过滤器,即可以实现读取mp4文件,通过过滤器分离出裸H264数据,然后送到解码器解码,实现对封装数据的解码。
imx VPU解码分析5-Linux视频VPU设备驱动hantro Linux内核驱动源文件在kernel/drivers/mxc下,在hantro库中也发现有这个驱动,文件在hantro/decoder_sw/software/linux/pcidriver。这里以内核中的驱动文件为主,后面再看二者的差别。vpu的使用依赖驱动,驱动名称是hantro,在设备节点中为/dev/mxc_hantro。前文提到二个驱动文件,经过对比,发现基本一致,感觉是版本升级了,内核这个比较新。主要函数就是设备检测函数hantro_dev_probe。这个设备树描述了VPU的信息。
imx VPU解码分析4-抽丝剥茧wrap与hantro的关系 前面已经分析了wrap和hantro,但是二者是如何结合的,wrap是如何封装hantro的,提供了哪些接口,封装了哪些细节还不太清楚,此文来探究下。
使用FFmpeg开发简介1 适逢FFmpeg6.1发布,准备深入学习下FFmpeg,将会写下系列学习记录。这个install文件,实际就相当于一个ffmpeg的sdk了,利用它就开发自己的程序了。重点看看头文件中的函数,究竟给我们提供了怎样的接口函数、怎么使用就是难点了。以前在某个地方看到说so库的后缀中可以看到版本号,从ffmpeg的lib中看到这个不一致,也就是这个规则不存在的。二次开发则需要编译出的库。