自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 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 4131 2

原创 U-Boot与kernel之间的参数传递机制完全解析

详细分析u-boot与kernel之间的bootargs传递机制,包括如何传递、解析及应用

2022-09-03 18:58:23 3573 1

原创 U-Boot初始化及工作流程分析

U-Boot启动流程

2022-06-28 18:38:21 1112

原创 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 2211 1

原创 基于Ubuntu的linux环境制作嵌入式SD/TF启动卡

制作嵌入式系统的SD/TF启动卡

2022-04-27 19:18:21 3877 2

原创 DRM KMS机制及初始化流程分析

介绍了KMS的前世今生以及实现机制,作为底层驱动开发者而言,KMS的注册机制至关重要,而对于上层应用开发者而言,了解DRM KMS能够支持哪些功能亦不可少。

2022-04-01 19:53:07 2384

原创 ARM Mali系列GPU驱动panfrost组成

ARM mali系列GPU的panfrost驱动

2022-03-25 20:08:38 5042

原创 图显系统DRM vblank - (1)

介绍Linux 图显系统DRM vblank的函数API

2022-03-12 13:36:47 3675

原创 CPU中断的本质及分类,硬件中断、软件中断、异常的区别

CPU中断的本质及分类,介绍硬件中断、软件中断、异常的含义

2022-02-22 18:46:41 4527 1

原创 MIPI DSI的linux kernel驱动原理 | 基于RK3399

MIPI DSI屏幕的初始化流程,包括MIPI DSI Host、D-PHY、显示屏等。了解了初始化流程,才可以高效率的定位MIPI屏幕无法点亮的故障

2022-01-28 16:16:10 4515 1

原创 ARM平台的U-Boot移植详细步骤

介绍了RK3399的bootloader工作原理,移植U-Boot2022.01的详细流程

2022-01-17 08:20:43 2915 1

原创 Linux系统启动过程中的initcall实现原理和调试方法

介绍initcall的意义和使用方法、实现原理、执行流程以及调试方法。

2022-01-11 19:57:17 1843

原创 MIPI协议的video/command模式和HS/LP模式分析 | 基于RK3399

分析了MIPI协议组成及功能,重点分析了数据包传输的Video/command mode的原理,重点分析了数据lane的HS/LP mode的原理

2022-01-07 22:06:09 3826

原创 MIPI的前世今生以及MIPI多媒体系统组成 | 基于RK3399

MIPI包含多种协议,重点介绍MIPI DSI和D-PHY的组成原理

2022-01-01 23:14:55 3036 3

原创 刷新率和帧率的区别

详细解释了刷新率和帧率的原理,并介绍了如何实现刷新率和帧率之间完美协同工作的方法

2021-12-30 21:52:38 17544

原创 基于RK3399分析Linux系统下的CPU时钟管理 - 第3篇

详细讲解了RK3399的时钟系统结构,包括时钟系统初始化、PLL配置、时钟控制等实现原理

2021-12-29 19:37:57 2744 1

原创 基于RK3399分析Linux系统下的CPU时钟管理 - 第1篇

0. 背景介绍绝大多数的电子器件都是由时钟驱动其工作的。而SoC芯片或电路板中的时钟以树状结构呈现,按时钟域进行划分,按照不同的时钟需求进行管理。出于功耗和数据传输时序控制等目的,在内核代码中对时钟进行统一注册、统一管理。kernel代码中很早就出现了时钟管理机制,甚至早于git版本管控之前。1. 时钟定义ARM处理器平台中基于dts描述时钟树,包括时钟结构、时钟属性等信息。由时钟框架驱动和设备驱动解析dts中时钟树信息,完成时钟系统的初始化、管理、使用。在设备树中定义了时钟的providers和c

2021-12-28 21:40:28 2420

原创 基于RK3399分析Linux系统下的CPU时钟管理 - 第2篇

SoC时钟系统提供的功能包括:使能控制、倍频、分频、复用等。因此,在软件代码中按照SoC时钟系统提供的功能来组织Clock provider的结构,方便用户使用。1. Clock provider数据结构CCF是common clock framework的缩写,意为通用时钟框架。在内核中通过宏定义CONFIG_COMMON_CLK打开CCF,打开相关宏开启CFG框架的通用功能,具体如下:CONFIG_COMMON_CLK=yCONFIG_CLKDEV_LOOKUP=yCONFIG_HAVE_CL

2021-12-28 21:31:26 1115

原创 RK3399的MIPI DSI-设备树Host结点分析

详细介绍了MIPI DSI Host设备树结点的组成,包括其提供的三路时钟:pclk、ref、phy_cfg。并解释了其同vop之间的连接关系。

2021-12-25 23:17:11 1666

原创 RK3399芯片上电后加载启动程序的详细流程

芯片上电解复位之后执行的第一段程序,在芯片中称之为Bootrom loader。这部分程序在芯片制造过程中固化到其内部的ROM空间,具备只读属性,在实际使用过程中无法修改这部分内容,这部分程序的知识产权也仅归属于芯片公司所有。其实,你也可以将Bootrom loader称之为固件。对于ARM架构的处理器而言,芯片上电解复位后的PC通常是指向0x00000000或0xffff0000地址,也就是说,它会去该地址处取第一条指令、译码、执行。CPU能支持的启动模式通过硬件拨码的方式告知CPU,CPU上电解复位后

2021-12-25 17:42:14 3323

原创 Linux驱动中阻塞IO进程的处理机制分析

内核版本:4.4.189当驱动程序无法立即满足请求,该如何响应?而调用进程通常又不会考虑驱动程序的状态,因此,在驱动程序中就需要做一些处理,而通常的做法是阻塞该进程的请求。阻塞I/O是指在执行设备操作时,若不能获得资源,则挂起当前进程直到满足可操作的条件后再进行操作。被挂起的进程进入到睡眠状态,从调度器的运行队列中被移走,直到等待的条件得到满足。而非阻塞I/O在不能进行设备操作时,并不挂起,它要么放弃,要么不停地轮询,直至可以进行操作为止。等待队列是处理阻塞I/O的经典机制。1. 驱动中阻塞I

2021-12-24 22:41:17 1095

原创 Kconfig中select与depends on原理

select与depends on是相反的逻辑关系。A depends on B那么只有在B选中才能选AA select B那么只要选中A就会选中B,所以select叫反向依赖。

2021-12-23 13:56:33 2784 1

原创 RK3399与MIPI DSI之间在DRM架构下的联结关系

介绍了RK3399的VOP和MIPI DSI在DRM架构下是如何联结到一起的,将二者抽象为CRTC与ENCODER之后是如何构造连接关系。

2021-12-18 21:09:49 1940 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 896

原创 rockchip3399的DRM架构中drm_device解析

基于DRM架构的图显系统软件架构中,DRM世界中的设备主体由struct drm_device描述。

2021-12-17 18:14:20 1799 1

原创 Linux内核中__iomem的解析

内核代码中充斥着大量的__iomem修饰的void类型的指针,像下面这样:void __iomem *devm_ioremap_resource(struct device *dev, const struct resource *res){ resource_size_t size; void __iomem *dest_ptr; char *pretty_name; BUG_ON(!dev); if (!res || resource_type(res) != IORE

2021-12-14 22:39:24 5112

原创 kernel自带的静态代码检查工具Sparse介绍

1.Sparse介绍Linus在2004年开发了kernel代码静态检查工具,可以检查出kernel中潜在的风险代码,Sparse通过 gcc 的扩展属性__attribute__ 以及自己定义的 __context__来对代码进行静态检查,重点检查kernel代码中的变量类型和各类锁。具体可以参考kernel文档Documentation/dev-tools/sparse.rst那么如何指定代码可以被Sparse检查的到呢?以__iomem为例,可以对需要检查的变量类型放到特定文件中,以__C

2021-12-14 20:11:52 1590

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

原创 手机扫描电脑百度网盘二维码,二维码无法刷新的解决办法

win+R运行 inetcpl.cpl执行下面步骤即可

2021-12-08 20:56:40 2515 1

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

原创 Git游离分支的解决方法

出现下面字样,代表git出现了游离分支:ubuntu16@ubuntu16-virtual-machine:linux-5.4$ git branch* (HEAD detached from c58b1a8)...方法如下:新建一个临时 temp 分支,把当前提交的代码放到整个分支git branch tempgit checkout temp换回要回到的那个分支,这里是 mastergit checkout master然后 merge 刚才创建的临时分支git

2021-12-06 18:02:16 739

原创 ubuntu20网络管理器无法启动

解决方法:需要运行NetworkManager#/etc/init.d/network-manager starttarting network-manager (via systemctl): network-manager.service.OK

2021-12-04 22:58:00 1382

原创 Linux系统启动 | 保留内存初始化原理及如何在项目中应用实战

1. 概述在linux启动过程中会打印出如下信息,这些信息为我们呈现出系统下的保留内存空间情况。Reserved memory: created DMA memory pool at 0x4c000000, size 8 MiBOF: reserved mem: initialized node vram@4c000000, compatible id shared-dma-pool本文只介绍基本的保留内存,不涉及CMA部分内容保留内存的初始化流程如下图所示:本文所说的保留内存的作用,概

2021-12-03 21:48:05 612

原创 查看Ubuntu操作系统的kernel config文件方法

ubuntu16@ubuntu16-virtual-machine:~$ ls /boot/config-`uname -r`/boot/config-4.15.0-117-genericubuntu16@ubuntu16-virtual-machine:~$直接编辑

2021-11-27 16:06:27 4701

原创 linux创建init进程的3种实现方式原理分析

1. 概述Linux系统启动过程中通过init_task创建0号idle进程。然后通过kernel_thread创建1号init进程。创建该进程时通过系统调用,在内核空间执行用户空间的/sbin/init程序,通过该程序产生出shell,并依赖init衍生出其他进程。通过top命令查看当前系统环境下的进程列表,可以发现1号进程的为{linuxrc} init[root@iTOP-4412]# topMem: 26404K used, 948572K free, 0K shrd, 3199543672K

2021-11-26 15:59:58 1159 1

原创 详细分析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 3605 2

转载 AMD 下一代APU“梵高”,Zen2 CPU、GPU终于集成Navi

近日,网站NoteBookCheck带来了一些有关于预计于今年晚些时候发布的 AMD Van Gogh处理器的消息。AMD Van Gogh是一款7.5W TDP的低功耗处理器,其CPU采用Zen 2架构,但最高只有4核8线程。另外,Van Gogh将采用FF3插槽,支持LPDDR5内存,以此增加传输带宽。CPU方面似乎没有太多的亮点,不过在GPU方面就不一样了。根据爆料,AMD Van Gogh处理器的GPU终于将放弃老旧的Vega架构,升级为RDNA架构,并且还是最新的RDNA 2,拥有最高8

2021-11-20 22:07:46 800

原创 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 1475 1

原创 假如只有串口和JTAG,如何高效且优雅的调试linux驱动程序

在只有串口和JTAG存在的嵌入式设备环境中,可以通过JTAG将镜像文件下载到指定位置,但是当文件较大时,下载镜像所消耗的时间会很长,当调试代码时每次都重新加载镜像文件,极大的降低了开发效率。基于这个背景,我们可以通过串口按需加载文件,对于调试驱动程序而言,可以极大的提高开发和调试效率。需要的工具包括lrzsz和一个支持x/y/z moderm的串口终端。1. 源码下载下载地址:https://ohse.de/uwe/software/lrzsz.html下载0.12.20版本2. 编译

2021-11-06 14:18:35 573 2

原创 视频播放验证工具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 642 1

空空如也

空空如也

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

TA关注的人

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