首页 > 系统相关 >linux驱动编写(lcd驱动)

linux驱动编写(lcd驱动)

时间:2022-11-23 23:32:51浏览次数:46  
标签:obj s3c2410fb driver FB fb lcd linux 驱动 CONFIG




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



标签:obj,s3c2410fb,driver,FB,fb,lcd,linux,驱动,CONFIG
From: https://blog.51cto.com/feixiaoxing/5881991

相关文章

  • linux驱动编写(看门狗)
      看门狗是linux驱动的一个重要环节。某些特殊的设备,有时候需要放在一些环境恶劣的地方,比如电信设备。但是,任何软件都不可能100%没有bug。如何保证软件在遇到严重bug、......
  • linux驱动编写(dma驱动)
      linux下面的驱动虽然什么样的情形都有,但是dma驱动却并不少见。dma可以有很多的好处,其中最重要的功能就是能够帮助我们将数据搬来搬去,这个时候cpu就由时间去做别的事情......
  • linux驱动编写(电源管理驱动)
      对于嵌入式设备来说,合适的电源管理,不仅可以延长电池的寿命,而且可以省电,延长设备运行时间,在提高用户体验方面有很大的好处。所以,各个soc厂家在这方面花了很多的功夫。......
  • linux驱动编写(摄像头驱动)
       对于现代嵌入式设备,特别是手机来说,摄像头是很重要的一个设备。很多同学买手机,一看颜值,第二就看摄像头拍照如何。所以,从某个角度来说,摄像头是各个厂家主打的应用功能......
  • linux驱动编写(nand flash驱动)
      很长一段时间,nandflash都是嵌入式的标配产品。nandflash价格便宜,存储量大,适用于很多的场景。现在很普及的ssd,上面的存储模块其实也是由一块一块nandflash构成的。......
  • 在Ubuntu Linux上安装Deb文件的三种方法
    https://zhuanlan.zhihu.com/p/339632982?ivk_sa=1024320u方法一:在.deb文件夹下(应该是Downloads文件夹),双击.deb文件方法二:使用Gdebi应用程序来安装deb软件包及其依赖项......
  • 简述linux系统中软件包管理系统
    前几篇文章一一介绍了LINUX进程管理控制命令,详细介绍了静态查看ps命令和动态查看top命令,以及中断、停止命令在实际管理控制过程中的一些实践操作等这篇文章主要简单介绍下......
  • 使用ZLG7289,51单片机驱动的,显示按键号
    1;WritedbyLinXiwei,on2006.06.152;完成功能:等待按键输入,然后将所读到的按键码转换成十进制,送回ZLG显示,同时将前面的显示内容左移,并使当前按键值闪烁34......
  • 使用ZLG7289,51单片机驱动的带有按键功能的时钟小程序
    按键功能说明:KEY0:闪烁显示小时,并修改小时KEY1:闪烁显示分钟,并修改分钟KEY2:闪烁显示秒钟,并修改秒钟KEY12:确认修改,修改结束KEY13:上调时间KEY15:下调时间1......
  • 使用ZLG7289,51单片机驱动的时钟显示小程序
    1;*******ZLG7289PARAMETERS*******2ZLG_BIT_CNTEQU30H;Thenumberofdatasended;循环次数3ZLG_REC_BUFEQU31H;T......