Linux与SoC
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
Linux libdrm代码完全解析
linux平台普遍采用的DRM软件架构中,不仅包含了内核空间驱动层的代码,而且提供应用层的支撑库libdrm。libdrm基于DRI协议通过ioctl与2D图显驱动进行交互,配置图显处理器以及HDMI、MIPI、LVDS等编解码单元。验证SoC的图显处理器及其他编解码模块时,可以基于libdrm modetest所提供的功能来丰富我们的verify条目。如单帧、多帧、旋转、缩放、裁剪等等。modetest功能及流程解析命令行参数通过库函数getopt()处理modetest的命令行参数(图片可放大原创 2021-09-12 20:03:48 · 4496 阅读 · 2 评论 -
mesa的本地和交叉编译详细流程 | GPU | openGL | openGL ES
对于ARM平台而言,mesa源码的编译方式有两种,分别是本地编译和交叉编译。0. 编译结果按照前文所述的mesa配置,编译出的mesa库文件包括:root@firefly-rk3399:/home/mesa# ninja -C build/ installninja: Entering directory `build/'[1/2] Installing files.Installing src/mapi/shared-glapi/libglapi.so.0.0.0 to /usr/lib/aa原创 2022-05-24 18:35:03 · 2403 阅读 · 1 评论 -
DRM KMS机制及初始化流程分析
介绍了KMS的前世今生以及实现机制,作为底层驱动开发者而言,KMS的注册机制至关重要,而对于上层应用开发者而言,了解DRM KMS能够支持哪些功能亦不可少。原创 2022-04-01 19:53:07 · 2629 阅读 · 0 评论 -
ARM Mali系列GPU驱动panfrost组成
ARM mali系列GPU的panfrost驱动原创 2022-03-25 20:08:38 · 5499 阅读 · 0 评论 -
图显系统DRM vblank - (1)
介绍Linux 图显系统DRM vblank的函数API原创 2022-03-12 13:36:47 · 3953 阅读 · 0 评论 -
MIPI DSI的linux kernel驱动原理 | 基于RK3399
MIPI DSI屏幕的初始化流程,包括MIPI DSI Host、D-PHY、显示屏等。了解了初始化流程,才可以高效率的定位MIPI屏幕无法点亮的故障原创 2022-01-28 16:16:10 · 4789 阅读 · 1 评论 -
MIPI协议的video/command模式和HS/LP模式分析 | 基于RK3399
分析了MIPI协议组成及功能,重点分析了数据包传输的Video/command mode的原理,重点分析了数据lane的HS/LP mode的原理原创 2022-01-07 22:06:09 · 4114 阅读 · 0 评论 -
MIPI的前世今生以及MIPI多媒体系统组成 | 基于RK3399
MIPI包含多种协议,重点介绍MIPI DSI和D-PHY的组成原理原创 2022-01-01 23:14:55 · 3141 阅读 · 3 评论 -
刷新率和帧率的区别
详细解释了刷新率和帧率的原理,并介绍了如何实现刷新率和帧率之间完美协同工作的方法原创 2021-12-30 21:52:38 · 18113 阅读 · 0 评论 -
RK3399的MIPI DSI-设备树Host结点分析
详细介绍了MIPI DSI Host设备树结点的组成,包括其提供的三路时钟:pclk、ref、phy_cfg。并解释了其同vop之间的连接关系。原创 2021-12-25 23:17:11 · 1802 阅读 · 0 评论 -
Kconfig中select与depends on原理
select与depends on是相反的逻辑关系。A depends on B那么只有在B选中才能选AA select B那么只要选中A就会选中B,所以select叫反向依赖。原创 2021-12-23 13:56:33 · 3089 阅读 · 1 评论 -
RK3399与MIPI DSI之间在DRM架构下的联结关系
介绍了RK3399的VOP和MIPI DSI在DRM架构下是如何联结到一起的,将二者抽象为CRTC与ENCODER之后是如何构造连接关系。原创 2021-12-18 21:09:49 · 2086 阅读 · 1 评论 -
RK3399开箱体验及切换MIPI显示的方法
开发板默认是MIPI显示的,但是因为我在写这个文章之前,我把它切成了HDMI显示输出,为了还原真实开机启动的情形,有切换回MIPI复原默认的第一次开机情景。输出显示切换可以通过U-Boot命令行的方式实现。当U-Boot进入到倒计时阶段时,我们打断它,进入到配置模式。Hit key to stop autoboot('SPACE'): 0---------------------------------------------0:Exit to console1:Reboot2:Display原创 2021-12-17 22:37:59 · 992 阅读 · 0 评论 -
rockchip3399的DRM架构中drm_device解析
基于DRM架构的图显系统软件架构中,DRM世界中的设备主体由struct drm_device描述。原创 2021-12-17 18:14:20 · 1871 阅读 · 1 评论 -
Ubuntu18.04.6 LTS搭建ROCK3399 Linux Docker开发环境(非常详细)
参考文档飞凌官方docker安装文档,本文是对其的补充。1. 安装必要的软件rk@ubuntu:~$ sudo apt-get -y install apt-transport-https ca-certificates curl software-properties-common Reading package lists... DoneBuilding dependency tree Reading state information... Doneca-certific.原创 2021-12-13 18:42:02 · 1504 阅读 · 0 评论 -
RK3399图显系统,在DRM架构下的设备树拓扑结构解析
1. RK3399图显系统介绍RK3399支持两个视频显示控制器,称之为VOP。可以支持的显示外设包括HDMI、MIPI-DSI、eDP、DisplayPort等。2. 图显系统软件框架RK3399图显系统的软件框架定义了各组件之间的拓扑关系、绑定流程及DRM系统注册等内容。相较于树莓派4B在驱动代码中定义各个组件之间的拓扑关系,RK3399则是在设备树中定义各组件之间的关系,然后在驱动代码解析设备树实现各组件的绑定。由于vopb和vopl支持的分辨率不同,所以,每个图显外设的设备树同两个vop均原创 2021-12-08 17:40:57 · 2088 阅读 · 0 评论 -
详细分析DRM架构下获取HDMI/DP/VGA/DVI显示屏参数的实现原理
1. 概述对于VGA、HDMI、DisplayPort等接口的显示屏,当我们将线缆从高分辨率的屏幕拔插到一个低分辨率的屏幕时,在没有做任何的系统配置的情况下,就可以实现图像的完整显示,这里面是如何实现的呢?实际上,在linux GPU DRM驱动下实现了获取及解析显示器分辨率的功能,将获取到的分辨率参数同步更新到DRM FRAMEBUFFER以及CRTC模块。实现该功能的主体函数是drm_helper_probe_single_connector_modes(),它的调用流程如下:2. 起源dr原创 2021-11-20 23:30:16 · 3890 阅读 · 2 评论 -
kernel驱动中配置图显系统各显示外设(HDMI/MIPI/DP等)寄存器的实现原理
1. 背景介绍在图显系统中,各显示IP(MIPI、HDMI、DP等)或屏幕的寄存器配置,可以通过I2C总线来实现。以HDMI PHY芯片为例,分析在HDMI驱动中如何调用I2C接口实现HDMI PHY芯片寄存器的访问。2. 设备树代码实现在slave设备的设备树结点中定义需要使用的I2C控制器。hdmi: hdmi@12D00000 { compatible = "samsung,exynos4210-hdmi";... phy = <&hdmi_原创 2021-11-15 18:44:05 · 1621 阅读 · 1 评论 -
视频播放验证工具mplayer的移植,用于验证DRM驱动程序
1. 下载资源1.1 下载zlibhttp://www.zlib.net/下载1.2.11版本1.2 下载alsahttps://www.alsa-project.org/files/pub/lib/下载1.2.2版本的alsa1.3 下载mplayerhttp://www.mplayerhq.hu/MPlayer/releases/下载1.4版本2.编译在如下路径创建四个文件夹,用以存放上述的三个源码以及编译出来的库文件。2.1 zlib操作的路径如下:lin原创 2021-11-05 19:15:02 · 721 阅读 · 1 评论 -
带你走进程序员眼中的像素世界,深入理解RGB与YUV图像格式
对所有人而言,像素这个词并不陌生。各大手机厂商新品发布会时高频出现的一个词就是xxx手机像素多少多少,分辨率多高多高。那么这里说的手机像素是什么含义呢?以500万像素为例,其含义是在一英寸的CCD面积上有500万个象素点,500万像素的分辨率是25921944或者25601920。针对像素格式,介绍和分析其在图显系统中的实现原理和细节。像素格式基本概念像素格式描述了像素数据存储所用的格式,定义了像素在内存中的编码方式。像素表示方式下图标识了不同应用场景下所看到的像素格式的不同表示方式,虽然说像原创 2021-09-24 23:38:36 · 618 阅读 · 0 评论 -
Mali系列GPU里的AFBC+ASTC到底是什么
转自:ARM社区澎湃S1采用Mali-T860的4核图形处理器,对比上一代Mali-T760同等性能下功耗降低了40%。支持“AFBC + ASTC”图像压缩技术,处理动态图象时功耗减少15%。图像实时无损压缩与解压缩时,内存带宽占用减少50%。—雷军那么ARM的Mali系列GPU中的AFBC和ASTC到底是什么,如何实现功耗下降和节省内存带宽呢?接下来给大家简单科普一下:打造高效和高性能的系统级芯片 (SoC) 正成为一项日益复杂的任务。对带宽密集型应用程序的需求日益增长,意味着系统组件需要在每一转载 2021-09-22 22:09:38 · 4492 阅读 · 0 评论 -
kernel图显系统中EDID的应用及调试方法
EDID 的应用在kernel代码中定义了edid数据结构,专门用于描述获取到的EDID。如下:struct edid { u8 header[8]; u8 mfg_id[2]; u8 prod_code[2]; u32 serial; u8 mfg_week; u8 mfg_year; u8 version; u8 revision;... struct est_timings established_timings; struct std_timing standard_tim原创 2021-09-17 14:56:13 · 808 阅读 · 0 评论 -
kernel图显系统中DDC的代码实现原理
DDC获取EDID的入口函数是drm_do_get_edid(),其调用DDC通讯接口drm_do_probe_ddc_edid()。struct edid *drm_get_edid(struct drm_connector *connector, struct i2c_adapter *adapter){... edid = drm_do_get_edid(connector, drm_do_probe_ddc_edid, adapter);...}drm_do_probe_d原创 2021-09-17 14:52:39 · 572 阅读 · 0 评论 -
kernel图显系统中的EDID怎么用
在kernel代码中定义了edid数据结构,专门用于描述获取到的EDID。如下:struct edid { u8 header[8]; u8 mfg_id[2]; u8 prod_code[2]; u32 serial; u8 mfg_week; u8 mfg_year; u8 version; u8 revision;... struct est_timings established_timings; struct std_timing standard_timings[8];原创 2021-09-16 18:27:31 · 524 阅读 · 0 评论 -
kernel代码中对HDMI DDC通道的初始化
在代码中通过 i2c_adapter 来描述 DDC 通道,如下:struct i2c_adapter { struct module *owner; unsigned int class; const struct i2c_algorithm *algo; void *algo_data; const struct i2c_lock_operations *lock_ops; struct rt_mutex bus_lock; struct rt_mutex mux_lock; int原创 2021-09-16 09:07:56 · 598 阅读 · 0 评论 -
HDMI中所说的EDID是什么
EDID是Extended Display Identification Data的缩写,意为扩展显示标识数据,符合VESA标准数据格式。通常存储在显示器的固件中,标识供应商信息、最大图像大小、颜色设置、厂商预设置、频率范围的限制以及显示器名和序列号的字符串。EDID从诞生至今,已经经历了多次的版本更迭,关于版本信息可以在EDID的字符串中获得。EDID由128Bytes主块和128Bytes的扩展块组成,按照EDID协议标准每固定bytes为一组,标识特定的信息。例如,对电脑的EDID解析结果如下:原创 2021-09-13 21:05:28 · 4060 阅读 · 0 评论 -
图显系统DRM FRAMEBUFFER完全解析
1. frame buffers 介绍frame buffers 是一个抽象出来的内存对象,用于向 CRTC 扇出像素数据。应用程序通过 DRM_IOCTL_MODE_ADDFB(2) ioctls 来显示的申请创建 frame buffers。内核空间代码创建完成后返回 handle 值,该值可以用于控制 CRTC、PLANE 等模块。后面以 fb 代替 frame buffer。内核空间需要实现显存管理器以支持 fb 的创建。例如应用程序可以发送 GEM handle 值触其发申请内存空间。对于图显原创 2021-09-12 21:54:51 · 4410 阅读 · 2 评论 -
图显系统DRM GEM完全解析
0. 引言GEM 是Graphics execution management的缩写。沿袭了 TTM 的一些设计思想,提供一套显存管理的机制。包括:显存管理控制对图形设备执行上下文的访问处理现代图形硬件特有的 NUMA 需求GEM 允许多个应用程序在不重新加载整个显卡的情况下,就可以访问到图形设备的资源。基于共享内存的思想保证了数据的同步性。显卡的上下文状态由 kernel 空间代码管理,这样就可以减少应用层对显卡状态管理的代码,使其将更多的精力放在图像算法上。用户空间通过 ioctl 来原创 2021-09-12 21:53:03 · 3541 阅读 · 0 评论 -
图显系统DRM PLANE完全解析
目录PLANE的工作原理和意义PLANE的初始化和功能0. 引言DRM PLANE 从 drm_framebuffer 接收数据,构造送显图像的雏形,完成图像的剪裁和缩放后发送到&drm_crtc。除此之外,还通过 drm_plane_state 来提供图像旋转功能。KMS 驱动通过调用 drm_universal_plane_init()初始化 DRM PLANE。每个 CRTC 需要定义一个 primary plane 以及可选的 overlay plane、cursor p.原创 2021-09-12 20:26:08 · 4535 阅读 · 0 评论 -
图显系统DRM ENCODER和CONNECTOR完全解析
目录PLANE的工作原理和意义PLANE的初始化和功能0. 引言DRM PLANE 从 drm_framebuffer 接收数据,构造送显图像的雏形,完成图像的剪裁和缩放后发送到&drm_crtc。除此之外,还通过 drm_plane_state 来提供图像旋转功能。KMS 驱动通过调用 drm_universal_plane_init()初始化 DRM PLANE。每个 CRTC 需要定义一个 primary plane 以及可选的 overlay plane、cursor p.原创 2021-09-12 20:19:08 · 5390 阅读 · 3 评论 -
图显系统DRM CRTC完全解析
目录CRTC 工作原理和意义CRTC 模块的初始化和功能0. 引言DRM 下的 CRTC 代表 RGB 数据管道,从&drm_plane 接收像素数据并将其混合到一起,传输给下级显示设备&drm_encoder。由&drm_display_mode 控制时序。KMS 通过 drm_crtc_init_with_planes()注册&struct drm_crtc 并初始化 CRTC 模块。通过 drm_crtc_helper_add()注册 CRTC 提原创 2021-09-12 20:09:39 · 8208 阅读 · 1 评论 -
图显系统DRM的注册机制研究
全文包括如下内容组件系统介绍component组件辅助单元的注册master组件图显控制器的注册与所有辅助单元绑定0. 引言kernel的图显系统已经普遍采用 DRM 架构,SoC厂商结合各自图显处理器的特点来编写代码。图显系统包括图显处理器、时序控制设备、编解码设备、PHY等,每个设备的驱动代码独立编写,最后再组织成一个整体。1. 组件系统介绍上图里的玩具车由核心单元(控制器) + 辅助单元(车轮、底盘等)组成。首先安装一堆的辅助单元、最后安装控制单元。在安装控制单元的时候需原创 2021-09-10 21:18:53 · 1017 阅读 · 0 评论 -
kernel下HDMI调试记录
目录平台环境及验证工具1.1 软件环境1.2 硬件环境libdrm 移植DRM 组件探测HDMI图像显示调试流程4.1 故障定位过程4.1.1 modetest 匹配 connector 分辨率失败4.1.2 DRM connector HDMI 注册失败4.1.3 HDMI 驱动初始化错误4.1.4 获取 HDMI EDID 失败4.1.5 Invalid crtc for plane错误4.1.6 atomic driver check fail.原创 2021-08-22 21:10:38 · 2202 阅读 · 1 评论