LCD屏背光驱动调试心得---血的教训
开发板:明远智睿MY-IMX6-EK140
内核源码:linux-3.14.52
背光驱动IC:MP3202
调光原理:通过开发板的核心板PWM4引脚控制MP3202的EN脚,输出不同的占空比从而达到输出平均电流的不同,这样就可以达到调节背光亮度的目的
调试过程:
1.从硬件图可以看出核心板的PWM4引脚连接到了背光驱动IC MP3202的EN脚,所以我们通过搜索PWM4来找设备树上的硬件节点
2.在明远智睿MY-IMX6-EK140设备树,arch/arm/boot/dts/myimx6ek140-6g.dts中搜索PWM4
3.搜索结果如下:
backlight {
compatible = "pwm-backlight";
pwms = <&pwm4 0 5000000>;
brightness-levels = <0 4 8 16 32 64 128 255>;
default-brightness-level = <7>;
status = "okay";
};
由此可以得出背光驱动是pwm-backlight
4.在linux内核源码中找pwm-backlight驱动,这个驱动在drivers/video/backlight/pwm_bl.c中,由于要调试这个驱动,所以我在pwm_bl.c驱动的探测函数中加了打印信息
printk("-----------------------------------------------\n");
printk("pwm-backlight-probe in\n");
printk("-----------------------------------------------\n");
然后我们只需把该驱动编译进内核,按道理应该在内核启动打印信息中应该有
printk("-----------------------------------------------\n");
printk("pwm-backlight-probe in\n");
printk("-----------------------------------------------\n");
实际:内核打印信息并没有出现以上打印信息,一直没进入到pwm-bl.c中pwm-backlight驱动的probe探测函数中去,即设备没有与该驱动匹配上
调试为何没进入pwm-bl.c的pwm-backlight驱动的probe探测函数中
思维定式:只要设备树上的属性compatible = "pwm-backlight";与驱动中的of_match_table的属性compatible = "pwm-backlight";匹配就应该能进入该驱动的探测函数中去,
然后就以为设备树写错了(多了空格,字母之类的),然后重新拷贝一遍,结果调试还是不行
然后就换一种方式,把这个驱动编译成动态库加载,即配置make menuconfig时选择M,编译成模块,具体如下:
make menuconfig:
Device Drivers --->
Graphics support --->
[*] Backlight & LCD device support --->
<M> Generic PWM based Backlight Driver
然后make modules这样就编译成模块,模块在drivers/video/backlight/pwm-bl.ko
然后再次基础上编译内核make zImage
重新烧写内核,启动板子,加载pwm-bl.ko模块,发现如下错误:
Error: Driver 'pwm-backlight' is already registered, aborting...
insmod: ERROR: could not insert module pwm_bl.ko: Device or resource busy
从这可以发现,内核中已经有了该pwm-backlight驱动,所以动态加载不上这个pwm-bl.ko
分析为什么内核中已经有了pwm-backlight驱动了呢?
这里又思维定式了:因为重新烧写了内核(即pwm-backlight驱动没有编译进内核),所以应该不会出现此类错误
最终找组长给我重新操作一遍,原来是板子上跑的内核不是新编译生成的内核
我是把新生成的内核zImage拷贝到/dev/mmcblk1p1中,而板子跑的是zImage-myimx6内核镜像文件,所以一直不会跑新编译生成的内核文件zImage,由于之前的内核镜像文件zImage-myimx6已经编译好了pwm-backlight驱动,所以我们再加载pwm-bl.ko会出现
Error: Driver 'pwm-backlight' is already registered, aborting...
insmod: ERROR: could not insert module pwm_bl.ko: Device or resource busy
这是血的教训啊,不一定板子跑的就是zImage文件名的内核镜像,实际这个板子上跑的是zImage-myimx6文件名的内核镜像。这让我折腾了一天,泪奔。。。
有两种方法来避免这种情况
1.看内核启动信息
Starting kernel ...
Booting Linux on physical CPU 0x0
Linux version 3.14.52 (edward@edward) (gcc version 4.9.1 (GCC) ) #3 SMP PREEMPT Fri May 12 11:00:14 CST 2017
这里的时间看是不是与你编译内核的时间相同
2.通过uname -a命令来显示系统信息(包括内核编译时间)
uname -a
Linux myzr 3.14.52 #3 SMP PREEMPT Fri May 12 11:00:14 CST 2017 armv7l GNU/Linux
看这里的时间是不是与你编译内核时间相同
如果不同则表示板子跑的内核不是你新编译的内核
那又怎么知道板子跑的内核文件名叫什么呢?
通过uboot的bootcmd来分析它具体加载的内核镜像文件名叫什么
LCD屏背光驱动调试心得---血的教训的更多相关文章
- imx6背光驱动调试
1.内核配置pwm背光驱动make menuconfig:Device Driver ---> Graphics support ---> [*] Backlight & LCD ...
- MIPI接口LCD屏调试心得(转)
源: MIPI接口LCD屏调试心得
- 高通LCD驱动调试
本文转载自:http://www.itgo.me/a/x6305658852004979994/lcd%20qcom 来自 :http://blog.csdn.net/dacaozuo/article ...
- android系统平台显示驱动开发简要:LCD驱动调试篇『四』
平台信息: 内核:linux3.4.39系统:android4.4 平台:S5P4418(cortex a9) 作者:瘋耔(欢迎转载,请注明作者) 欢迎指正错误,共同学习.共同进步!! 关注博主新浪博 ...
- 【转】Android LCD(四):LCD驱动调试篇
关键词:android LCD TFTSN75LVDS83B TTL-LVDS LCD电压背光电压 平台信息:内核:linux2.6/linux3.0系统:android/android4.0 平台 ...
- 高通LCD的pwm背光驱动
发生异常的现象: msm8953 lcd在快速亮灭的情况下背光概率性休眠不灭:测量高通pwm,发现正常的时候pwm的管脚LCM_BL_PWM为低电平,失败的时候为高电平: 根据原理图: mpp是什么? ...
- 痞子衡嵌入式:记录i.MXRT1060驱动LCD屏显示横向渐变色有亮点问题解决全过程(提问篇)
大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家分享的是i.MXRT1060上LCD横向渐变色显示出亮点问题的分析解决经验. 痞子衡前段时间在支持一个i.MXRT1060客户项目时遇到了LCD ...
- 基于GPL329xx linux平台电容屏gsl1680的驱动调试分析
因客户有用到了gsl1680 7寸电容屏,所以拿了一块过来,便在329xx的平台上面开始调试了. 大概浏览了一下所提供的资料,只有介绍模组的资料跟一份中文版的datasheet,datasheet只是 ...
- android 电容屏(二):驱动调试之基本概念篇
平台信息: 内核:linux3.4.39系统:android4.4 平台:S5P4418(cortex a9) 作者:瘋耔(欢迎转载,请注明作者) 欢迎指正错误,共同学习.共同进步!! 关注博主新浪博 ...
随机推荐
- ELK集群
kafka集群-------------------1. 下载wget http://mirror.rise.ph/apache/kafka/0.11.0.0/kafka_2.12-0.11.0.0. ...
- 替换Ubuntu默认的登录背景
Ubuntu默认的登录背景看起来还是比较高贵的,但是作为一个爱折腾的人,当然要换成自己喜欢的背景图了.一开始跟着百度走,进了不少坑,最后还是自己走出来的.先上一个成品照 百度得到的答案几乎都是安装ub ...
- 三. Java类与对象8.再谈Java包
在Java中,为了组织代码的方便,可以将功能相似的类放到一个文件夹内,这个文件夹,就叫做包. 包不但可以包含类,还可以包含接口和其他的包. 目录以"\"来表示层级关系,例如 E:\ ...
- Ubuntu 16.04通过网络配置工具NetworkManager设置IP、网关、DNS和查看IP、网关、DNS
说明: 1.NetworkManager工具是Ubuntu桌面版的GUI设置工具. 2.这个工具推荐直接在GUI上操作,不建议用命令行进行管理,比如Wifi这些配置等. 3.当然,这个工具能带有命令行 ...
- CM3大礼包
- Navicat 破解版的安装
因为电脑系统换掉,重装系统,重新配置了一下环境,安装Navicat,现记录一下过程,以便下次查询使用. 我们首先百度搜索一款navicat for mysql然后进行下载. 2 当我们下载完成之后首先 ...
- SuperMap iClient如何使用WMTS地图服务(转)
http://blog.sina.com.cn/s/blog_6259ebd50102v221.html 什么是WMTS服务 WMTS,切片地图Web服务(Web Map Tile Service)当 ...
- ES6里关于模板字面量的拓展
JS 的字符串相对其他语言来说功能总是有限的,事实上,ES5中一直缺乏许多特性,如多行字符串.字符串格式化.HTML转义等.ES6通过模板字面量的方式进行了填补,模板字面量试着跳出JS已有的字符串体系 ...
- HDOJ 3359 Kind of a Blur
用高斯消元对高斯模糊的图像还原.... Kind of a Blur Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/327 ...
- JRebel 7.0.10 for intellij IDEA 2017.1
1什么是JRebel? JRebel是一套JavaEE开发工具.JRebel是一款JAVA虚拟机插件,它使得JAVA程序员能在不进行重部署的情况下,即时看到代码的改变对一个应用程序带来的影响.JReb ...