【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】

有些嵌入式设备是不需要lcd的,比如路由器。但是,还有些设备是需要lcd显示内容的,比如游戏机、测试仪、智能手表等等。所以,今天我们就看看lcd驱动在linux上是怎么进行的。

1、代码目录

drivers/video

2、查看video下的Makefile文件

# SPDX-License-Identifier: GPL-2.0
obj-$(CONFIG_VGASTATE)            += vgastate.o
obj-$(CONFIG_HDMI)                += hdmi.oobj-$(CONFIG_VT)         += console/
obj-$(CONFIG_FB_STI)          += console/
obj-$(CONFIG_LOGO)        += logo/
obj-y                 += backlight/obj-y                += fbdev/obj-$(CONFIG_VIDEOMODE_HELPERS) += display_timing.o videomode.o
ifeq ($(CONFIG_OF),y)
obj-$(CONFIG_VIDEOMODE_HELPERS) += of_display_timing.o of_videomode.o
endif

3、fbdev默认是被编译的,一般情况下我们只需要看这个目录就行了

config FB_S3C2410tristate "S3C2410 LCD framebuffer support"depends on FB && ARCH_S3C24XXselect FB_CFB_FILLRECTselect FB_CFB_COPYAREAselect FB_CFB_IMAGEBLIT---help---Frame buffer driver for the built-in LCD controller in the SamsungS3C2410 processor.This driver is also available as a module ( = code which can beinserted and removed from the running kernel whenever you want). Themodule will be called s3c2410fb. If you want to compile it as a module,say M here and read <file:Documentation/kbuild/modules.txt>.If unsure, say N.
config FB_S3C2410_DEBUGbool "S3C2410 lcd debug messages"depends on FB_S3C2410helpTurn on debugging messages. Note that you can set/unset at run timethrough sysfs

4、以s3c2410为例,分析得出其lcd主要依赖的macro是FB_S3C2410,

obj-y                += core/obj-$(CONFIG_FB_S3C2410)    += s3c2410fb.o

5、除了core是默认编译的,我们只需要查看s3c2410fb.c这个文件

static struct platform_driver s3c2410fb_driver = {.probe        = s3c2410fb_probe,.remove      = s3c2410fb_remove,.suspend    = s3c2410fb_suspend,.resume        = s3c2410fb_resume,.driver     = {.name   = "s3c2410-lcd",},
};static struct platform_driver s3c2412fb_driver = {.probe     = s3c2412fb_probe,.remove      = s3c2410fb_remove,.suspend    = s3c2410fb_suspend,.resume        = s3c2410fb_resume,.driver     = {.name   = "s3c2412-lcd",},
};int __init s3c2410fb_init(void)
{int ret = platform_driver_register(&s3c2410fb_driver);if (ret == 0)ret = platform_driver_register(&s3c2412fb_driver);return ret;
}

6、不出意外,这又是一个platform设备,接着看看其probe函数做了什么

 ret = register_framebuffer(fbinfo);if (ret < 0) {dev_err(&pdev->dev, "Failed to register framebuffer device: %d\n",ret);goto free_cpufreq;}

7、整个代码,最重要的就是这个register动作,当然还要阅读一下是否存在其他的函数接口

static struct fb_ops s3c2410fb_ops = {.owner        = THIS_MODULE,.fb_check_var    = s3c2410fb_check_var,.fb_set_par  = s3c2410fb_set_par,.fb_blank  = s3c2410fb_blank,.fb_setcolreg    = s3c2410fb_setcolreg,.fb_fillrect = cfb_fillrect,.fb_copyarea    = cfb_copyarea,.fb_imageblit   = cfb_imageblit,
};

8、最后还是老规矩,看看有没有中断需要处理的

 ret = request_irq(irq, s3c2410fb_irq, 0, pdev->name, info);

9、后面的话

很多同学把驱动想的很复杂,其实都是一些格式代码。掌握了基本结构,加上芯片手册、硬件协议,一般的驱动都可以在很短的时间内学会,这个不存在问题。尤其是那些在市场上出现了很多年的soc,基本不需要改动就可以直接使用。当然,如果真的发现问题了,我们也要有debug的能力。drivers目录里面的内容很多,但是需要了解和关心的其实不多,努力去做、去解决问题就可以了。

linux驱动编写(lcd驱动)相关推荐

  1. Linux驱动之LCD驱动编写

    在Linux驱动之内核自带的S3C2440的LCD驱动分析这篇博客中已经分析了编写LCD驱动的步骤,接下来就按照这个步骤来字尝试字节编写LCD驱动.用的LCD屏幕为tft屏,每个像素点为16bit.对 ...

  2. 嵌入式Linux下彩色LCD驱动的设计与实现

    嵌入式Linux下彩色LCD驱动的设计与实现 转载 摘要:本文介绍了如何在嵌入在开发彩色LCD显示驱动的方法,并对Linux中的显示驱动程序结构和框架作一介绍. 长期以来,在常见的掌上电脑(PDA)等 ...

  3. Linux驱动之LCD驱动

    显示设备例如LCD,在Linux中用Framebuffer来表征,在/dev目录下显示设备一般表示成这样:/dev/fbX,应用程序通过访问这个设备来访问LCD,实际上应用程序通过操作显存来操作显示设 ...

  4. android lcd驱动框架,LCD驱动及Framebuffer相关(转载)

    LCD驱动及Framebuffer相关 (2012-11-20 17:04) 标签:&nBSP; lcd驱动  framebuffer  io内存  分类: Android驱动模块相关 内容提 ...

  5. linux驱动之LCD驱动框架

    软件框架: lcd框架其实与i2c/spi及其他驱动框架大同小异,都是由一个底层的platform驱动和一个较上层的抽象驱动组成.前者一般由厂商编写,而后者是内核框架提供的. 核心层 \linux-i ...

  6. 嵌入式驱动编写-LCD驱动程序

    如何来写LCD的驱动程序,首先 看芯片开发手册和原理图 根据原理图,找到s3c2440的GPIO控制管脚,gpb   gpc  gpd  gpg管脚控制 需要设置寄存器 以及设置LCD控制寄存器 查看 ...

  7. Linux下IIC驱动编写(驱动adxl345传感器)

    基于IMX6ULL Mini开发板,硬件连接:SCL->43, SDA->42,CS->3.3V INT1->7 一.搭建基础框架 1.设置私有数据client,linux/i ...

  8. STM32MP157 Linux系统移植开发篇14:Linux内核RGB LCD驱动移植

    本文章为<STM32MP157 Linux系统移植开发篇>系列中的一篇,笔者使用的开发平台为华清远见FS-MP1A开发板(STM32MP157开发板).stm32mp157是ARM双核,2 ...

  9. Linux下的FrameBuffer驱动框架

    一.RGB LCD经典显示器件介绍: 1.LCD屏幕的重要属性参数: ① 分辨率:也就是屏幕上的像素点的个数: ② 像素格式:即单个像素点RGB三种颜色的表达方式,包括RGB888.ARGB8888和 ...

  10. Linux LCD 驱动实验

    目录 Linux 下LCD 驱动简析 1 Framebuffer 设备 LCD 驱动简析 硬件原理图分析 LCD 驱动程序编写 运行测试 LCD 屏幕基本测试 设置LCD 作为终端控制台 LCD 背光 ...

最新文章

  1. Ajax实现的城市二级联动一
  2. nodejs Yarn替代npm的包管理——快速、安全、可靠性高的依赖管理
  3. Linux vim的三种模式
  4. C++ 暴力搜索String pattern search字符串模式的实现算法(附完整源码)
  5. mc服务器玩家无限掉线怎么办,服务器频繁掉线 求解
  6. em算法 实例 正态分布_EM算法解GMM
  7. python面试题总结(3)-- 数据类型(字符串)
  8. 一道皮皮物理题的皮皮解法
  9. 详解如何基于Arduino兼容板Digispark实现虚拟键盘与鼠标
  10. 使用IEEE802.1Q VLAN实现单线复用之牛刀小试篇
  11. 在Linux系统下制作U盘启动盘
  12. 软件测试登陆注册经典测试用例
  13. Remote 'g' packet reply is too long 错误
  14. 抖音seo源码,抖音短视频SEO,SEO系统源码搭建
  15. 会计软件遭黑客攻击,QuickBooks数据盗窃现象大幅增加
  16. HPC 网络技术 — Overview
  17. 甘霖超级计算机,中国首位!甘霖获超算杰出新人奖,“神威·太湖之光”绽放异彩...
  18. FGui导出图集提示 vips2png
  19. 百家讲坛 黄帝内经(第三部)
  20. JavaWeb - 黑马旅游网(2):用户注册

热门文章

  1. JDK1.8之Stream
  2. React.js 小书 Lesson18 - 挂载阶段的组件生命周期(一)
  3. 腾讯云自曝自家技术只值1分钱,这技术以后谁还敢用
  4. 清浮动,防止上下margin重叠(浏览器顶部空白崩溃)
  5. 如何查看所安装的jdk的版本位数
  6. C++生成随机数:高斯/正态分布(gaussian/normal distribution)
  7. 编程之美-3.5-最短摘要的生成
  8. [Usaco2016 Dec]Moocast
  9. 【经典】Noip动态规划
  10. HDU 5769 Substring(后缀数组)