开发板:明远智睿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屏背光驱动调试心得---血的教训的更多相关文章

  1. imx6背光驱动调试

    1.内核配置pwm背光驱动make menuconfig:Device Driver ---> Graphics support ---> [*] Backlight & LCD ...

  2. MIPI接口LCD屏调试心得(转)

    源: MIPI接口LCD屏调试心得

  3. 高通LCD驱动调试

    本文转载自:http://www.itgo.me/a/x6305658852004979994/lcd%20qcom 来自 :http://blog.csdn.net/dacaozuo/article ...

  4. android系统平台显示驱动开发简要:LCD驱动调试篇『四』

    平台信息: 内核:linux3.4.39系统:android4.4 平台:S5P4418(cortex a9) 作者:瘋耔(欢迎转载,请注明作者) 欢迎指正错误,共同学习.共同进步!! 关注博主新浪博 ...

  5. 【转】Android LCD(四):LCD驱动调试篇

    关键词:android LCD TFTSN75LVDS83B  TTL-LVDS LCD电压背光电压 平台信息:内核:linux2.6/linux3.0系统:android/android4.0 平台 ...

  6. 高通LCD的pwm背光驱动

    发生异常的现象: msm8953 lcd在快速亮灭的情况下背光概率性休眠不灭:测量高通pwm,发现正常的时候pwm的管脚LCM_BL_PWM为低电平,失败的时候为高电平: 根据原理图: mpp是什么? ...

  7. 痞子衡嵌入式:记录i.MXRT1060驱动LCD屏显示横向渐变色有亮点问题解决全过程(提问篇)

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家分享的是i.MXRT1060上LCD横向渐变色显示出亮点问题的分析解决经验. 痞子衡前段时间在支持一个i.MXRT1060客户项目时遇到了LCD ...

  8. 基于GPL329xx linux平台电容屏gsl1680的驱动调试分析

    因客户有用到了gsl1680 7寸电容屏,所以拿了一块过来,便在329xx的平台上面开始调试了. 大概浏览了一下所提供的资料,只有介绍模组的资料跟一份中文版的datasheet,datasheet只是 ...

  9. android 电容屏(二):驱动调试之基本概念篇

    平台信息: 内核:linux3.4.39系统:android4.4 平台:S5P4418(cortex a9) 作者:瘋耔(欢迎转载,请注明作者) 欢迎指正错误,共同学习.共同进步!! 关注博主新浪博 ...

随机推荐

  1. mysql里的知识

    1.mysql基础 (1)mysql存储结构:数据库->表-> 数据   sql语句 (2)管理数据库: 增加: create database 数据库 default character ...

  2. AHOI 2009 中国象棋

    题面 题目描述 这次小可可想解决的难题和中国象棋有关,在一个N行M列的棋盘上,让你放若干个炮(可以是0个),使得没有一个炮可以攻击到另一个炮,请问有多少种放置方法.大家肯定很清楚,在中国象棋中炮的行走 ...

  3. IntelliJ IDEA控制台Console里没有查找快捷键

    问题描述:之前的项目一直用的 Eclipse,习惯了其快捷键的使用,现在的项目换到IntelliJ IDEA,为了尽快上手,就把快捷键Keymap修改为Eclipse方式.发现在控制台Console里 ...

  4. bin/...的访问被拒绝被拒绝的问题

    复制到bin.... 对路径bin/.... 的访问被拒绝出现这们的问题,把源码管理器中项目的Bin目录删除,重新获取就要以了

  5. 路由器漏洞复现分析第二弹:CNVD-2018-01084

    1月17日,CNVD公开了D-LinkDIR 615/645/815 service.cgi远程命令执行漏洞(CNVD-2018-01084),freebuf上有前辈写了一篇漏洞复现和poc的文章(h ...

  6. tensorflow cnn+rnn基本结构

    #CNN x = tf.placeholder(tf.float32,[None,input_node],name="x_input") y_ = tf.placeholder(t ...

  7. 机器学习算法实践:决策树 (Decision Tree)(转载)

    前言 最近打算系统学习下机器学习的基础算法,避免眼高手低,决定把常用的机器学习基础算法都实现一遍以便加深印象.本文为这系列博客的第一篇,关于决策树(Decision Tree)的算法实现,文中我将对决 ...

  8. ITIL,是否已是昨日黄花

    首先声明自己不是ITIL方面的专家,特别是具体的规范细节,后面论述如有不当,请指正.但我为什么会提起它?主要是因为它和运维(IT服务管理)相关性太大了.早起的运维完全就是以ITIL来蓝本构建的,在当时 ...

  9. 原来,多年以来,我一直是个curl/CRUD程序员

    curl,就是create,update,remove,list的首字母简写.说是CRUD似乎更流行些,不过无所谓,知道是一个意思就好. curl程序员,就是增改删查程序员,中文说增删改查更加顺口. ...

  10. 系统封装 如何修改别人的PE为己所用

    我们以修改"我心如水 WIN7PE_16.99.1 维护版.ISO"为例,整个ISO的核心文件就是这个BOOT.WIM,我们先把他提取出来. 然后用在本教程第一章学到的东西,用AI ...