分别是:create_table_entry、create_pgd_entry和create_block_map。 create_table_entry实现如下。 /* * Macro to create a table entry to the next page. * * tbl: 页表基地址 * virt: 需要创建地址映射的虚拟地址 * shift: #imm page table shift * ptrs: #imm pointers per table page * * Preserv...
pte_offset_kernel(dir,addr):线性地址 addr 在页中间目录 dir 中有一个对应的项,该宏就产生这个对应项,即页表的线性地址。另外,该宏只在主内核页表上使用 pte_offset_map(dir, addr):接收指向一个页中间目录项的指针 dir 和线性地址 addr 作为参数,它产生与线性地址 addr 相对应的页表项的线性地址。如果页...
fixmap中fix即固定的意思,map即建立映射,然而这里的理解不是建立固定的映射,而是在一段固定的虚拟地址建立映射;则可以通过这块的virt addr,映射到任意的phy addr上,在mmu enable之后就可以自由自在的访问我们需要的内容了;也就是说kernel在编译时即固定了一段虚拟地址,这段地址被用于早期内存管理体系还未完成之前各个...
1)virt_to_page(addr) 产生与线性地址addr 关联的页描述符的地址 2)pfn_to_page(pfn) 产生与页号pfn的page frame 关联的页描述符的地址 image.png image.png image.png image.png mem_map 数组 1)描述所有的页 2)每个元素:32B, 整个table 小于内存的1% 物理内存管理的管理架构 NUMA UMA image.png 非统...
arch_efi_call_virt_setup() 负责efi 内存上下文的切换。 1 2 3 4 5 6 #define arch_efi_call_virt_setup() \ ({ \ efi_virtmap_load(); \ __efi_fpsimd_begin(); \ raw_spin_lock(&efi_rt_lock); \ }) efi_virtmap_load最重要的操作就是switch_mm ...
struct page_address_map *pam; list_for_each_entry(pam, &pas->lh, list) { if (pam->page == page) { ret = pam->virtual; goto done; } } } done: spin_unlock_irqrestore(&pas->lock, flags); return ret; } [cpp] ...
#ifdef CONFIG_SPARSEMEM_VMEMMAP MLM((unsignedlong)virt_to_page(PAGE_OFFSET), (unsignedlong)virt_to_page(high_memory)), #endif MLM(MODULES_VADDR, MODULES_END), MLM(PAGE_OFFSET, (unsignedlong)high_memory), MLK_ROUNDUP(__init_begin, __init_end), ...
#ifdef CONFIG_SPARSEMEM_VMEMMAP MLM((unsigned long)virt_to_page(PAGE_OFFSET), (unsigned long)virt_to_page(high_memory)), #endif ...
在执行setup_arch中,会最先进行early_fixmap_init(),这个函数就是用来map dtb的,但是它只会建立dtb对应的这段物理地址中间level的页表entry,而最后一个level的页表映射则通过setup_machine_fdt函数里的fixmap_remap_fdt来创建。 void*__initfixmap_remap_fdt(phys_addr_tdt_phys){void*dt_virt;intsize; ...
代码语言:javascript 复制 setenv bootcmd 'setenv bootm_boot_mode sec;setenv ipaddr 192.168.25.20;setenv serverip 192.168.25.25;tftp 41000000 zImage;tftp 41800000 sun8i-v3s-licheepi-zero-dock.dtb;bootz 0x41000000 - 0x41800000' 2、设置 bootargs ...