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 ([email protected]) (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来分析它具体加载的内核镜像文件名叫什么

时间: 2024-10-08 19:35:53

LCD屏背光驱动调试心得---血的教训的相关文章

imx6背光驱动调试

1.内核配置pwm背光驱动make menuconfig:Device Driver ---> Graphics support ---> [*] Backlight & LCD device support ---> <*> Lowlevel Backlight controls <*> Generic PWM based Backlight Driver 2.背光sys文件节点/sys/class/backlight/的由来在drivers/video

i.mx6 lvds接口的DE模式液晶屏驱动调试

我这篇文章主要讲述i.mx6 平台下 采用DE模式的lvds液晶屏的驱动调试, 阅读该文章之前请先阅读如下两篇我转载的文章,这两篇文章是理解我这篇文章的基础知识. 1.        lcd fb参数如何计算: http://blog.csdn.net/liuhuahan/article/details/43447657 2.        camera_lcd之DE和HV模式区别 http://blog.csdn.net/liuhuahan/article/details/43489269 详

LCD背光驱动(字符设备)在FL2440的开发(2.6.33.7内核)

一.开发环境 主   机:fedora 14 (2.6.33.7)    开发板:FL2440(nandflash:K9F1G08 128m)    编译器:arm-linux-gcc 4.3.2 二.原理分析 硬件原理图分析.由原理图得知LCD的背光是由2440的GPG4口控制的,只要往GPG4口写入高电平,(1)则背光打开,写入低电平(0)则背光关闭. 三.实现步骤     1. 编写背光驱动.文件名为fl2440_backlight.c /* *======================

高通LCD的pwm背光驱动

发生异常的现象: msm8953 lcd在快速亮灭的情况下背光概率性休眠不灭:测量高通pwm,发现正常的时候pwm的管脚LCM_BL_PWM为低电平,失败的时候为高电平: 根据原理图: mpp是什么? mpp是基于电源pmic的管脚,也叫做多功能管脚:MPP的全称是Multi Purpose Pin:可以做电源.gpio.ADC.PWM.SINK等功能. 背光的控制方式: LCD控制IC支持动态背光控制功能(CABC)通过解析图像的直方图动态改变输出PWM的占空比从而动态调节LCD的背光,在不改

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

关键词:android  电容屏 tp 工作队列 中断 多点触摸协议平台信息:内核:linux2.6/linux3.0系统:android/android4.0 平台:S5PV310(samsung exynos 4210)  作者:xubin341719(欢迎转载,请注明作者) 参考网站:http://edsionte.com/techblog/archives/1582这部分参考别人的多一点 android 电容屏(一):电容屏基本原理篇 android 电容屏(二):驱动调试之基本概念篇

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

因客户有用到了gsl1680 7寸电容屏,所以拿了一块过来,便在329xx的平台上面开始调试了. 大概浏览了一下所提供的资料,只有介绍模组的资料跟一份中文版的datasheet,datasheet只是说了个大概,没有提到读取触摸坐标的寄存器.不过还好有给一份在其他处理器平台的驱动,所以读取坐标的部分代码移植过来就可以了. gsl1680接口跟其他的电容屏一样,也是i2c接口的,貌似市面上的电容屏都是i2c接口,电容屏自带了微控制器MCU,用与处理采样,坐标转换等,还有一些抖动算法处理,完后将坐标

stm32点亮st7735s的0.96寸lcd屏(调试中)

今天在调试这个0.96寸的lcd屏怎么也点不亮,用了卖家提供的程序只能在c8t中使用 把代码移植到f103vet6的工程居然就点不亮了???迷惑 想了一下这块和之前的1.44用的同一个ic,索性就用以前1.44寸LCD程序试试居然点亮了,这里记录一下后续继续修改 原文地址:https://www.cnblogs.com/hjf-log/p/12570258.html

展讯7731平台驱动调试总结-驱动配置部分

转载至:http://blog.csdn.net/bmw7bmw7/article/details/46126223 展讯7731平台驱动调试总结-驱动配置部分 1. 关键配置文件路径 1). 项目板级配置:idh.code/device/sprd/scx35_sp7731geaplus_pad_qhd/文件夹内各文件 ⑴.BoardConfig.mk---板级宏配置文件.包括设置该板(项目)所使用的uboot/kerenl全局配置宏文件,摄像头接口类型.分辨率等参数,所使用的重力加速度.光线传

展讯7731平台驱动调试总结(2)---- 驱动配置部分

1. 关键配置文件路径 1). 项目板级配置:idh.code/device/sprd/scx35_sp7731geaplus_pad_qhd/文件夹内各文件 ⑴.BoardConfig.mk---板级宏配置文件.包括设置该板(项目)所使用的uboot/kerenl全局配置宏文件,摄像头接口类型.分辨率等参数,所使用的重力加速度.光线传感器,内部存储空间大小分配等. ⑵. init.board.rc---板级自定义启动服务文件(TP,传感器等设备的启动指令放置在此文件中) ⑶.system.pr