自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

hexiaolong2009的专栏

专注于 Linux Graphics

  • 博客(97)
  • 资源 (11)
  • 收藏
  • 关注

原创 最简单的BufferQueue测试程序(一)

本示例代码使用BufferQueue最基本的操作接口,演示了BufferQueue操作的基本流程。Android版本:8.1伪代码void main(void){ createBufferQueue(); consumerConnect() connect(); dequeueBuffer(); requestBuffer(); queueBuffer(); a...

2019-08-10 11:08:52 4489 1

原创 DRM 驱动程序开发(开篇)

前言在前面的《最简单的DRM应用程序》系列文章中,我们学习了如何使用 libdrm 接口编写 DRM 应用程序。从本篇开始,我们将进入一个全新的世界,一起来学习如何在 kernel 空间编写 DRM 驱动程序。Objects在开始编写 DRM 驱动程序之前,我有必要对 DRM 内部的 Objects 进行一番介绍。因为这些 Objects 是 DRM 框架的核心,它们缺一不可。上图蓝色部...

2019-05-04 09:01:50 42701 26

翻译 DRM (Direct Rendering Manager) 的发展历史

https://en.wikipedia.org/wiki/Direct_Rendering_Manager#History

2019-03-23 12:47:38 13327 13

原创 DRM应用程序进阶 (atomic-plane)

前言在上一篇《DRM应用程序进阶(atomic-crtc)》文章中,我们学习了如何通过libdrm的atomic接口实现modeseting的操作。本篇,我们将一起来学习如何通过atomic接口,来实现 drmModeSetPlane() 相同的操作。Atomic Commitplane update的atomic操作如下:drmModeAtomicAddProperty(req, pla...

2019-02-20 21:37:34 24208 45

原创 DRM应用程序进阶 (atomic-crtc)

前言在上一篇《DRM应用程序进阶(Property)》中,我们学习了Property的基本概念及作用。在本篇中,我们将一起来学习如何操作这些Property,即libdrm Atomic接口的用法。Atomic为什么叫“Atomic Commit”?初学者第一次接触到DRM时,总会好奇当初开发者为什么要起 Atomic 这个名字。Wiki上关于该名词有较详细的解释,如果大家感兴趣可以通过本...

2019-02-15 23:04:04 26093 14

原创 DRM应用程序进阶 (Property)

前言通过前面几篇《最简单的DRM应用程序》系列文章,我们学习了如何编写一个最基本的DRM应用程序。但是,这些程序所使用的接口,在如今的DRM架构中其实早已经被标记为 Legacy(过时的) 接口了,而目前DRM主要推荐使用的是 Atomic(原子的) 接口。Atomic接口我会在下篇文章中重点介绍,本篇主要介绍Atomic操作必须依赖的基本元素,Property(属性)。Property所谓...

2019-02-13 22:42:32 23515 22

原创 最简单的DRM应用程序 (plane-test)

在上一篇 最简单的DRM应用程序 (page-flip)中,我们学习了drmModePageFlip()的用法。而在更早的两篇文章中,我们还学习了drmModeSetCrtc()的使用方法。但是这两个接口都只能全屏显示framebuffer的内容,如何才能在屏幕上只显示framebuffer的一部分内容呢?本篇我们将一起来学习DRM另一个重要的刷图接口:drmModeSetPlane()。在学习...

2018-12-10 02:26:18 36471 77

原创 最简单的DRM应用程序 (page-flip)

在上一篇 最简单的DRM应用程序 (double-buffer)中,我们了解了DRM更新图像的一个重要接口drmModeSetCrtc()。在本篇文章中,我们将一起来学习DRM另一个重要的刷图接口:drmModePageFlip()。drmModePageFlip()的功能也是用于更新显示内容的,但是它和drmModeSetCrtc()最大的区别在于,drmModePageFlip()只会等到V...

2018-12-01 15:50:20 32370 61

原创 最简单的DRM应用程序 (double-buffer)

在上一篇 最简单的DRM应用程序 (single-buffer)中,我们学习了如何去编写一个最基本的DRM应用程序。而本篇文章,将在 modeset-single-buffer 的基础上,对其进行扩展,使用双buffer机制的案例,来加深大家对drmModeSetCrtc()函数的印象。使用上一节中的modeset-single-buffer程序,如果用户想要修改画面内容,就只能对mmap()后...

2018-11-24 19:52:35 24476 27

原创 最简单的DRM应用程序 (single-buffer)

在学习DRM驱动之前,应该首先了解如何使用DRM驱动。以下使用伪代码的方式,简单介绍如何编写一个最简单的DRM应用程序。伪代码:int main(int argc, char **argv){ /* open the drm device */ open("/dev/dri/card0"); /* get crtc/encoder/connector id */ drmModeGe...

2018-11-17 11:53:00 57164 60

原创 LCD显示异常分析——撕裂(tear effect)

概述在上一篇《LCD显示异常分析——开机闪现花屏》中,我们一起分析了开机花屏的问题,在这一篇中,我将对LCD撕裂(tear effect)问题进行详细分析,以及给出这类问题的常用解决方法。本文适用范围: 对象:LCD驱动调试人员 硬件:带GRAM的LCD (如SPI/MCU/DSI CMD屏) 软件:所有嵌入式操作系统 现象首先贴一张动态图,让大家能直观...

2018-02-13 23:58:31 33747 22

原创 LCD显示异常分析——开机闪现花屏

概述最近在工作中,有同事遇到LCD开机瞬间会闪现雪花屏的问题,而这类问题都有个共同点,那就是都发生在带GRAM的屏上,同样的问题,在休眠唤醒时也会出现。其实这类问题的原理分析并不难,只是在给别人解释的时候不太好描述,因此,我特地写了这篇文章,好让大家能够更容易、更直观的理解这类花屏问题的原因,也希望能够帮助那些遇到同样问题的朋友。环境 软件:Android 硬件:带GRAM的LCD(如

2018-01-30 01:08:44 16201 7

原创 STM32F429 Discovery FMC驱动原子4.3寸LCD

本人手里有块STM32F429 Discovery板子,因为某种原因需要使用8080接口的LCD,而该块开发板自带的LCD接口采用LTDC驱动,所以就在正点原子这里买了一块4.3寸电容触摸屏,驱动IC为NT35510。 为了快速搭建软件工程,本人使用STM32CubeMX工具生成代码模板,并编写了lcd.c和nt35510.c两个文件,代码如下:

2015-04-25 19:36:19 7189

原创 S3C2440之Camera驱动代码模板(RealView MDK)

好记心不如烂笔头,为方便以后查看代码及代码重复利用,这里贴出S3C2440 Camera驱动代码。使用友善MINI2440开发板,开发环境为RealView MDK 4.22。最初,本人在网上下载了许多mini2440 camera驱动的代码,但结果都不尽人意,因为这些代码看起来都比较晦涩难懂,都是直接对寄存器进行位与位或操作,且有的代码排版布局很乱,对初学者来说难度较大。由于本人接触了STM32开发后,觉得STM32的库函数给初学者提供了很大帮助,仅仅通过函数名及变量名就能知道当前操作的是哪个寄存器,

2015-04-08 10:59:14 1093

原创 S3C2440之UART驱动代码模板(RealView MDK)

好记心不如烂笔头,为方便以后查看代码及代码重复利用,这里贴出S3C2440 UART驱动代码。使用友善MINI2440开发板,开发环境为RealView MDK 4.22。需要注意的是,本代码中,对GPIO的初始化放在了s3c2440.s中完成,采用keil自带的html方式进行配置。该源码结构简单明了,原始工程下载地址:点击打开链接UART控制器初始化:voi

2015-03-03 18:08:03 1099

原创 S3C2440之MMU驱动代码模板(RealView MDK)

好记心不如烂笔头,为方便以后查看代码及代码重复利用,这里贴出自己写的S3C2440 MMU代码库。使用友善MINI2440开发板,开发环境为RealView MDK 4.22。该源码结构简单明了,原始工程下载地址:点击打开链接

2015-03-03 17:36:41 1256 1

原创 S3C2440之LCD驱动代码模板(RealView MDK)

好记心不如烂笔头,为方便以后查看代码及代码重复利用,这里贴出S3C2440 LCD控制初始化代码。使用友善MINI2440开发板,LCD为320*240,开发环境为RealView MDK 4.22。该源码结构简单明了,原始工程下载地址:点击打开链接

2015-03-03 15:49:12 1225

原创 STM32F429之LTDC驱动图解

本文基于ST官方demo板STM32F429 Discovery硬件平台,以看图说话的形式给大家讲解LTDC的主要参数配置。关于本文提到的代码部分均摘自本人另一片文章《STM32F429之LTDC代码模板》,LCD硬件为240x320,驱动IC为ili9341。本文目的意在让大家通过几张图就能掌握STM32F429 LTDC控制器的配置要领,而从干涩的文字中解脱出来,方便记忆。当然本文只是讲解了LTDC一些常用的设置,关于更多细节的操作还是得参照ST的官方datasheet。

2015-03-02 00:34:21 20666 6

原创 STM32F429之LTDC代码模板

好记心不如烂笔头,为了方便以后快速查阅代码,提高开发效率,在这里特将LTDC驱动的初始化代码贴上来。本代码是基于ST官方STM32F429 Discovery Demo板的,学习LTDC驱动时参考了Demo板的官方例程,但是总觉得官方例程写得有点繁琐,不简洁明了,于是在此基础上重新整理代码得到如下初始化模板。

2015-02-28 16:47:16 7811 3

原创 Windows Phone 8.1 驱动开发——SPB 简介

SPB是Simple Peripheral Bus的简称,直译过来就是简单外设总线,它包括I2C总线、SPI总线。SPB是在Windows 8以后才被驱动支持的,而在之前如果系统想访问I2C外围设备,则只能通过BIOS程序间接的访问,没法直接访问外设寄存器。在系统启动时,ACPI固件会根据配置表扫描SPB设备,并将它们的资源信息传递给PnP(即插即用设备)管理器,这些资源就包括I2C从设备地址、I2C总线时钟频率以及该设备的中断号。需要注意的一点,在ACPI资源配置表中,是不允许使用Memory32Fixe

2015-01-21 23:37:07 3460

原创 Windows Phone 8.1 驱动开发——如何调用ACPI Method

今天给大家讲解一下,在KMDF(Kernel-Mode Driver Framework)中是如何调用ACPI配置表中用户定义的Method。在ACPI中,凡是以下划线开头的Method(如_STA)都系统预定义的Method,它们都由Windows OS自己调用,其他用户自定义Method则由驱动程序调用。

2015-01-20 00:20:51 5188 1

原创 Windows Phone 8.1 驱动开发——注册表read/write

在做Windows Phone驱动开发时,时常需要和注册表打交道,因此,作为手机驱动开发人员,有必要了解一下注册表相关的知识。本人目前对注册表也不怎么了解,也只是大概的知道在Windows Phone下,驱动的inf文件并不像桌面Windows那样提供驱动自动安装程序,在Windows Phone下,inf文件最终会被解析成注册表信息并添加到注册表中。我们驱动往往将一些硬件参数保存在注册表中,因此在软件编程时,自然就会涉及到注册表的读写更新操作。

2015-01-18 19:28:28 1739

原创 Windows Phone 8.1 驱动开发——GPIO Device

在上一节 Windows Phone 8.1 驱动开发——GPIO 简介 中,我们了解了Windows 8系统中GPIO驱动的大体架构,由于在工作中手机驱动开发人员很少涉及到GPIO Controller驱动的开发,该部分都由平台厂商开发完成,所以这里给大家讲解一下GPIO Peripheral Device Driver的开发步骤。本文以微软官方提供的GPIO Sample为例进行讲解,你也可以到MSDN官网进行源码下载:GPIO Sample Drivers

2015-01-18 03:55:34 4195 2

原创 Windows Phone 8.1 驱动开发——GPIO 简介

在windows 8系统中,GPIO驱动被分成了三部分:GPIO控制器驱动、GPIO框架(GpioClx) 和 GPIO外设驱动。GPIO控制器驱动:直接操作GPIO控制寄存器,与控制器硬件相关,并通过事件回调的方式将数据传送给GpioClx。GPIO框架:负责连接GPIO Controller Driver 和 Periphera Device Driver 的中间层,实现外设驱动与控制

2015-01-17 12:47:13 2000

原创 MTK DriverOnly——Camera移植

一、原理图确认 首先通过硬件人员或SPM获取到项目的电路原理图,观察Camera部分的电路原理图,了解Camera的总线接口以及引脚定义。下图为Tango+3GCamera部分的电路示意图:   二、GPIO配置    由以上原理图可知,Camera接口总共使用了17根引脚,分别为8根控制信号线、8根数据信号线和1根模组ID引脚。其中SCL、SDA、

2014-03-17 14:56:42 2935

原创 Config Spec语法举例说明

本文以Tango+3G V1.0 Bugfix 的Config Spec文件为例进行说明。 #==========================================================================#  History :#----------------------------------------------------------

2014-02-20 11:12:03 1346

原创 ClearCase查不出checkout文件的解决办法

现象:在对某一个或某一些文件进行Check Out操作以后,当使用Find Checkouts时,却无法找出Check Out文件,如下图:  由上图可知,sim_msdc_test.c文件和BC_drv.c文件已经成功Check Out了,但是当使用Find Checkouts时,却出现如下状况:     问题原因:通过IT6000的帮

2014-02-20 11:02:00 948

原创 ClearCase基础培训——学习笔记

个人总结: 一个VOB实际上就是一个版本受控的文件的集合,这个集合存在于服务器上,并且这个集合是只读的。通过它的英文全称就很容易理解(Versioned Object Base)。 一个View实际上就是一个窗口,有了这个窗口,用户就能够看到VOB中的具体内容,实际上就是将VOB中想要访问的内容映射到这个窗口中来,没有这个窗口,用户就无法访问VOB中的数据。 注:以下图片均

2014-02-20 10:51:08 887

原创 FatFs源码剖析

一、介绍:本文以网上开源文件系统FatFs 0.01为研究对象,剖析FatFs文件系统的核心操作。FatFs目前最新版本已更新到0.10a版本,而我之所以选择0.01版本,是因为这是最早的发布版本,与最新的版本相比,去掉了很多高级应用,且代码量相对较小,宏开关也少了许多,易于阅读和理解,用来研究它的雏形再合适不过了,所以笔者选择0.01版本进行剖析。当大家了解了0.01的核心思想后,再回去看最

2014-02-19 17:25:22 10947 4

原创 FAT16图文详解

注:FAT16驱动代码不是本人编写的,是从网上下载的,本人只是对该代码进行研读学习,并做下笔记。该FAT16驱动应该是比较老的了,猜测应该在DOS时代比较流行,但放在今天,对于刚刚进阶FAT16的小伙伴来说,还是很适合初学者学习的好资料!笔者也相信,只要小伙伴们静下心来,慢慢读懂该代码,相信很快就能在脑海中形成一张FAT16的总览图了。        笔者对代码进行了简单测试,在STM32平台

2013-12-26 21:44:16 2990 3

原创 《建立一个属于自己的AVR的RTOS》笔记——完善的占先式内核

第八篇:完善的占先式内核         与第七篇没有多大区别,只是将前面的占先式内核与协作式内核相结合,增加了任务阻塞和信号量功能。        任务级切换:高优先级——>低优先级       中断级切换:低优先级——>高优先级                                                                    

2013-12-12 13:14:24 885

原创 《建立一个属于自己的AVR的RTOS》笔记——任务调度对比

第七篇:占先式内核(只带延时服务)——任务调度对比        协作式内核 + 轮番调度内核  = 占先式内核

2013-12-12 13:10:55 806

原创 《建立一个属于自己的AVR的RTOS》笔记——时钟节拍中断对比

第七篇:占先式内核(只带延时服务)——时钟节拍中断对比增加了IntNum和OSCoreState两个变量register unsigned char IntNum asm("r4"); //中断嵌套计数器 //只有当中断嵌套数为0,并且有中断要求时,才能在退出中断时,进行任务调度 register unsigned char OSCoreState

2013-12-12 13:05:47 877

原创 《建立一个属于自己的AVR的RTOS》笔记——时间片轮番调度

第六篇:时间片轮番调度法的内核  //进行任务调度 void OSSched(void) { // 根据中断时保存寄存器的次序入栈,模拟一次中断后,入栈的情况 __asm__ __volatile__("PUSH __zero_reg__ \t"); //R1 …… __asm__ __volatile__("In

2013-12-12 12:59:36 970

原创 《建立一个属于自己的AVR的RTOS》笔记——OSTaskSemPost

第五篇:完善的协作式的内核——OSTaskSemPost //发送一个信号量,可以从任务或中断发送 void OSSemPost(unsigned char Index) { if(Sem[Index].OSEventType) //当要求的信号量是共享型 { Sem[Index].OSEventState=0x

2013-12-12 12:53:43 1131

原创 《建立一个属于自己的AVR的RTOS》笔记——OSTaskSemPend

第五篇:完善的协作式的内核——OSTaskSemPend //任务等待信号量,挂起 unsigned char OSTaskSemPend(unsigned char Index,unsigned int Timeout) { //unsigned char i=0; if(Sem[Index].OSEventState) //信

2013-12-12 12:08:53 1998

原创 《建立一个属于自己的AVR的RTOS》笔记——OSSemCreate

第五篇:完善的协作式的内核——OSSemCreate //信号量 struct SemBlk { unsigned char OSEventType; //型号 0,信号量独占型;1信号量共享型 unsigned char OSEventState; //状态 0,不可用;1,可用 unsigned char OSTaskPendT

2013-12-12 12:05:39 1062

原创 《建立一个属于自己的AVR的RTOS》笔记——OSTaskResume

第五篇:完善的协作式的内核——OSTaskResume //恢复任务 可以让被OSTaskSuspend或 OSTimeDly暂停的任务恢复 void OSTaskResume(unsigned char prio) { OSRdyTbl |= 0x01<<prio; //从任务就绪表上重置标志位 TCB[prio].OSWaitTick=0;

2013-12-12 12:02:54 781

原创 《建立一个属于自己的AVR的RTOS》笔记——OSTaskSuspend

第五篇:完善的协作式的内核——OSTaskSuspend //挂起任务 void OSTaskSuspend(unsigned char prio) { TCB[prio].OSWaitTick=0; OSRdyTbl &= ~(0x01<<prio); //从任务就绪表上去除标志位 if(OSTaskRunningPrio==prio)

2013-12-12 12:00:15 806

原创 《建立一个属于自己的AVR的RTOS》笔记——任务切换全过程

第四篇:只有延时服务的协作式的内核——任务切换全过程

2013-12-12 11:47:05 1110

STM32F429 FMC驱动正点原子4.3寸电容触摸屏

STM32F429 FMC驱动正点原子4.3寸电容触摸屏,工程采用STM32CubeMX搭建,详情请参考我的博客。

2015-04-25

S3C2440 camera驱动

自己写的S3C2440 camera裸机驱动,采用类似STM32库函数的架构编写CAMIF接口驱动,适合初学者学习。

2015-04-08

s3c2440 uart driver

基于s3c2440的串口驱动,代码简单易懂,硬件平台为友善mini2440,使用RealView MDK 4.22开发。

2015-03-03

S3C2440 MMU driver

自己写的s3c2440 mmu 库,使用RealView MDK4.22开发环境,硬件平台友善MINI2440。

2015-03-03

S3C2440 lcd driver

基于友善MINI2440的LCD驱动,使用RealView MDK环境开发,代码简单易懂。

2015-03-03

LTDC驱动模板

基于STM32F429 Discovery Demo板的LTDC驱动模板,代码简洁明了,方便大家快速开发

2015-02-28

ClearCase基础培训.pdf

clearcase培训资料,对于刚接触管理软件的新手,是个入门的好资料。

2014-02-20

FatFs0.01源码中文注释

该FatFs版本为最老的0.01版本,本人对其进行了详细的中文注释。用于研究FatFs文件系统的架构很有帮助。

2014-02-19

基于SDIO接口的SD卡IAP源码

采用SDIO接口实现IAP功能的源代码,开发工具RealView MDK。

2013-12-09

MTK背光驱动关键代码

用于MTK功能机下的LCD+KEYPAD背光驱动控制。

2013-12-09

空空如也

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

TA关注的人

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