uboot启动完成,kernel启动时lcd屏幕出现杂色解决办法
先说说开发环境吧:
1 内核:linux2.6.xx
2 uboot:买开发板带的
注释:在最后我又添加了问题得到完美解决的办法。
问题:uboot启动完成,kernel启动时lcd屏幕出现杂色(比如:下半屏出现红色等
)
分析原因:造成这个问题的原因可能是因为uboot启动完成,lcd显示缓冲区内有其
他数据,而这时kernel启动还未完成lcd相关初始化,还未向缓冲器写数据造成的
。
解决办法:在uboot完成启动内核的结尾,关闭lcd(也就是把背光关了),再在内
核启动时lcd初始化中把lcd背光给打开。
有两种方法可以实现方法:
1 就是最直接的办法:在uboot关lcd背光,在kernel中打开lcd背光
2 在uboot中关闭lcd控制器的输出功能,在kernel中打开lcd控制器输出功能
分析两种方法:最有用的还是1方法,直接见效。
方法2 不能从根本上解决问题
解决中的难点:就是如何操作kernel中的相关寄存器,这是难点,因为内核中开启
了MMU功能,不能使用绝对物理地址。而uboot中可以使用绝对物理地址,没有开启
MMU
具体修改代码:
1 uboot修改地方:/cpu/s3c24xx/cpu.c在函数cleanup_before_linux中最后添加
#define GPBCONEX (*(unsigned long *) 0x56000010)
#define GPBDATEX (*(unsigned long *) 0x56000014)
//turn off lcd
//sfx add
GPBCONEX &= ~0x03;
GPBCONEX |= 0x01;
GPBDATEX &= ~0x01;
如果想把lcd控制器的输出也关了可以如下实现
#define WINCON0 (* ((unsigned long *)(0x4c800014)))
#define WINCON1 (* ((unsigned long *)(0x4c800018)))
#define VIDCON0 (* ((unsigned long *)(0x4c800000)))
#define VIDCON1 (* ((unsigned long *)(0x4c800004)))
WINCON0 &= ~0x01;
WINCON1 &= ~0x01;
VIDCON0 &= ~0x03;
2 kernel修改地方:/drivers/video/s3cfb.c在函数s3c-fb_probe中添加
//**************turn on lcd backlight*****************
printk("***********************setting lcd turn
on**************************");
int dat=0;
dat=ioread32(S3C2410_GPBCON);
iowrite32((dat&(~0x03)|0x01),S3C2410_GPBCON);
dat=ioread32(S3C2410_GPBDAT);
iowrite32(dat|0x01,S3C2410_GPBDAT);
如果uboot中把lcd控制器的输出关闭了,这里这样打开就行了
//********************turn on lcd output********************
iowrite32(S3C_VIDCON0_ENVID_ENABLE,S3C_VIDCON0);
iowrite32(S3C_WINCONx_ENWIN_F_ENABLE,S3C_WINCON0);
iowrite32(S3C_WINCONx_ENWIN_F_ENABLE,S3C_WINCON1);
学习心得:linux kernel中如何控制寄存器,用的是操作函数iowrite32
(val,register)、ioread32(register)来实现
相应寄存器的封装定义在include/asm/arch/regs-lcd.h
include/asm/arch/regs-gpio.h
终于找到问题的根本原因了,特在此进行一次修正,上面的方法也是可行的(经过验证的),不过为了追求完美可以用一下方法:
前段时间移植在找uboot的原因,分析了uboot中lcd相关代码;今天想了想可不可以修改kernel来实现,于是乎就看了内核的lcd driver代码,当分析道lcd帧缓冲区建立且初始化时问题出现了,就是这里,我发现他们把这个缓冲区内存初始化为0xf0,很是奇怪,为什么不是0x00呢,于是把这试一试的心里,突然发现成功了,特在此和大家分享。由于内核中相关驱动代码的不同,仅提供参考,但遇到这类问题时可以首先考虑到缓冲区的初始化就对了。
我的代码修改过程:/drivers/video/s3c_150inch.c
在 int __init s3c_fb_map_video_memory(struct s3c_fb_info *fbi)函数中找到
memset(fbi->map_cpu_f1, 0xf0, fbi->map_size_f1);
memset(fbi->map_cpu_f2, 0xf0, fbi->map_size_f2);
修改成:
memset(fbi->map_cpu_f1, 0x00, fbi->map_size_f1);
memset(fbi->map_cpu_f2, 0x00, fbi->map_size_f2);
ok!!!问题完美解决。。。。。。。。。。。。。。
uboot启动完成,kernel启动时lcd屏幕出现杂色解决办法的更多相关文章
- 运行OpenGL红宝书第9版源码时Visual Studio提示“无法启动程序...ALL_BUILD。拒绝访问“的问题的解决办法
问题描述: OpenGL红宝书第9版源码采用CMake编译后,用相应的Visual Studio(如VS2012)打开“vermilion9.sln”解决方案,并运行时Visual Studio提示“ ...
- 爬虫爬数据时,post数据乱码解决办法
最近在写一个爬虫,目标网站是:http://zx.bjmemc.com.cn/,可能是为了防止被爬取数据,它给自身数据加了密.用谷歌自带的抓包工具也不能捕获到数据.于是下了Fiddler. F ...
- Bootstrap中关闭第二个模态框时出现的问题和解决办法
Bootstrap中关闭第二个模态框时出现的问题和解决办法 1.关闭第二个模态框时,第一个模态框跟着消失. 解决办法: 第二个模态框的代码不要写在第一个模态框里面,确保两个模态框相对独立; 2.关闭第 ...
- oracle执行update语句时卡住问题分析及解决办法
转载:http://www.jb51.net/article/125754.htm 这篇文章主要介绍了oracle执行update语句时卡住问题分析及解决办法,涉及记录锁等相关知识,具有一定参考价值, ...
- 返回xml过长时被nginx截断的解决办法
返回xml过长时被nginx截断的解决办法 问题描述:通过网页获取数据,数据格式为xml.当xml比较短时,可以正常获取数据.但是xml长度过长时不能正常获取数据,通过观察返回数据的源代码,发现xml ...
- IDEA使用maven构建时控制台中文乱码的解决办法
使用maven clean install 项目时控制台中文乱码,解决办法如下: Setting->maven->runner VMoptions: -Dfile.encoding=UTF ...
- mongodb 更新数据时int32变为double的解决办法 & 教程
https://www.runoob.com/mongodb/mongodb-mongodump-mongorestore.html mongodb 更新数据时int32变为double的解决办法 ...
- java下载文件时文件名出现乱码的解决办法
转: java下载文件时文件名出现乱码的解决办法 2018年01月12日 15:43:32 橙子橙 阅读数:6249 java下载文件时文件名出现乱码的解决办法: String userAgent ...
- 全网最详细的zkfc启动以后,几秒钟以后自动关闭问题的解决办法(图文详解)
不多说,直接上干货! 问题详情 情况描述如题所示,zkfc启动以后,几秒钟以后自动关闭. 解决办法: 1.检查下每台机器的时间是否同步: 2.检查下每台机器的防火墙是否关闭: 3.查看zkfc的日志路 ...
随机推荐
- Java BIO及实现
发现日常学习过的知识不久就会遗忘,在此只是整理并记录一下学习笔记,做个回忆,并方便以后查阅,若有错误,欢迎指正 网络模型:TCP/IP网络模型是从OSI七层模型中演化来的,osi模型分为物理层,数据链 ...
- django数据库迁移时候异常
django数据库迁移时候异常 一.错误信息 Django在根据models生成数据库表时报 init() missing 1 required positional argument: 'on_de ...
- Python_三元运算与lambda表达式
[是什么] 三元运算是if...else...的简化版,lambda表达式是函数的简化版 三元运算(三目运算) # 判断两个数中的较大者 fun(a1,a2): return a1 if a1> ...
- [BZOJ1965][AHOI2005] 洗牌 - 扩展欧几里得
题目描述 为了表彰小联为Samuel星球的探险所做出的贡献,小联被邀请参加Samuel星球近距离载人探险活动. 由于Samuel星球相当遥远,科学家们要在飞船中度过相当长的一段时间,小联提议用扑克牌打 ...
- [BZOJ1833][ZJOI2010]数字计数
Description 给定两个正整数a和b,求在[a,b]中的所有整数中,每个数码(digit)各出现了多少次. Input 输入文件中仅包含一行两个整数a.b,含义如上所述. Output 输出文 ...
- opencv::模板匹配(Template Match)
模板匹配介绍 模板匹配就是在整个图像区域发现与给定子图像匹配的小块区域. 所以模板匹配首先需要一个模板图像T(给定的子图像) 另外需要一个待检测的图像-源图像S 工作方法,在带检测图像上,从左到右,从 ...
- 《Java并发编程实战》读书笔记-第4章 对象的组合
设计线程安全的类 三个基本要素: 找出构成对象状态的所有变量 找出约束状态变量的不变性条件 建立对象状态的并发访问管理策略 实例封闭 将数据封装在对象内部,可以将数据的访问限制在对象的方法上,从而更容 ...
- 03 Node.js学习笔记之根据http请求路径返回不同数据
在Nodejs中,当客户端请求的路径不同时,NodeJS处理返回不同的数据 步骤: //1.载入http模块 var http=require('http'); //2.创建一个http服务 var ...
- 聊聊缓存淘汰算法-LRU 实现原理
前言 我们常用缓存提升数据查询速度,由于缓存容量有限,当缓存容量到达上限,就需要删除部分数据挪出空间,这样新数据才可以添加进来.缓存数据不能随机删除,一般情况下我们需要根据某种算法删除缓存数据.常用淘 ...
- 网络攻防实验任务三_(2)X-Scan通用漏洞扫描实验
首先在宿主机中打开xscan_gui.exe,结果系统直接将它删掉了. 大概是因为开了防火墙的缘故. 于是我在win7虚拟机中运行这个程序. 并且关闭防火墙,在win7中可以运行 我再试了一下win1 ...