先说说开发环境吧:

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屏…的更多相关文章

  1. uboot启动完成,kernel启动时lcd屏幕出现杂色解决办法

    先说说开发环境吧: 1 内核:linux2.6.xx 2 uboot:买开发板带的 注释:在最后我又添加了问题得到完美解决的办法. 问题:uboot启动完成,kernel启动时lcd屏幕出现杂色(比如 ...

  2. linux的几个内核镜像格式Image 和 u-boot启动内核和文件系统时的一些环境变量的设置

    关于编译powerpc linux的几个Image参考原文 http://blog.sina.com.cn/s/blog_86a30b0c0100wfzt.html 转载▼   PowerPC架构 L ...

  3. Android 启动APP时黑屏白屏的三个解决方案

    你会很奇怪,为什么有些app启动时,会出现一会儿的黑屏或者白屏才进入Activity的界面显示,但是有些app却不会如QQ手机端,的确这里要做处理一下.这里先了解一下为什么会出现这样的现象,其实很简单 ...

  4. Android 启动APP时黑屏白屏的三个解决方案(转载)

    你会很奇怪,为什么有些app启动时,会出现一会儿的黑屏或者白屏才进入Activity的界面显示,但是有些app却不会如QQ手机端,的确这里要做处理一下.这里先了解一下为什么会出现这样的现象,其实很简单 ...

  5. SPA应用部署时首屏启动慢问题解决方案

    SPA应用部署时首屏启动慢问题解决方案 使用vuejs开发的单页应用,打包部署上线后,发现首屏启动时间达到了惊人的10s左右,于是开始优化,目前使用到的总结如下: 巧用webpack插件 1.抽取cs ...

  6. 在windows10中启动VmWare时,只要一启动虚拟机,电脑就会蓝屏死机(终止代码:SYSTEM_SERVICE_EXCEPTION)

    在windows10中启动VmWare时,只要一启动虚拟机,电脑就会蓝屏死机(终止代码:SYSTEM_SERVICE_EXCEPTION) 没错就是这个,绿色的死亡按钮 原因: 第一种:windows ...

  7. Kernel启动时 驱动是如何加载的module_init,加载的次序如何;略见本文

    Init.h中有相关initcall的启动次序,在system.map中可看出具体的__initcall指针的前后次序 #define pure_initcall(fn) __define_initc ...

  8. Samsung_tiny4412(驱动笔记01)----linux 3.5,U-Boot,Busybox,SD卡启动环境搭建

    /*********************************************************************************** * * linux 3.5,U ...

  9. uboot启动阶段修改启动参数方法及分析

    作者:围补 本来启动方式这节不是什么复杂的事儿,不过想简单的说清楚明白,还真是不知道怎么组织.毕竟文字跟有声语言表达有别.但愿简单的东西别让我讲的太复杂! Arm板系统文件一般有三个——bootloa ...

随机推荐

  1. Java基础学习-抽象类

    package abstractclass; /* * 抽象类的概述: * 1.抽象类用abstract来修饰方法或者类 * 2.没有具体的方法体的方法便是抽象方法. */ class CF{ pub ...

  2. Django 之Ajax

    必备知识:json 什么是json 定义 JSON(JavaScript Object Notation, JS 对象标记) 是一种轻量级的数据交换格式. 它基于 ECMAScript (w3c制定的 ...

  3. HDU2032 杨辉三角

    解题思路:不要小看这题水题,如果数据类型没有用long long, 当n开为35时,会出现TLE,而且会报非法内存访问,现在还 不理解为什么,若有高手,请不吝赐教. 上代码: #include< ...

  4. 剑指Offer面试题:6.旋转数组中的最小数字

    一 题目:旋转数组中的最小数字 题目:把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转.输入一个递增排序的数组的一个旋转,输出旋转数组的最小元素.例如数组{3,4,5,1,2}为{1, ...

  5. struts1和struts2原理解析

    1.struts1和struts2 是2个完全不同的框架 其实struts2核心就是 webwork框架 struts1以ActionServlet作为核心控制器,由ActionServlet负责拦截 ...

  6. predis的使用

    predis是PHP连接Redis的操作库,由于它完全使用php编写,大量使用命名空间以及闭包等功能,只支持php5.3以上版本,故实测性能一般,每秒25000次读写. 将session数据存放到re ...

  7. egg 使用手记(一)

    1. 文件加载规则 引用官方的说法: 框架在加载文件时会进行转换,因为文件命名风格和 API 风格存在差异.我们推荐文件使用下划线,而 API 使用驼峰.比如 app/service/user_inf ...

  8. 开发沉思录 - 记大数据平台的一次 BUG井喷

    研究REST提交重启:终于提交成功了,首先一个错误:地址IP地址的http://hdp0:8080/api/v1/clusters/HDP/requests ,被我错误写成了request,当误了大量 ...

  9. vs2003属性窗口空白的问题

    一个困扰很久的问题一直没有解决,因为vs的属性窗口没显示不方便修改mfc程序的id和属性等等,但是可以直接在代码里修改.问题始终是问题,最近准备画时间解决之,上网差资料搜索办法,一帖说是win7的问题 ...

  10. jetty中war包解压路径

    这是个很奇怪的问题,如果下载好了jetty直接放入war包运行,项目会被解压到C盘的临时文件夹中.但是如果你在${JETTY_HOME}文件夹,也就是jetty解压后的根目录中新建,注意是新建一个wo ...