请教一下怎么把uboot中显示的logo保留到linux启动完成以后。
现在开机2~3秒显示一下logo,然后黑屏大概5秒左右知道我的程序开始显示内容。
我想让uboot中的logo一直显示下去,直到我的程序接管显示。请教大神如何处理,可以付费。
我用的全志的lichee系统,不是主线。(A33)
最近编辑记录 andrewgu (2021-01-01 23:29:50)
离线
请问V3s Simple Framebuffer 启动之后,就把uboot显示的图片给清理了,两秒黑屏才进入app, 有什么办法不让他清屏呢
http://whycan.com/t_4689.html#p46932
(出处:哇酷开发者社区【全志 V3S/F1C100s/X3】)适合 simplefb驱动, 估计不适合drm驱动
谢谢,我学习一下。
离线
已经暴力解决。我经过调试以后发现,我这的问题是由于linux kernel启动的时候把uboot使用的framebuffer所在的内存释放了(mem_init->free_all_bootmem)。我尝试了多了方法进行了调整,均无效。最好强制修改了free_all_bootmem的代码,把framebuffer所在的页保留下来了。
离线
分享一下修改代码:
修改文件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;
}
离线
这是修改以后的效果视频
离线
我记得SDK本身就不会黑啊
我用的sinlinx的sdk,您还记得用的什么sdk吗?
离线
应该是可以等logo显示后把fb关掉,然后等开机后再打开fb
每个人的情况可能不一样,我的情况应该是,linux kernel把uboot分配的显存给回收掉了。
离线