您尚未登录。

楼主 #1 2021-01-01 23:26:07

andrewgu
会员
注册时间: 2019-04-30
已发帖子: 21
积分: 21

请教怎么把uboot中显示的logo保留到linux启动完成以后(可以付费)

请教一下怎么把uboot中显示的logo保留到linux启动完成以后
现在开机2~3秒显示一下logo,然后黑屏大概5秒左右知道我的程序开始显示内容。
我想让uboot中的logo一直显示下去,直到我的程序接管显示。请教大神如何处理,可以付费
我用的全志的lichee系统,不是主线。(A33)

最近编辑记录 andrewgu (2021-01-01 23:29:50)

离线

楼主 #3 2021-01-02 00:01:40

andrewgu
会员
注册时间: 2019-04-30
已发帖子: 21
积分: 21

Re: 请教怎么把uboot中显示的logo保留到linux启动完成以后(可以付费)

raspberryman 说:

请问V3s Simple Framebuffer 启动之后,就把uboot显示的图片给清理了,两秒黑屏才进入app, 有什么办法不让他清屏呢
http://whycan.com/t_4689.html#p46932
(出处:哇酷开发者社区【全志 V3S/F1C100s/X3】)



适合 simplefb驱动, 估计不适合drm驱动

谢谢,我学习一下。

离线

楼主 #4 2021-01-02 21:58:14

andrewgu
会员
注册时间: 2019-04-30
已发帖子: 21
积分: 21

Re: 请教怎么把uboot中显示的logo保留到linux启动完成以后(可以付费)

已经暴力解决。我经过调试以后发现,我这的问题是由于linux kernel启动的时候把uboot使用的framebuffer所在的内存释放了(mem_init->free_all_bootmem)。我尝试了多了方法进行了调整,均无效。最好强制修改了free_all_bootmem的代码,把framebuffer所在的页保留下来了。

离线

楼主 #8 2021-01-04 09:50:12

andrewgu
会员
注册时间: 2019-04-30
已发帖子: 21
积分: 21

Re: 请教怎么把uboot中显示的logo保留到linux启动完成以后(可以付费)

分享一下修改代码:
修改文件linux-3.4/mm/bootmem.c中free_all_bootmem_core函数,其中有中文注解的部分是我加的代码。

static unsigned long __init free_all_bootmem_core(bootmem_data_t *bdata)
{
	struct page *page;
	unsigned long start, end, pages, count = 0;

	if (!bdata->node_bootmem_map)
		return 0;

	start = bdata->node_min_pfn;
	end = bdata->node_low_pfn;

	printk(KERN_NOTICE"nid=%td start=%lx end=%lx\n",
		bdata - bootmem_node_data, start, end);

	while (start < end) {
		unsigned long *map, idx, vec;

		map = bdata->node_bootmem_map;
		idx = start - bdata->node_min_pfn;
		vec = ~map[idx / BITS_PER_LONG];
		/*
		 * If we have a properly aligned and fully unreserved
		 * BITS_PER_LONG block of pages in front of us, free
		 * it in one go.
		 */
		if (IS_ALIGNED(start, BITS_PER_LONG) && vec == ~0UL) {
			int order = ilog2(BITS_PER_LONG);
			if(start==0x46400){ //保留uboot framebuffer所用的页面 andrew AICHIP 2021.1.2
				//因为我的屏幕是480*272的,所以保留BITS_PER_LONG*4就够了。
				count += BITS_PER_LONG*4;
				start += BITS_PER_LONG*4;
			}
			__free_pages_bootmem(pfn_to_page(start), order);
			count += BITS_PER_LONG;
			start += BITS_PER_LONG;
		} else {
			unsigned long off = 0;

			while (vec && off < BITS_PER_LONG) {
				if (vec & 1) {
					page = pfn_to_page(start + off);
					__free_pages_bootmem(page, 0);
					count++;
				}
				vec >>= 1;
				off++;
			}
			start = ALIGN(start + 1, BITS_PER_LONG);
		}
	}

	page = virt_to_page(bdata->node_bootmem_map);
	pages = bdata->node_low_pfn - bdata->node_min_pfn;
	pages = bootmem_bootmap_pages(pages);
	count += pages;
	while (pages--)
		__free_pages_bootmem(page++, 0);

	bdebug("nid=%td released=%lx\n", bdata - bootmem_node_data, count);

	return count;
}

离线

楼主 #9 2021-01-04 09:55:45

andrewgu
会员
注册时间: 2019-04-30
已发帖子: 21
积分: 21

Re: 请教怎么把uboot中显示的logo保留到linux启动完成以后(可以付费)

这是修改以后的效果视频

离线

楼主 #11 2021-01-04 16:10:28

andrewgu
会员
注册时间: 2019-04-30
已发帖子: 21
积分: 21

Re: 请教怎么把uboot中显示的logo保留到linux启动完成以后(可以付费)

shaoxi2010 说:

我记得SDK本身就不会黑啊

我用的sinlinx的sdk,您还记得用的什么sdk吗?

离线

楼主 #13 2021-01-04 16:30:55

andrewgu
会员
注册时间: 2019-04-30
已发帖子: 21
积分: 21

Re: 请教怎么把uboot中显示的logo保留到linux启动完成以后(可以付费)

hpxzw520 说:

应该是可以等logo显示后把fb关掉,然后等开机后再打开fb

每个人的情况可能不一样,我的情况应该是,linux kernel把uboot分配的显存给回收掉了。

离线

页脚

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

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