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屏…的更多相关文章
- uboot启动完成,kernel启动时lcd屏幕出现杂色解决办法
先说说开发环境吧: 1 内核:linux2.6.xx 2 uboot:买开发板带的 注释:在最后我又添加了问题得到完美解决的办法. 问题:uboot启动完成,kernel启动时lcd屏幕出现杂色(比如 ...
- linux的几个内核镜像格式Image 和 u-boot启动内核和文件系统时的一些环境变量的设置
关于编译powerpc linux的几个Image参考原文 http://blog.sina.com.cn/s/blog_86a30b0c0100wfzt.html 转载▼ PowerPC架构 L ...
- Android 启动APP时黑屏白屏的三个解决方案
你会很奇怪,为什么有些app启动时,会出现一会儿的黑屏或者白屏才进入Activity的界面显示,但是有些app却不会如QQ手机端,的确这里要做处理一下.这里先了解一下为什么会出现这样的现象,其实很简单 ...
- Android 启动APP时黑屏白屏的三个解决方案(转载)
你会很奇怪,为什么有些app启动时,会出现一会儿的黑屏或者白屏才进入Activity的界面显示,但是有些app却不会如QQ手机端,的确这里要做处理一下.这里先了解一下为什么会出现这样的现象,其实很简单 ...
- SPA应用部署时首屏启动慢问题解决方案
SPA应用部署时首屏启动慢问题解决方案 使用vuejs开发的单页应用,打包部署上线后,发现首屏启动时间达到了惊人的10s左右,于是开始优化,目前使用到的总结如下: 巧用webpack插件 1.抽取cs ...
- 在windows10中启动VmWare时,只要一启动虚拟机,电脑就会蓝屏死机(终止代码:SYSTEM_SERVICE_EXCEPTION)
在windows10中启动VmWare时,只要一启动虚拟机,电脑就会蓝屏死机(终止代码:SYSTEM_SERVICE_EXCEPTION) 没错就是这个,绿色的死亡按钮 原因: 第一种:windows ...
- Kernel启动时 驱动是如何加载的module_init,加载的次序如何;略见本文
Init.h中有相关initcall的启动次序,在system.map中可看出具体的__initcall指针的前后次序 #define pure_initcall(fn) __define_initc ...
- Samsung_tiny4412(驱动笔记01)----linux 3.5,U-Boot,Busybox,SD卡启动环境搭建
/*********************************************************************************** * * linux 3.5,U ...
- uboot启动阶段修改启动参数方法及分析
作者:围补 本来启动方式这节不是什么复杂的事儿,不过想简单的说清楚明白,还真是不知道怎么组织.毕竟文字跟有声语言表达有别.但愿简单的东西别让我讲的太复杂! Arm板系统文件一般有三个——bootloa ...
随机推荐
- New Concept English three (35)
27 55 The word justice is usually associated with courts of law. We might say that justice has been ...
- js常用算法
1.判断一个字符串是“回文”类型,回文:形如‘abcba’.‘mamam’这种第一个与最后一个字符相同,第二个和倒数第二个字符相同...一次类推,该怎么实现呢? 对与我来说,首先看到第一眼,还真没想起 ...
- php调用API支付接口(转自刘68)
首先访问 https://charging.teegon.com/ 注册账号, 找到开发配置 记下client_id和client_secret. 点击 天工开放平台 点击天工收银 点击 S ...
- windows10 配置apache+php+mysql
apache配置就是个坑!!! 参考win10环境下配置win10Apache+PHP+MySQL环境的方法 注意:把所有"C:/apache2/..."都变为自己的apache目 ...
- Windows/Linux双系统时间错乱问题
问题描述 安装双系统后,切换系统的时候(Windows)系统时间会错乱 解决方式 百度经验Win/Lin 双系统时间错误的调整 注意1:最后两步更改硬件UTC时间 注意2:适用Windows系统为Wi ...
- rhel7+apache+c cgi+动态域名实现web访问
1. 申请动态域名/安装no-ip客户端 https://blog.csdn.net/lee244868149/article/details/44095835 2. yum安装httpd 两种方法安 ...
- bzoj 2131 免费的馅饼
Written with StackEdit. Description Input 第一行是用空格隔开的二个正整数,分别给出了舞台的宽度\(W\)(\(1\)到\(10^8\)之间)和馅饼的个数\(n ...
- 关于quartus工程添加文件的说明
quartus工程中要添加bsf文件的话需要将源文件也一同添加进来,添加ip核需要添加qip文件,时序约束文件只有添加到工程中才有效果,而timequest分析时需要制定约束文件.
- LG3391 【模板】文艺平衡树(Splay)
题意 您需要写一种数据结构(可参考题目标题),来维护一个有序数列,其中需要提供以下操作:翻转一个区间,例如原有序序列是5 4 3 2 1,翻转区间是[2,4]的话,结果是5 2 3 4 1 \(n,m ...
- IBM Cognos 10.2 最新体验之旅
IBM Cognos Data Manager 数据集市的构建利器 本文详细的介绍了 Cognos 最新版本 10.2 的数据集市构建器 Data Manager 的使用,对于希望系统了解 Cogno ...