自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(60)
  • 收藏
  • 关注

原创 RK3576——MIPI CSI之v4l2-ctl、media-ctl命令分析

media-ctl是 Linux 系统中用于配置和管理 V4L2(Video for Linux 2)子设备的命令行工具,它主要用于配置媒体控制器(Media Controller)框架下的复杂视频设备(如摄像头、图像传感器、CSI/DSI接口、图像处理单元等)的拓扑结构和数据流路径。(1)列出设备:media-ctl -p -d /dev/media0输出所有媒体设备及其实体(entities)、链接(links)和pad属性。

2025-02-13 13:11:59 1078

原创 RK3576——显示(MIPI DSI、HDMI、LVDS)相关常用操作命令

从这里就可以通过Connector字段的name值确认屏幕接口为HDMI,并且可以通过encoder值180确认Encoders字段对应的crtc值为73(后续我们指定屏幕显示需要用到上面的信息),通过modes值可以确认屏幕支持的分辨率,通常在多个分辨率之中带perferred为屏幕主推分辨率,也是首选分辨率。Planes字段:可以通过上述查询的crtc确认HDMI对应的Planes,此字段的id值需要关注,后续指定屏幕会用上,这里HDMI是57。下述演示为动态切换,即当前系统生效,重启系统恢复默认。

2025-02-11 10:44:15 912

原创 RK3576——AMP开发修改debug调试串口

问题需求:通常官方AMP demo默认的调试串口为uart0,但自己的板卡并为引脚该串口或者uart0用作其他功能,这时候就需要修改demo对应的调试串口为其它uart接口,本次演示以修改为uart8为例进行讲解(注:这里以AMP的RTOS demo为例进行演示)。进入demo案例目录,修改Kconfig配置文件添加uart8对应的配置选项。添加配置串口信息配置(上述是虚函数配置,实际调用的是下面这个函数)scons --menuconfig图形配置界面,配置。配置完后重新编译demo即可生效。

2025-02-10 10:18:54 283 2

原创 RK3576——相关源码版本查看

背景需求:通常在开发之前都需要进行SDK选型,通常需要根据对应的版本信息确认其支持的特性进行选择版本。通常作为开发任务我们拿到一个SDK包后需要确认对应的版本是否符合我们的需求,例如文件系统版本、内核版本、uboot版本等,这些源码的版本有时候在开发的过程中会用到,例如有些工具软件或驱动需要兼容指定版本的源码。3. uboot版本查看。4. 交叉编译工具链版本。1. 文件系统版本查看。

2025-02-06 11:06:27 288

原创 RK3588——SPI速率、传输数据量问题排查

但从上面的测试结果上来看降低传输数据量至少读写速率是基本一致的,至少能证明在当前速率模式,较少的数据量其传输是正常的。回归到本质,SPI总线一次传输最大数据量本质上是由于硬件决定的,更准确的说应该是由于硬件缓冲区大小决定的,因此这里的修改最大不能超高其缓冲区大小。问题分析:按照50MHZ时钟一次传输64K字节的数据量理论上是没有任何压力的,这里速率完全是支持的,那就只有一种可能这个SPI控制器在这个极限的速率上传输时出现了异常。读速率计算:65535/1024/1024/0.02108≈2.96MB/s。

2025-02-06 09:46:49 1070

原创 AM6412——解决系统移植问题(SD卡启动异常)

SD卡启动系统过程中会分为两个阶段,第一个阶段分为uboot阶段,此阶段SD卡速率较低,第二个阶段为kernel阶段,此阶段会重新初始化MMC控制器进行速率切换到高速模式。梳理了一下AM6412为AM6442的裁剪版,系统软件默认的配置是AM6442,猜测是AM6442软件上默认配置了某些功能在AM6412上无法使用。总结:对于这种裁剪系统的移植尤其需要注意型号之间的差异,通常系统启动异常就是由于这些差异导致的。需求:在AM6442上的系统正常运行,需将AM6442的系统移植到AM6412上。

2025-02-06 09:01:01 185

原创 RK3588——解决Linux系统触摸屏坐标方向相反问题

问题描述:触摸正常产生中断,但系统上报的触摸坐标不正确,是反向的坐标。注:需确认对应的驱动是否有解析该属性的具体内容,否则仍然无法生效。解决办法通过修改设备树添加属性翻转坐标。

2025-02-05 17:14:18 253

原创 RK3576-MIPI DSI无法正常显示问题排查

设备树主要在DSI接口里添加了一个panel节点,在该节点里面指定了背光节点,配置了panel上电时序,屏参时序,最终关联到dsi端口。分析:如果屏幕无法正常显示有可能是上电时序或者屏参时序有问题,但是这些配置在3588平台上是验证过是没有问题的,因此可排除此部分导致的原因。系统分析:触摸部分与显示部分无直接关联,显示部分与背光、复位信号有关,因此排查可排除触摸软硬件问题。最终通过排查发现是缺少配置复位信号,在设备树配置中添加复位信号配置内容即可正常显示。

2025-02-05 14:43:55 448

原创 RK3576——MIPI CSI2配置DPHY为4lane模式

需调整csi2_dphy1链路的rkcif_mipi_lvds2改为rkcif_mipi_lvds1;csi2_dphy4链路的rkcif_mipi_lvds4该为rkcif_mipi_lvds3对于的下一环节分别修改为rkcif_mipi_lvds1_sditf、&rkcif_mipi_lvds3_sditf。参考官方资料:Common/ISP/ISP32-lite/Rockchip_Driver_Guide_VI_CN_v1.1.4.pdf。:抓取的帧数,多帧也是存在同一文件。wayland显示在。

2025-02-05 14:11:30 796

原创 RK3576——USB3.2 OTG无法识别到USB设备

通过排查原因是存在引脚冲突,笔者的开发板上默认使用该引脚用作PWM驱动散热器导致的问题。问题:使用硬盘接入到OTG接口无热插拔信息,接入DP显示屏无法正常识别到显示设备,但是能通过RKDdevTool工具烧录系统。正常情况,确保以上内容都配置正确后重新编译内核镜像进行测试是能够正常识别的。但是笔者开发的过程中仍然无法识别。HUSB311芯片为I2C接口,需确保正确挂载到对应的I2C总线上,并且能够通过在系统上识别到I2C设备。HUSB311芯片的中断引脚正常配置,因为热插拔信息是靠中断信号来产生的。

2025-02-05 10:36:12 488

原创 RK3576——Linux驱动无法正常识别网卡PHY ID

问题分析:Linux系统访问PHY寄存器使用的是MDIO总线,在初始化网卡优先去读取PHY ID进行与驱动进行匹配之后才开始初始化PHY。系统出现无法识别网卡,问题出现在无法访问PHY寄存器。问题:启动系统后使用dmesg | grep "phy id"命令没有相关log信息,也无法使用phytool工具软件访问PHY寄存器。总结:PHY通过MDIO总线与MAC/SOC通信,复位确保总线接口就绪以及PHY芯片处于可配置状态。1. 确认设备树正常配置MDIO总线,没有问题。

2025-02-05 09:36:39 213

原创 Linux——修改USB网卡设备节点名称

修改驱动:测试:

2025-01-09 09:03:59 261

原创 了解ARM的千兆以太网——RK3588

我们需要重点关注的是PHY驱动,当然由于业内早已建立了标准,内核源码已提供了一套通用的PHY驱动,这套PHY驱动至少能让网卡工作起来,不同的PHY厂商也会兼容这套标准。在嵌入式ARM中实现以太网的解决方案通常有以下两种,通常在性能较低的单片机领域其SOC内部是不具备MAC控制器,但又有需求可以使用方案1这种架构,但在高性能的ARM处理器,例如RK3588这种SOC其内部已集成MAC控制器,可以直接选用方案2。本文并不重点讲解调试内容,重点了解以太网在ARM设计中的框架以及在设备树以及驱动的一个整体框架。

2024-12-13 15:07:18 2322 1

原创 Linux dd命令读写flash之误区

不同的flash块大小有可能不一样,但必须满足扇区的整倍数(个人使用的spi-not flash的扇区大小为4KB,块大小可以是32KB/64KB),dd命令读写flash必须的块大小至少是扇区的的整数倍,因为系统是按照扇区大小为单位进行操作的。通常在Linux系统上需使用dd命令读写flash设备,跟人最近调试了一款spi-nor flash芯片,分区分配了8MB大小的分区,是用dd命令验证读写flash时,出现校验失败。通过了解dd命令,发现是bs参数的问题,bs表示flash的块大小,单位为字节。

2024-12-12 17:12:33 554

原创 TI 平台引脚配置工具——sysconfig

NXP平台比较直观,从pin信息上去看就看出来配置了GPIO1_IO02引脚,这个宏MX8MP_IOMUXC_GPIO1_IO02__WDOG1_WDOG_B的背后对应着GPIO的几个重点寄存器,至于0xc6这个值就是要写入这些寄存器的值。NXP平台也有相应的引脚配置工具,后续有机会专门写一篇博客进行讲解。本文开头内容是讲解如何使用工具配置引脚,那么本文的重点还是讲解TI官的引脚配置工具,毕竟工欲善其事必先利其器,TI官方有一个在线引脚配置工具——sysconfig可以根据SOC型号配置你想要的任意管脚。

2024-12-12 09:29:55 1067

原创 Linux 支持多个spi-nor flash

对于spi-nor flash驱动通常不需要驱动开发人员手搓,一般内核会有一套固定的驱动,而且走的是内核的MTD子系统那一套,市面上常见的spi-nor flash芯片都支持这套驱动。

2024-12-11 16:48:59 1252

原创 Linux 添加spi-nor flash支持

在嵌入式ARM开发过程中通常会使用到spi-nor flash,主要用于固化u-boot镜像以支持spi方式启动系统。

2024-12-11 11:01:14 559

原创 Linux 设备树删除节点/属性

注意必须是节点名称,不能是标签名,需要在同级节点下删除,上述为例在/节点下删除原有leds节点并重新定义leds节点。/delete-property/ 属性名;/delete-node/ 节点名;

2024-06-24 14:04:57 526

原创 解决内核模块加载使用-f参数无法加载的问题

问题解决方案:在内核配置打开forced 加载选项。

2024-06-20 14:01:13 255

原创 Ubuntu大小写混乱解决办法

2023-09-27 08:42:12 474

原创 编译U-boot常见报错

解决uboot编译常见报错

2023-09-08 11:32:46 510

原创 git使用和基础原理(一)

git add背后发生了什么?

2023-03-25 12:43:03 202

原创 IMX6ULL中U-BOOT分析之ARCH、CPU、BOARD、VENDOR、SOC、CPUDIR、BOARDDIR变量值的由来。

IMX6ULL中U-BOOT分析之ARCH、CPU、BOARD、VENDOR、SOC、CPUDIR、BOARDDIR变量值的由来。

2023-02-25 12:59:08 253

原创 linux驱动分离值platform模型

我们将驱动分离为两个.c文件,并且内核在代码实现上将它们抽象为总线、设备、驱动等结构体的形式表现出来,那么我们肯定希望跟硬件引脚资源相关的定义放在device.c上,在driver.c上希望能够读取device.c定义好的引脚资源,进而编写驱动程序(这里可能还有一些新手朋友不太理解,说白了就是在device.c上定义引脚变量,在driver.c调用这个变量的意思)。(这里开个玩笑哈哈),实际它们在加载的时候都会匹配对方的链表上的driver/device看能不能匹配上。

2023-02-07 17:54:21 156

原创 linux驱动分离思想引入——总线模型(上)

基于这个问题,我们能不能将驱动分离为两个.c文件,将要改动大的放在一个文件(代码跟硬件资源紧密相关),改动少的放在一个文件呢(代码跟硬件资源没有什么关系)?

2023-02-07 11:34:33 138

原创 IMX6ULL之uboot启动流程分析——make xxx_defconfig流程

IMX6ULL中uboot启动之配置make xxx_defconfig流程分析

2023-02-03 16:17:39 154

原创 IMX6ULL之uboot启动流程分析——make流程

IMX6ULL之uboot启动流程分析——make流程

2023-02-03 15:15:20 163

原创 uboot移植之前言知识

1)Bootloader是硬件启动的引导程序,是运行操作系统的前提;2)在操作系统内核或用户应用程序运行之前的一小段代码。对软硬件进行相应的初始化和设定,为最终运行操作系统准备好环境;3)在嵌入式系统中,整个系统启动加载任务通常有Bootloader来完成。特点:1)Bootloader不属于操作系统,一般采用汇编语言和C语言开发。需要针对特定的硬件平台编写;2)在移植系统时,首先为开发板移植Bootloader;

2023-02-03 14:27:49 160

转载 ARM——汇编指令

学习ARM,就必须要学习ARM指令,ARM指令是CPU提供给我们的接口,是我们打开CPU这个潘多拉魔盒的钥匙。

2023-02-02 23:06:44 2160

转载 Linux字符设备驱动之进程、文件描述符、file、inode关系详解

Linux 中一切都可以看作文件,包括普通文件、链接文件、Socket 以及设备驱动等,对其进行相关操作时,都可能会创建对应的文件描述符。文件描述符(file descriptor)是内核为了高效管理已被打开的文件所创建的索引,用于指代被打开的文件,对文件所有 I/O 操作相关的系统调用都需要通过文件描述符。Linux启动后,会默认打开3个文件描述符,分别是:0:标准输入1:标准输出2:错误输出这就是为什么我们在程序运行时可以直接打印信息和从命令终端获取信息的原因。并且以后打开文件后。

2023-02-02 14:03:00 1144

转载 Linux字符设备驱动之模块化编程

一、什么是模块化编程?Linux的开发者,遍布世界各地,他们相互之间觉大数估计都不认识。如果真的是对这些开发者进行统一管理,那是很难做到的。所以大牛们,在设计Linux内核的时候,融入了模块化的思想。也就是说,现在大家已经有一个现成的Linux操作系统了,所有的开发者写的代码对于这个Linux操作系统而言都是一个模块,开发者可以模块的形式将自己的代码添加到内核,也可以从操作系统中卸载自己的模块。这种思想,在实际的开发中特别有用。

2023-02-02 11:17:53 232

原创 Linux驱动之模块参数param和符合导出export用法

通常内核模块是驱动人员编程,如果应用程序编写模块,那么就不清楚内核模块使用的模块参数名字,这样就只会增加工作量,那么有没有一种方法可以是模块加载的参数名字与模块内部变量不同呢?

2023-02-02 10:21:55 1107

转载 Linux之字符设备驱动框架

一、Linux设备分类字符设备块设备网络设备字符设备:字符(char)设备是个能够像字节流(类似文件)一样被访问的设备,由字符设备驱动程序来实现这种特性。字符设备驱动程序通常至少要实现open、close、read和write的系统调用。字符终端(/dev/console)和串口(/dev/ttyS0以及类似设备)就是两个字符设备,它们能很好的说明“流”这种抽象概念。字符设备可以通过文件节点来访问,比如/dev/tty1和/dev/lp0等。

2023-02-01 20:18:56 415

原创 Linux应用开发——进程

程序是完成特定任务的一系列指令集合,进程是程序的一次动态执行过程进程是操作系统分配的内存、CPU时间片等资源的基本单位。进程是动态的,程序是静态的。

2023-02-01 14:37:21 144

原创 数据结构与算法——常用排序算法

数据结构与算法——常用排序算法

2023-01-31 19:45:29 89

原创 解决Ubuntu虚拟机使用scp命令发送文件到开发板报错Couldn‘t open /dev/null: Permission denied的问题!

到这里其实问题已经解决了,因为/dev是虚拟文件系统,在系统运行起来后自动生成的,每次重启开发板就会重新生成/dev/null,解决办法是在启动脚本加入上面的命令即可,这样就不用每次修改了,修改开发板 /etc/init.d/rcS 脚本文件在里面添加上面两行命令即可。解决办法是删除这个设备节点,手动创建一个普通用户具有权限的设备节点。分析问题,说是没有权限打开/dev/null这个文件,因为这个跟文件系统是使用busybox制作的,其权限是root的权限,普通用户是无法打开这个文件的。

2022-12-24 16:47:48 2416

原创 解决虚拟机连接开发板报错:ssh: connect to host 192.168.0.109 port 22: Connection refused问题。

。解决办法是按照如下格式输入命令进行更新。报这个先执行前面的解决办法若是不能解决,先看一下开发板的sshd服务有没有开启,端口号有没有打开,或重启开发板试一下。刚开始报这个错,以为是我自己更改IP地址需要在开发板重新生成密钥文件去解决,但是发现重新生成密钥还是解决不了。ssh-keygen -R +输入服务器的IP。再次使用ssh就可以成功远程啦!

2022-12-24 16:27:19 2586

原创 移植OpenCV库到IMX6ULL开发板

完成上面步骤后还需要修改一下配置(这一步是必须的,否则编译不通过):在配置中更改一个选项,点击 CMAKE,在 CMAKE_EXE_LINKER_FLAGS 处添加上“-lpthread -lrt -ldl”添加这些是指定依赖库的链接参数。5.3、选择为交叉编译选指定选项,因为我们要使用我们自己的交叉编译工具链。5.6、更改以下安装目录,默认是在/opt目录下(这一步不是必须的)。5.7、重新执行刚才的配置使其生效,生成cmake等文件,用于编译。3、进入解压目录新建构建文件夹、安装文件夹。

2022-12-23 12:36:33 1316

原创 在IMX6ULL上搭建QT交叉编译环境下

6、经过前面的众多配置,我们已经生成可以在ARM开发板上运行的程序了,但是开发板上还没有部署QT库,无法直接测试我们的应用程序,所有还要将我们前面编译的qt库部署到开发板的跟文件系统中(这里涉及到跟文件系统的制作笔者就不详细讲解了,后期有时间出一篇博客讲解),默认读者具备构建跟文件系统的技术水平。配置完后就多了一个我们自己开发板的套件,这个套件有黄色警告图标,不用管只要不是红色就可以,到了这里QT Creator的套件就配置好啦,可以新建一个工程进行测试一下。按照如下操作添加我们前面编译的qmake工具。

2022-12-20 12:45:46 1221

原创 Ubuntu16.04交叉编译openssl、openssh

这里先说一下要移植openssh库,要先编译zlib(检查解压缩文件是否出错)、openssl(跟加密传输相关)这两个库。--with-zlib:表示指定先前编译的zlib库存方路径,有关zlib库编译请看笔者。--with-ssl-dir:表示上面交叉编译的openssl库存放路径。no-asm :在交叉编译过程中不使用汇编代码代码加速编译过程。4、输入make编译,编译成功如下所示。二、交叉编译openssh。5、执行make编译。

2022-12-20 11:20:38 1527

空空如也

空空如也

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

TA关注的人

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