自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(57)
  • 资源 (3)
  • 收藏
  • 关注

原创 Perf生成火焰图分析程序性能

1.一般linux系统自带perf,没有需要安装,没有需要安装。out.svg即火焰图,用浏览器打开。2.额外安装FlameGraph。(根据执行程序修改--后面内容)需要把运行库so拷贝到系统目录。

2024-10-10 17:22:05 460

原创 瑞芯微RK3588 camera驱动总结三调试

先介绍一些很有用的指令用于打印设备的媒体管道拓扑结构。媒体管道拓扑结构描述了多媒体设备内部各组件之间的连接关系,包括视频输入、视频输出、编码器、解码器、ISP(图像信号处理器)等组件之间的连接。这二个子指令可以查看具体的rkisp_mainpath和rkisp_selfpath查找并显示目录下所有video*子目录中的name文件内容的命令。这个命令可以帮助你快速了解系统中有哪些视频设备,并且每个设备的名称是什么。3.这几个v4l2的指令也很有用列出系统中所有可用的视频设备及其相关信息。

2024-09-01 18:46:13 1834

原创 FFmpeg的安装目录make install

-prefix=./ffmpeg_install,及会将编译的生成库放到此目录下。--prefix,这样make install就不会影响系统目录了。这样我的lib和inc就获取到了。其余的就丢到build中了。只需要看看configure,找到相关的变量就知道了。如果不进行配置,默认按照到系统目录/usr下。用于将编译好的程序和库安装到系统的指定目录。在运行./configure时,只需要制定。然后我们想要什么东西,就制定相应的目录。FFmpeg 的构建目录中运行。例如我这里需要so库和h头文件。

2024-08-02 16:20:30 380

原创 瑞芯微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)。框架如下。

2024-07-23 15:12:04 1567

原创 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。

2024-07-08 16:48:12 1158

原创 RK3588上手踩坑之启动卡死2

认真看了下文档,要求是22以上版本,果断换了ubuntu2204,一把编过,就是buildroot也是下载编好了。个人觉得还是用各大开发板商提供的核心板,毕竟经过了严格测试,还有一定的技术支持,少走些弯路。RK3588的SDK瑞芯微是没有开放的,这点太坑了,又想推广芯片,又要立牌坊。一番折腾,验证了自制硬件板是好的。自己画的板子,firefly的系统是不让用的,应该是在内核加了锁。各种检查,核对pin表和dts,检查了几遍,没啥问题。同事开发了一块RK3588Q,记录下上手的踩坑过程。崩溃了,问题出在哪?

2024-06-24 16:13:07 1354

原创 RK3588 camera驱动总结二之图像格式

在驱动中有个重要的参数mbus-code,即Media Bus Pixel Codes,它描述的是用于在物理总线上传输的格式,比如 sensor 通过mipi dphy 向 isp 传输的图像格式,或者在 ISP 内部各子模块间传输的格式。对应Mbus-code,还有个重要的图像格式FourCC,全称 Four Character Codes,它用 4 个字符(即 32bit)来命名图像格式,存储在 Memory 中的图像格式。也有可能不支持的格式转换,具体看驱动的实现和camera的支持。

2024-05-28 09:53:45 875

原创 瑞芯微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为例。

2024-05-15 16:42:09 1338

原创 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。

2024-05-14 14:54:29 2145

原创 瑞芯微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的驱动使用官方的。

2024-05-07 09:34:39 435

原创 瑞芯微RK3588 PCIE外接国产千兆网YT6801

这里我们是YT6801,直接采用的外供电,不去控制,就可以不用设置vpcie3v3-supply,reset-gpios这个是必须设置的,对应的是PERST_N。YT6801是裕太微电子开发的一款国产千兆PCIE以太网控制器芯片,可作为RK3588的PCIE外扩网口使用。例如使用3个PCIe 2.0 1Lane拓展出三路网口,加上本身的二个网口,就可以组成五个网口了。这个是pcie的dts推荐配置,根据自己的实际设计可以进行修改。如此dts的配置就好了,通过lspci应该就可以看到设备了。

2024-04-07 09:44:41 2539

原创 linux内核驱动在本机编译与交叉编译

交叉编译时在make指令需要指定ARCH=$(ARCH) CROSS_COMPILE=$(CROSS_COMPILE),表示是交叉编译。重点的交叉编译需要指定EXTRA_CFLAGS ,将需要的头文件包含进来,主要是asm一类的头文件。把下面的包含了基本就行了。KSRC 指linux目录,本机编译在/lib/modules/下,交叉编译根据linux源码目录来;linux内核驱动具有通用性,可以在内核驱动中跟随系统一同编译,也可以通过模块形式编译。这里介绍写在模块形式编译时本机编译与交叉编译的配置。

2024-03-31 22:18:21 373

原创 瑞芯微RK3588驱动配置之DVP并口摄像头1

在瑞芯微的早期芯片都是用的cif接口来描述,实际就是连接的dvp接口。如果是8位线宽,一般就是YUYV、UYVY来传输数据,如果是16位线宽,一般就是8位Y数据,8位UV数据传输。因为瑞芯微的大部分芯片都支持DVP摄像头,配置都大同小异,这里以当下最流行的RK3588为例,从文档资料中我们可以看到对DVP的支持能力。下面就是核心的配置了。挂载在i2c下,不管摄像头有没有用到i2c,必须挂载在i2c下,因为驱动的设计就是这样的,走这个总线最方便。在实际的传输中,还有内同步外同步的区别,这根据使用的摄像头来。

2024-02-20 10:27:04 2448 2

原创 RK3588上手踩坑实录

好,下载不了是吧,我在buildroot里面给你屏蔽先,继续运行,又是各种Duang,白白折腾二天,库没下全,编译不成功,闹心。原来编译内核,既生成了boot.img ,又生成了extboot.img,但是需要用到的是extboot.imx。仔细看打印消息,发现内核编译时间还是旧的,这时候怀疑没有烧写成功,重复一次,依然不行。拿到板子,首先上个电,默认烧写的貌似是ubuntu,我想用Linux,直接重新烧写。先下个buildroot的固件。重启,嗯,啥反应都没有,现象还是卡死在pcie,破防了。

2023-12-26 09:42:53 1729 1

原创 拉取VLC推流故障解决记录

1.今天在使用ffmpeg拉取VLC推流,刚开始测试好的,再次测试,发现怎样都没法拉取,然后ffmpeg的状态也很诡异,不报错,也没任何动作,关闭VLC后在此开启推流也无法运行。折腾好半天,还是没法拉取,重启电脑后,又行了,在测试又不行了,这时候怀疑VLC的问题,查看任务管理器,发现VLC还有后台主流,将它关闭后,再次开启,ffmpeg拉流成功。

2023-12-11 17:01:38 452

原创 纯C读取文件实现解析H264裸流每一帧数据

imx的例程是设置一个大的缓冲区,一次性读入不超过10M字节数据,然后全部送到解码器进行解码,对于小于10M字节的视频数据确实很方便的解码了,但是文件大了这种方式就不行了。首先分析下H264裸流文件,发现每一帧数据的起始码是00 00 00 01,那么就可以利用这个起始码来拆分每一帧数据。代码很简单,就是持续读取文件,碰到00 00 00 01则表示一帧读完,然后把这一帧数据送到解码器处理即可。还有一种处理方式是使用FFMpeg来读取每一帧数据,然后送入解码器,是可行的。

2023-11-30 16:23:43 1764 2

原创 使用FFmpeg开发2-比特流过滤器

在mp4(H264编码)文件中,一般使用的是AVVC格式,因为封装了同步信息,就去掉了上述的起始码,如果见数据直接丢到解码器,解码器是没法找到数据头进行解码的,因此需要过滤器来为数据加上这个起始码。这里给出一个实现参考,从imx的hantro中抠出来的,从中也可以一窥用法,支持的FFmpeg版本比较旧,有时间再整理下新版的代码。在wrap的使用博文中介绍了裸流解码,这时候如果搭配了FFmpeg的过滤器,即可以实现读取mp4文件,通过过滤器分离出裸H264数据,然后送到解码器解码,实现对封装数据的解码。

2023-11-29 22:17:14 704

原创 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的信息。

2023-11-23 15:26:54 380

原创 imx VPU解码分析4-抽丝剥茧wrap与hantro的关系

前面已经分析了wrap和hantro,但是二者是如何结合的,wrap是如何封装hantro的,提供了哪些接口,封装了哪些细节还不太清楚,此文来探究下。

2023-11-21 16:14:13 227

原创 使用FFmpeg开发简介1

适逢FFmpeg6.1发布,准备深入学习下FFmpeg,将会写下系列学习记录。这个install文件,实际就相当于一个ffmpeg的sdk了,利用它就开发自己的程序了。重点看看头文件中的函数,究竟给我们提供了怎样的接口函数、怎么使用就是难点了。以前在某个地方看到说so库的后缀中可以看到版本号,从ffmpeg的lib中看到这个不一致,也就是这个规则不存在的。二次开发则需要编译出的库。

2023-11-12 23:05:37 947

原创 嵌入式CTS测试

CTS是一套开源测试套件,可以实现对OpenGL、ES、OpenCL、Vulkan的兼容性测试。OpenGL ES CTS的测试集,其测试用例涵盖了各种OpenGL ES 的功能和特性。这些功能包括着色器编译和链接、图元绘制、纹理操作、帧缓冲操作、深度测试、模板测试以及其他一些图形渲染相关的功能。通过执行这些测试用例,可以验证OpenGL ES实现在各种情况下的正确性和一致性。

2023-11-11 10:46:50 473

原创 适用于嵌入式arm的ffmpeg编解码

现在ffmpeg更新较频繁,如果使用API开发,各个版本都有一定区别,建议查阅文档。如果只需要ffmpeg的命令行,就不用理会了,直接上最新的。在嵌入式arm应用开发中,经常会遇到需要处理视频的情况,这时候就需要强大的开源工具ffmpeg出马了。这里的ffmpeg只具备了解码的功能,如果还需要264等编码功能,还需要安装x264库,这里就不细说了,网上很多教程。ffmpeg的编译系统做得特别好,基本兼容各类型环境,不管是x86还是arm,都可以顺利编译通过。将生成的so库拷贝到系统目录下,执行程序即可。

2023-10-27 12:15:28 1167

原创 imx VPU解码分析3-wrap的示例

主函数在test_dec_arm_elinux.c中,进行一些参数的解析,在decode_stream.c中处理具体的wrap解码过程。我在编译时发现把编译器库路径添加上,会报一些莫名的错误,这里还是不多搞操作,使用编译器环境的environment-setup设置下。这几个所需要的库文件抠出来,编译器目录里面有,我下载的 imx-vpuwrap库也带了,或者在开发板里面抠出来。vpu_wrapper.h这个文件就是我们的wrap库的头文件了,基本对应了在imx VPU解码分析1中的介绍。

2023-09-20 17:01:19 243

原创 imx VPU解码分析2-hantro

今天来总结下imx-vpu-hantro的具体实现。

2023-09-14 16:38:31 384

原创 imx VPU解码分析1-wrap

主要有二个库,一个是imx-vpuwrap,另一个是imx-vpu-hantro。我是这么理解的,imx-vpu-hantro是更底层的代码,imx-vpuwrap是封装层实现。本篇介绍vpuwrap的解码,参阅vpu_wrapper.h。

2023-08-27 20:36:22 507

原创 嵌入式视频摄像头接口

MIPI-CSI(MIPI Camera Serial Interface)接口是面向摄像头和图像传感器的专用接口,具备高速、高分辨率图像传输的能力。常见的DVP接口包括8位DVP和16位DVP,其中8位DVP使用8条信号线进行数据传输,使用BT656协议,而16位DVP则使用16条信号线,使用BT1120协议。使用USB免驱的UVC协议,随时接入。视频接口多种多样,有输入的,有输出的,本期总结下常用的摄像头接口,模拟摄像头在arm上使用一般都要经过接口转换成数字信号采集,这里只考虑数字摄像头。

2023-07-13 11:09:28 1668

原创 QT基本变量关键字模块

public、private、protected:控制类成员变量和函数的访问权限,public表示可以被其他类和对象访问,private表示只能被当前类的成员函数访问,protected表示只能被当前类和它的派生类的成员函数访问。Qt UI Tools 用于在运行时动态加载Qt Designer中创建的,继承QWidget的表单的子类。Qt Positioning 提供卫星定位系统的信息(GPS),和区域监视的访问的类。Qt Quick 一个声明性框架,用于构建具有自定义用户界面的高度动态的应用程序。

2023-07-11 15:24:13 197

原创 嵌入式Linux下tc358743的驱动设计

设备树配置的名字得和这个驱动名称一致,就是compatible属性tc358743还是tc358749。总之,这个结构体用于组织和管理TC35874X设备的各种状态信息和控制参数。因为内核已经有了这个官方给的驱动,不需要再折腾,所有直接menuconfig配置上就行了。它包含了一系列成员变量和控件,用于管理并存储TC35874X设备的状态。等,其中一些成员变量与设备的配置、控制、信号处理等相关。最重要的就是probe函数了,基本的初始化配置都是在这里实现的。可以看出tc358743的功能还是很强大的。

2023-07-07 15:49:50 1468 2

原创 嵌入式系统之内存管理

C语言为变量定义5种存储类,分别是。不同的存储类决定了作用域和存储期。那么存储类和内存之间的关系是怎样的?从存储期看分为静态、自动、分配。静态存储(static)在编译时已经确定,整个程序运行期存在;变量(auto、register)在代码块运行时产生,退出时清理;动态内存分配在调用malloc或相关函数时产生,在free时释放。因为分配和释放不是线性的,这就导致了内存碎片。从作用域看决定哪一部分程序可以访问哪个数据。在嵌入式中内存就是以堆和栈的形式存在。

2023-06-30 14:26:17 287

原创 谈谈对工程师的启发—读《像火箭科学家一样思考》

应该从正确的问题入手:了解所面对的问题,明确需要解决的事情,可以清晰地知道可以采取的途径和步骤。根据不同平台的特点,选择合适的传播方法:传统教学模式、在线教育平台,以及独立自学等,都需根据具体需求和情况,选择合适的学习传播方法,来获得更好的学习效果。自我审查:在进行决策或作出判断之前,首先要收集足够的证据,并审查所得到的证据,有意识地寻求并纠正自己的偏见和错误,以达到正确的判断。与其说是怀疑的巨大力量,不如说是好奇心的巨大力量,推动人类进步的永远是那一小撮人,怀着无限的好奇心,穷思竭虑的探索,并以此为乐。

2023-06-08 16:20:35 292

原创 嵌入式项目开发实施的一点思考--工程师手记

总之,开发和管理嵌入式产品需要关注多个方面,如硬件设计和选择、软件开发和测试、物联网技术和应用、安全和稳定性、生产和供应链管理以及系统升级和维护等。通过有效的管理和支持,可以保证嵌入式产品的稳定性和可靠性,满足用户的需求和扩展需求。项目中需要对各种可能出现的故障和问题进行全面研发和测试,并制定相应的构思和措施,保证系统的高可靠性。嵌入式产品具有定制化和专业化:嵌入式项目的性质和设计都非常定制化和专业化,每个项目都有不同的特性和需求。嵌入式产品需要与硬件设备结合使用,因此项目开发和测试需要考虑硬件约束。

2023-05-24 15:15:45 171

原创 适用于物联网通信的数据格式JSON

cJSON是一个轻量级的JSON解析器和生成器,它是用C语言编写的,非常适合嵌入式设备和其他资源受限环境中使用。

2023-05-12 16:28:31 901

原创 chatGPT辅助解决QT构建报错error: multiple target patterns

这个错误通常是由于 Makefile 文件中的规则定义不正确导致的。在这个 Makefile 规则中,报错信息。直接打开示例,构建报错error: multiple target patterns. Stop.您需要将依赖项和命令都放在同一行,并使用冒号分隔目标文件和依赖项。只是为了指定编码格式,可以删除这一行或在命令中直接指定编码格式。请注意,我们已经更改了命令中输出文件的路径分隔符。然后,您可以重新运行 make 工具来构建您的项目。这个修改后再次编译,ok了。再也没有构建错误了。

2023-05-08 15:35:34 1360

原创 适合于物联网通信的数据加密AES算法

综上所述,AES算法是物联网通信应用中一种重要的加密算法,具有安全性高、加密速度快、灵活性强、兼容性好、可扩展性强等优点,但也存在密钥管理复杂、密钥泄露风险、加密算法不可逆等缺点,需要在实际应用中进行综合考虑。3. 加密算法不可逆:因为AES算法是一种对称加密算法,因此在通信中需要同时保证加密和解密端都有相同的密钥,如果密钥遗失或损坏,将无法恢复加密数据。1. 密钥管理复杂:在物联网应用中,密钥管理是一个非常复杂的问题,需要考虑密钥的生成、分发、更新、撤销等多个方面。

2023-04-13 16:05:03 1875

原创 向chatGPT提问之常用库及函数

例如:apr_hash_make, apr_strtok, apr_time_t等。例如:png_create_read_struct, png_create_info_struct, png_write_image等。例如:gtk_window_new, gtk_button_new_with_label, gtk_text_view_new等。例如:cairo_create, cairo_surface_create_for_image, cairo_set_source_rgb等。

2023-03-31 08:49:02 220

原创 全志A40i调试记录

记录下全志A40i调试中的一些问题

2023-03-16 17:34:27 467 2

原创 ARM应用之瑞芯微RK3568上使用QT+Opencv

手上有一块RK3568板子,正好官方SDK提供了opencv和QT的环境,就整个QT+OPENCV的简单应用玩玩。还是通过ioctl映射出原始的图像数据,这里将图像的YUV数据转为bgr。在opencv中一般输入的是bgr图像进行处理。QT一般使用的是RGB图像,所以注意得转换一下,不然那颜色就反了。这里直接使用USB采集的图像进行处理。

2023-03-14 17:23:25 2555

原创 visual studio使用opencv之三步配置

默认下载opencv的Windows版本安装好。安装文件里面有build和source二个文件夹。确认下build下的include是否包含了所有的头文件。带d的是debug模式,不带d的是release模式。将dll文件丢到C:\Windows\SysWOW64。需要配置的目录都在build下。这个只需要配置一次就可以永久使用了。这时候写个测试代码,执行就ok了。

2023-02-23 09:24:31 214

原创 在ARM上使用QT的TCP/UDP实现图像数据传输

在ARM上使用QT的TCP/UDP实现图像数据传输

2023-01-12 11:46:18 1270

原创 适用于物联网Linux设备上使用的sqlite3

在嵌入式Linux上使用sqlite3的一个简单示例,包含写入,查询第一条和最后一条,删除第一条和最后一条,在物联网设备上读写非常方便。使用sqlite3_exec()与 sqlite3_prepare()+ sqlite3_step()二种方式是一样的;注意,在创建完表后最好加一个sleep,防止立马写入导致的错误。

2022-12-05 17:34:29 947 1

QT+Opencv应用工程示例

手上有一块RK3568板子,正好官方SDK提供了Opencv和QT的环境,就整个QT+OPENCV的简单应用玩玩。方便老铁们直接用上QT+Opencv,老铁们可以整个简单示例开始叠加复杂功能了。既可以玩QT,也可以玩Opencv,不用操心采集显示的问题了。

2023-03-14

动⼿学深度学习.pdf

很好的深度学习资料,来自一线教授缩写,理论与实践性均具备,是你学习的最佳资料

2019-06-19

imx6调试.docx

基于nxp的imx6q的调试文档,已经实现了工程应用。在调试过程中记录的一些经验和心得,给大家分享学习了,完全实际工程经验。

2019-05-23

ARM基本电路图

ARM基本电路,采用STM32F101芯片,包括当下主流的外设电路设计。是你做课程设计和毕业设计的好参考。

2012-08-01

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除