您尚未登录。

楼主 #1 2020-03-03 00:52:22

wupaul2001
会员
注册时间: 2019-09-30
已发帖子: 259
积分: 237

关于nano pi从u-boot启动到kernal出现1秒的花屏问题的分析及解决方法

由于f1c系列的性价比,所以我选用了f1c做产品,但所有程序和硬件都做好时,突然想起了从u-boot启动到kernal出现1秒的花屏这个问题,这问题客户是百分百不能接受的,于是花了两天时间去解决这问题。

1。从u-boot的源代码 /drivers/video/sunix/sunix_display.c里找到sunxi_simplefb_setup这个函数,再往里面看找到
    start = gd->bd->bi_dram[0].start;
    size = gd->bd->bi_dram[0].size - sunxi_display.fb_size;
这两行代码説明,framebuffer的内存是放到总内存大小的最后,gd->bd->bi_dram[0].start,gd->bd->bi_dram[0].size这两个是Uboot从硬件里获取到的内存起始地址及大小。

于是在网上找资料,找了很多资料都説fb放到最后就不会被kernal覆盖掉。但奇怪了,fb已经在最后了为啥还是花屏。

2。直接今天看到/drivers/video/sunix/sunix_display.c, 里有这么一段话
    /*
     * Do not report the framebuffer as free RAM to the OS, note we cannot
     * use fdt_add_mem_rsv() here, because then it is still seen as RAM,
     * and e.g. Linux refuses to iomap RAM on ARM, see:
     * linux/arch/arm/mm/ioremap.c around line 301.
     */
于是在网上再找资料,无意中看到一篇文章説用cat /proc/iomem查看kernal中占用的RAM空间,运行后,注意到80000000-83FFFFFF : System RAM
靠,这不是把fb干掉了,难怪花屏,然后按着文章试用在uboot的启动参数里加入memmap=1m$0x83EFFFFF,结果还是不行,试了好几个memmap方式都不行, 最后想了一吓反正kernal都是从0x80000000开始,我是否可以用mem=63M的参数限制kernal的RAM空间呢。抱着一丝的希望。结果成功了,启动不花屏了。

3。最后提醒大家,fb这个空间不一定是1M的,空间最小大小是按屏幕分辩率的,例如我的480x272的屏为例最小大小为480x272x4=510K,为了方便,我直接保留1M,还有,我的CPU是F1C200s,所以我的是mem=63M, 如果是100s那就应该是31M了。

本人写作水平有限,敬请见谅

最近编辑记录 wupaul2001 (2020-03-03 00:53:46)

离线

楼主 #7 2020-03-03 10:17:19

wupaul2001
会员
注册时间: 2019-09-30
已发帖子: 259
积分: 237

Re: 关于nano pi从u-boot启动到kernal出现1秒的花屏问题的分析及解决方法

gunge204 说:

终于有人对这个问题动手了,这也是困扰了我很久的问题。感谢分享
不过内核的东西我了解很少,请问这里的“mem=63M“,是在uboot里设置的传递给kernel的参数的吗?就是修改uboot中的bootargs,加上这么一句?

对的

离线

楼主 #9 2020-03-03 11:36:43

wupaul2001
会员
注册时间: 2019-09-30
已发帖子: 259
积分: 237

Re: 关于nano pi从u-boot启动到kernal出现1秒的花屏问题的分析及解决方法

达克罗德 说:

谢谢楼主分享,我f1c也有同样问题。不过我在玩a33主线Linux的时候,没有这个问题,我也没有去设置kernel的mem大小,为什么就没问题呢?按照一楼的思路,只要不保留高位地址就应该会出问题

不一定在启动参数,可以在设备树中保留, 可以修改ioremap保留,方法各式各样

离线

楼主 #11 2020-03-03 13:33:30

wupaul2001
会员
注册时间: 2019-09-30
已发帖子: 259
积分: 237

Re: 关于nano pi从u-boot启动到kernal出现1秒的花屏问题的分析及解决方法

达克罗德 说:

有可能,我查一下。

另外,在uboot中需要保留这个1MB吗?我看有人说需要设置CONFIG_SYS_MEM_TOP_HIDE

Continuity with Linux Boot Logo
If you want Linux to keep your U-Boot Logo during boot process, then some tweaks are needed:
define CONFIG_SYS_MEM_TOP_HIDE in U-Boot configuration file, here we reserve 2MBytes:
#define CONFIG_SYS_MEM_TOP_HIDE         (2 << 20)

Uboot本来就用这1M作为fb

离线

页脚

工信部备案:粤ICP备20025096号 Powered by FluxBB

感谢为中文互联网持续输出优质内容的各位老铁们。 QQ: 516333132, 微信(wechat): whycan_cn (哇酷网/挖坑网/填坑网) service@whycan.cn