- 博客(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
原创 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
原创 DRM KMS机制及初始化流程分析
介绍了KMS的前世今生以及实现机制,作为底层驱动开发者而言,KMS的注册机制至关重要,而对于上层应用开发者而言,了解DRM KMS能够支持哪些功能亦不可少。
2022-04-01 19:53:07 2384
原创 MIPI DSI的linux kernel驱动原理 | 基于RK3399
MIPI DSI屏幕的初始化流程,包括MIPI DSI Host、D-PHY、显示屏等。了解了初始化流程,才可以高效率的定位MIPI屏幕无法点亮的故障
2022-01-28 16:16:10 4515 1
原创 MIPI协议的video/command模式和HS/LP模式分析 | 基于RK3399
分析了MIPI协议组成及功能,重点分析了数据包传输的Video/command mode的原理,重点分析了数据lane的HS/LP mode的原理
2022-01-07 22:06:09 3826
原创 基于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
原创 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关注的人