- 論壇徽章:
- 1
|
本帖最后由 arm-linux-gcc 于 2014-06-25 16:49 編輯
不要用alloc_bootmem,不管是nobootmem.c還是bootmem.c的實(shí)現(xiàn),他們都會(huì)去從low mem分配,浪費(fèi)了寶貴的low mem
建議像6樓那么做,最好盡量使用高地址的內(nèi)存
如果一定要放在low mem或者只有l(wèi)ow mem,要注意避開內(nèi)核已經(jīng)resever的內(nèi)存區(qū)域,在MACHINE_START的reserve回調(diào)被調(diào)用之前,內(nèi)核對(duì)以下區(qū)域做了reserve:
1,memblock_reserve(__pa(_stext), _end - _stext); 把從.text段到.bss段結(jié)尾這段區(qū)域加到memblock.reserved
2,memblock_reserve(__pa(swapper_pg_dir), SWAPPER_PG_DIR_SIZE); 把初始頁(yè)表所在的區(qū)域加到memblock.reserved
3,memblock_reserve(virt_to_phys(initial_boot_params), be32_to_cpu(initial_boot_params->totalsize)); 把dtb所在的區(qū)域加到memblock.reserved
上述3個(gè)做了之后才輪到MACHINE_START中的reserve
你的10M最好挨著這些區(qū)域放,以便使得有盡量多的連續(xù)物理內(nèi)存
另外cmdline中mem=size@address這種保留內(nèi)存的方法最好不要再用了,在3.x的內(nèi)核中,/dev/mem的mmap會(huì)將這種內(nèi)存強(qiáng)制搞成uncache的——性能不好
ATAG_MEM和dtb中的memory節(jié)點(diǎn)與mem=這種方法是等價(jià)的,也不要用他們來(lái)保留內(nèi)存。
使用memblock_reserve才顯得更標(biāo)準(zhǔn)一些。
|
|