前面介绍了battery的相关的东西,现在我们来介绍下backlight模块,背光主要是用来调节显示屏亮度的,一般背光都是用PWM控制的,调节占空比达到改变有效电压值来调节光的强弱。
背光的移植在linux中虽然不是那么难,但是背光这个组件对我们嵌入式设备的续航能力有很大的影响,一般背光上面加的电压会有20多的电压,所以这部分会很耗电的,相当于是开了个大灯泡。
现在我们先来看下android goldfish中的背光代码,哈哈,没找到吧,没有,我们打开模拟器,看sysfs中,也是没有具体的背光的文件的,所以这里我们得自己实现,自己写代码练习练习,毕竟这部分不是非常的难,参考drivers/video/backlight/下的pwm_bl.c文件,基本可以仿照,我们要做的事情很简单,创建背光相关的文件系统即可,不需要去控制硬件做什么动作,因为我们本来就没有硬件。
首先看下video中的makefile,如果backlight/没有选中就选中它,不然我们的模块不会编译进去。然后再看下backlight/下的Makefile
这里没有一个文件被编译进去的,我们要把backlight.c先编译进去,直接这样改,我比较懒 呵呵呵,
然后重新编译下会生成backlight.o文件,并且在sysfs中会生成我们的backlight class
我们先来分析下backlight.c中的代码是如何实现的。
养成好习惯,看见代码多不用怕,首先看init函数:
很简单,这里只是用了class_create函数在sys/class下创建了backlight文件夹,然后是
backlight_class->dev_attrs = bl_device_attributes;
在backlight class中创建了一系列的文件系统,
所以我们的驱动只要填充好具体的结构体,初始化好文件系统就够了,在sysfs中生成可以让user space调用的接口,接下来的事情就交给上层开发人员去做。
ok,我们来看下我们自己写的驱动,在backlight文件夹下新建一个文件叫 android-backlight.c,我是参照pwm_bl.c来写的,具体先来看下代码,init函数
使用platform_driver_register注册平台驱动,看下传入的参数:
这里我偷懒没写remove suspend和resume'回调函数,在移植具体驱动的时候我们都应该写上,特别是suspend和resume函数,来看下我们paltform驱动的device_register是在哪做的,在arch/arm/mach-goldfish/board-goldfish.c
在init中进行注册:
这边android_backlight_data结构体主要是做一个背光的初始化。
接下来我们看一下probe函数,
首先检查我们得到的platform_data结构体中有没有init回调函数,有的话执行,没有的话跳过。
这边比较重要的是backlight_device_register函数
这里做的最主要的事情就是对一些结构体的初始化,然后调用device_register把我们具体的device挂到我们的backlight class下,具体的是如何实现的我这里不多说,我这里只做一些简单的介绍。这里大家可以看到最重要的是backlight_device_register函数的最后一个参数,这里提供了我们可以自己定义的几个回调函数,
我们这边定义了2个回调函数挂上去:
然后我们去实现这2个函数,就基本完成了我们的驱动了,看函数名字就知道这2个函数的作用,一个是用来更新我们的背光亮度,还有一个是用来得到我们的光强。
这个函数比较简单,就是返回backlight_device->props->brightness,我们来看下最终我们的brightness是哪里写进去的。这里比较绕,我们还是结合update函数一起分析:
我们姑且这么理解,我们有一个结构体,brightness_properity用来存放backlight的一些属性信息,比如说brightness,当我们要get_brightness的时候就是去返回这个brightness,当我们要调节光强的时候就是给这个结构体中的成员变量赋值。
首先我们要了解android中用户层是怎么做的,因为我们linux driver最终的目标就是服务用户层,所以我们要了解。
其实android HAL层就是open backlight中的brightness这个节点,然后进行读写来设置背光的亮度的,好吧,先来看下读写这个节点会呼叫的回调函数
在backlight.c中实现:
当我们向brightness这个文件节点中写入我们要设置的背光亮度的时候会调用store这个回调函数,我们来看下主要做了哪些事情,跟我们在driver层自己写的update函数到底有什么关系呢?
前面都是一大堆不用看的代码,这里最重要的看这个
首先是把brightness写进我们的背光属性结构体中,这样就更新了我们数据结构中的背光亮度在值,但是这样做是不够的,因为我们最终要控制的是硬件,所以看下之后我们调用了backlight_update_status函数,ok,看下这个函数的定义:
/include/linux/backlight.h
看下这个内联函数,看到ops就知道了吧,这边调用了bd->ops->update_status这里就调用到了我们自己写的update_status回调函数:
这里咱也没做什么,因为android模拟器没有真正的背光的设备,我们打印了信息,还有就是一个notify回调函数,这里我们也没有实现,这里我猜想就是这边背光如果涉及到别的deivce的行为的话,这个notify函数可以通知到别的设备。
ok,这边就介绍结束了,我们来启动我们的android模拟器来看下sysfs中backlight下我们自己的节点。
大家可以看到我们自己的device的文件系统,我们cat 出来的brightness就是我们在board-goldfish.c中设置的初始值。
=====================================================
OK,这部分就介绍到这,下面一篇会介绍到我们HAL层中是如何封装我们driver中的接口的。
分享到:
相关推荐
资源分类:Python库 所属语言:Python 资源全名:rpi_backlight-1.5.0.tar.gz 资源来源:官方 安装方法:https://lanzao.blog.csdn.net/article/details/101784059
/dev/backlight-1wire>控制,该设备提供了write方法,根据用户传入的亮度值(0 ~ 127)来设置背光。 程序由操作函数<backlight_ctl.c> ,头文件<backlight_ctl.h>,测试程序<test.c>组成。
这是Raspberry Pi 7“ LCD的仿真器,用于测试和开发而无需在Pi上连接甚至不运行物理显示器。 要求 需要Python 3.5+,以及 , 和软件包(请参见下文)。 安装 PyPI上提供了用于x86 / x64的PySide2轮子,因此您可以...
如果不带任何参数调用该命令,则scrlk和numlk将打开。 如果传递任何参数,例如“ off”。 除了麻木以外的所有东西都被关闭了。 首先下载二进制文件(或通过克隆此存储库进行编译)。 一旦打开scrlk,将启用背光。 ...
艾为背光16步线性调光参考代码_MTK平台
detailed informations about the lcd backlight driver inplementation to a mediatek platform. (mt6573)
安卓Android源码——backlight.zip
android backlight源码.zip
intel-edison-lcd-rgb-backlight-display-helper ...// Set backlight color from 2 colors and rangedisplay.setColorFromTwoColors('green', 'yellow', .5); // set middle color of green and yellow// Display
backlight.zip项目安卓应用源码下载backlight.zip项目安卓应用源码下载 1.适合学生毕业设计研究参考 2.适合个人学习研究参考 3.适合公司开发项目技术参考
在 Asus Zenbook UX31A 和类似型号中调整键盘背光亮度的助手。 基于由 majewsky 创作的原始资料 这些文件旨在与 Ubuntu Linux 一起使用,尽管它可能适用于其他系统。 (原始脚本是为 Arch Linux 编写的。) 在运行...
适用于TUXEDO / Clevo计算机的最小Linux发行版CLI和UI键盘背光 该实用程序可自动在Linux上切换TUXEDO / Clevo计算机的键盘背光状态。 它可以关闭键盘背光灯,设置定义的任何模式以及在“颜色”( custom )模式下...
$ backlight-cli --decrease monitor monitor brightness has been set to 12000 $ backlight-cli --increase keyboard keyboard brightness has been set to 25 $ backlight-cli --help usage: backlight-cli [-h] ...
linux 2440 下GPIO口控制的背光驱动,一个经典的linux 2.6驱动
LCD module 16 X 2 backlight.STEP LCD12232.STEP LCD12864.SLDPRT MT-16S2D.STEP MT6116.STEP RF12232F.STEP SEETRON GLO-216Y-G.STEP WEG010016D.STEP WG12864A with PLS and mounting.STEP WG12864A-1.STEP
Android的LCD和键盘 背光亮度设置 /sys/class/leds/lcd-backlight/brightness /sys/class/leds/keyboard-backlight/brightness
仅在“打开”和“关闭”工作时才需要显示板V1.0(需要验证) 确保执行以下命令,以便能够以普通用户身份访问配置文件: sudo su -c 'echo SUBSYSTEM==\"backlight\", RUN+=\"/bin/chmod 0666 /sys/class/backlight/...
backlight.zip
The MAX9288/MAX9290 gigabit multimedia ...and switching of the backlight, among other uses. A continuously sampled GPI input supports touch-screen controller interrupt requests in display applications.
5、可选: R:\wyb\ap6181_sina33m_sc3817r\android\device\softwinner\astar-d7\ueventd.sun8i.rc #/dev/video1 0777 media media /dev/snd/pcmC0D0c 0777 media media /dev/snd/pcmC0D0p 0777 media media #/dev/...