详解linux lcd驱动编写

有些嵌入式设备是不需要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.o

 

obj-$(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_S3C2410

 tristate "S3C2410 LCD framebuffer support"

 depends on FB && ARCH_S3C24XX

 select FB_CFB_FILLRECT

 select FB_CFB_COPYAREA

 select FB_CFB_IMAGEBLIT

 ---help---

  Frame buffer driver for the built-in LCD controller in the Samsung

  S3C2410 processor.

 

  This driver is also available as a module ( = code which can be

  inserted and removed from the running kernel whenever you want). The

  module 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_DEBUG

 bool "S3C2410 lcd debug messages"

 depends on FB_S3C2410

 help

  Turn on debugging messages. Note that you can set/unset at run time

  through 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目录里面的内容很多,但是需要了解和关心的其实不多,努力去做、去解决问题就可以了。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。

原文链接:https://blog.csdn.net/feixiaoxing/article/details/79885576

原创文章,作者:GLEUR,如若转载,请注明出处:http://www.wangzhanshi.com/n/6780.html

(0)
GLEUR的头像GLEUR
上一篇 2025年1月1日 16:24:09
下一篇 2025年1月1日 16:24:11

相关推荐

  • Linux命令行上如何使用日历详解

    前言 通过 Linux 上的日历,不仅仅可以提醒你今天是星期几。诸如 date、cal、 ncal 和 calendar 等命令可以提供很多有用信息。 Linux 系统可以为你的日…

    Linux 2025年1月1日
  • linux如何修改用户密码

    一、概述 linux修改用户命名有两种方式 1、使用chpasswd通过用户输入'用户名:密码'来更改一组用户的密码,这种为明问修改密码,查看历史命令是可以看到…

    2024年12月17日
  • linux系统中设置定时任务的实现方式

    1. 引入 1.1 日常开发中我们经常需要设置一些定时任务 举个栗子: 在进行Java Web开发时,通常我们采用Springboot 框架 我们可以通过 注解+ cron表达式,…

    2024年12月17日
  • 如何在Linux下设置录音笔时间

    买了一个录音笔,效果比使用笔记本话筒录音好多了还省电。当然啦,我也曾试过使用手机录音,结果是,没能录多久就中断了(Android 就是这么不靠谱)。 我的录音需要记录较为准确的时间…

    2025年1月1日
  • Linux下Python脚本自启动与定时任务详解

    前言 最近同事问了一个关于Python脚本自启动与定时任务的问题,发现很多的朋友对这块都不是特别的熟悉,所以本文主要给大家介绍的是关于Linux下Python脚本自启动与定时任务的…

    Linux 2025年1月1日
  • Linux系统cpu飙高的排查方法

    1.通过top命令查看cpu占比较高的进程ID 2.通过top -H -p <进程ID>命令查看该进程中具体线程,可以看到第一个线程 4311 占用了88.2%的cpu…

    2024年12月17日
  • linux性能调试之vmstat分析

    1.性能分析的目的 1)找出系统性能瓶颈(包括硬件瓶颈和软件瓶颈); 2)提供性能优化的方案(升级硬件?改进系统系统结构?); 3)达到合理的硬件和软件配置; 4)使系统资源使用达…

    2025年1月1日
  • linux中把.c的文件编译成.so文件

    linux中共享库以so为后缀(shared object),与Windows下的DLL类似,是在程序运行时动态连接。多个进程可以连接同一个共享库。 以下以编译mylib.c为例讲…

    Linux 2025年1月1日
  • Linux之定时任务Crond详解

    定时任务crond介绍 crond是linux系统中用来定期执行命令/脚本或指定程序任务的一种服务或软件,一般情况下,我们安装完centos5/6 linux操作系统之后,默认便会…

    2025年1月1日
  • shell脚本报错:"[: =: unary operator expected"解决办法

    shell脚本报错:”[: =: unary operator expected”解决办法     在匹配字符串相等时,我用了类似这样的语句: ? if […

    Linux 2025年1月1日

发表回复

登录后才能评论