- 論壇徽章:
- 0
|
最近閱讀ARM平臺(tái)kernel初始化過(guò)程,但在kernel初始化時(shí)的內(nèi)存管理方面有個(gè)問(wèn)題一直想不通:
在setup_arch -> paging_init -> bootmem_init -> bootmem_init_node函數(shù), 在最開(kāi)始是調(diào)用
map_memory_bank(bank); 創(chuàng)建每個(gè)bank的映射表, 問(wèn)題是map_memory_bank調(diào)用了create_mapping,
而create_mapping, 在ARM中最終會(huì)調(diào)用到__alloc_bootmem_low函數(shù)從bootmem中申請(qǐng)空間, 問(wèn)題來(lái)了, 該函數(shù)list_for_each_entry(bdata, &bdata_list, list)遍歷bdata_list查找每一個(gè)node(即bdata),
但是查看bootmem_init_node函數(shù), 程序是在map_memory_bank后才調(diào)用init_bootmem_node添加node到bdata_list的, 那么map_memory_bank怎么可能成功呢?
望賜教. |
|