页次: 1
分享一下修改代码:
修改文件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;
}
请问V3s Simple Framebuffer 启动之后,就把uboot显示的图片给清理了,两秒黑屏才进入app, 有什么办法不让他清屏呢
http://whycan.com/t_4689.html#p46932
(出处:哇酷开发者社区【全志 V3S/F1C100s/X3】)适合 simplefb驱动, 估计不适合drm驱动
谢谢,我学习一下。
问题已解决自己来结一下题。
A33 的 lichee linux 为DMA和ION预留了内存 。其中ION预留的比较多,内存大于512M时预留150M,否则预留96M。
具体代码请参考 linux-3.4/arch/arm/mach-sunxi/sun8i.c
static inline void sun8i_ion_reserve_override(void)
{
const int mem512 = 512 * SZ_1M;
ion_mem.size = CONFIG_ION_SUNXI_CARVEOUT_SIZE * SZ_1M;
if(mem_size == mem512 || mem_size < mem512){
ion_mem.size = CONFIG_ION_SUNXI_CARVEOUT_SIZE_512M * SZ_1M;
}
}
因此我们可以修改这里的代码,或者修改配置文件(.config)
CONFIG_ION_SUNXI_CARVEOUT_SIZE=150
CONFIG_ION_SUNXI_CARVEOUT_SIZE_512M=96
改成
CONFIG_ION_SUNXI_CARVEOUT_SIZE=150
CONFIG_ION_SUNXI_CARVEOUT_SIZE_512M=32
页次: 1