您尚未登录。

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

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

关于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)

离线

#2 2020-03-03 08:43:27

gunge204
会员
注册时间: 2019-08-24
已发帖子: 26
积分: 26

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

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

离线

#3 2020-03-03 08:45:37

Jmhh247
会员
注册时间: 2018-12-21
已发帖子: 262
积分: 262

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

感谢分享

离线

#4 2020-03-03 08:55:49

歌以咏志
会员
注册时间: 2019-09-21
已发帖子: 219
积分: 210

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

及时雨, 感谢分享, 那个花屏我想了一个月都没想明白。

离线

#5 2020-03-03 09:02:07

sea18c
会员
注册时间: 2019-08-05
已发帖子: 230
积分: 222.5

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

感谢分享

离线

#6 2020-03-03 09:06:40

smartcar
会员
注册时间: 2018-02-19
已发帖子: 735
积分: 735

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

太棒了,等找到我的 tiny200 一定记得试一试

离线

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

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

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

gunge204 说:

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

对的

离线

#8 2020-03-03 11:17:29

达克罗德
会员
注册时间: 2018-04-10
已发帖子: 1,138
积分: 1090.5

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

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

离线

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

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

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

达克罗德 说:

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

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

离线

#10 2020-03-03 11:51:44

达克罗德
会员
注册时间: 2018-04-10
已发帖子: 1,138
积分: 1090.5

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

wupaul2001 说:

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

有可能,我查一下。

另外,在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)

离线

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

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

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

离线

#12 2020-04-21 19:28:56

jiangming1399
会员
注册时间: 2018-06-14
已发帖子: 113
积分: 113

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

linux 的 device tree中加上

	chosen {
		simplefb_lcd: framebuffer-lcd0 {
			compatible = "allwinner,simple-framebuffer",
				     "simple-framebuffer";
			allwinner,pipeline = "de_be0-lcd0";
			clocks = <&ccu CLK_BUS_LCD>, <&ccu CLK_BUS_DE_BE>,
				 <&ccu CLK_TCON>, <&ccu CLK_DE_BE>,
				 <&ccu CLK_DRAM_DE_BE>;
			status = "okay";
		};
	};

然后把CONFIG_VIDEO_DT_SIMPLEFB打开后,发现正确预留了内存

# cat /proc/iomem
...
80000000-81e88fff : System RAM
  80008000-805fffff : Kernel code
  80700000-8075b493 : Kernel data

离线

#13 2020-06-30 21:01:50

zl308424
会员
注册时间: 2020-03-19
已发帖子: 14
积分: 4

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

感谢分享,试了下,还是楼主方式修改boot参数,加上mem=30M简单有效(我是f1c100s,800*480屏幕)

离线

#14 2020-06-30 21:21:26

哇酷小二
管理员
所在地: 你猜
注册时间: 2020-04-22
已发帖子: 3,388
积分: 1902
个人网站

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

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

感谢楼主热心分享, 感谢楼上各位朋友热烈讨论, 本帖已加入本站精华帖





离线

#15 2020-08-13 10:27:36

flashfly123
会员
注册时间: 2020-08-13
已发帖子: 1
积分: 1

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

这个是全志的官方支持吗?网上找不到资料,这里确是一堆不全的东西

离线

#16 2020-08-17 11:48:52

我思故我在
会员
注册时间: 2019-09-03
已发帖子: 244
积分: 243.5

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

好文, 这个花屏纠结了很久,晚点试一试。

离线

#17 2020-08-19 10:09:17

小熊猫
会员
注册时间: 2020-05-21
已发帖子: 71
积分: 65.5

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

wupaul2001 说:

由于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了。

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

480x272 的屏 改成480x600 就可以了,mem 大于1M ,虽然笨方法,但是很有效,

离线

#18 2022-04-30 12:05:19

LinuxGo
会员
注册时间: 2021-01-07
已发帖子: 88
积分: 120

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

这不是浪费了1M?永远用不到了

离线

#19 2023-03-29 00:01:11

zhaoxu1887
会员
注册时间: 2020-02-23
已发帖子: 3
积分: 3

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

@wupaul2001
亲测可行,感谢大神分享!

离线

#20 2024-08-15 10:10:12

joeydeng
会员
注册时间: 2022-09-12
已发帖子: 9
积分: 99

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

在设置mem=30M后 free -m 发现内存的total size也少了2m
感觉这个应该不是最优解 hmm

# cat /proc/iomem
01c00000-01c0002f : 1c00000.sram-controller
01c02000-01c02fff : 1c02000.dma-controller
01c05000-01c05fff : 1c05000.spi
01c0c000-01c0cfff : 1c0c000.lcd-controller
01c0f000-01c0ffff : 1c0f000.mmc
01c13000-01c133ff : usb@1c13000
  01c13000-01c133ff : musb-hdrc.1.auto
01c13400-01c1340f : 1c13400.phy
01c20000-01c203ff : clock@1c20000
01c20800-01c20bff : 1c20800.pinctrl
01c23400-01c237ff : 1c23400.lradc
01c23c00-01c23fff : 1c23c00.codec
01c25000-01c2501f : serial
01c27000-01c273ff : 1c27000.i2c
01e60000-01e6ffff : 1e60000.display-backend
80000000-81ffffff : System RAM
  80008000-807fffff : Kernel code
  80900000-8096c34b : Kernel data
#


修改前的,看起来reserve是有的,等再找找问题

离线

页脚

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

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