博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
linux内核学习(4)建立正式内核的页式内存映射, 以x86 32位模式为例
阅读量:4069 次
发布时间:2019-05-25

本文共 1717 字,大约阅读时间需要 5 分钟。

linux内核学习(4)建立正式内核的页式内存映射, 以x86 32位模式为例

void __init setup_arch(char **cmdline_p){	max_low_pfn_mapped = init_memory_mapping(0, max_low_pfn<
unsigned long __init_refok init_memory_mapping(unsigned long start, unsigned long end) { for (i = 0; i < nr_range; i++) ret = kernel_physical_mapping_init(mr[i].start, mr[i].end, mr[i].page_size_mask); =>unsigned long __init kernel_physical_mapping_init(unsigned long start, unsigned long end, unsigned long page_size_mask) { 和页表项 start_pfn = start >> PAGE_SHIFT; end_pfn = end >> PAGE_SHIFT; pgd_t *pgd_base = swapper_pg_dir; pages_2m = pages_4k = 0; pfn = start_pfn; pgd_idx = pgd_index((pfn<
pte_t * __init one_page_table_init(pmd_t *pmd) { if (!(pmd_val(*pmd) & _PAGE_PRESENT)) { // 生成页表 pte_t *page_table = NULL; if (after_bootmem) { #if defined(CONFIG_DEBUG_PAGEALLOC) || defined(CONFIG_KMEMCHECK) page_table = (pte_t *) alloc_bootmem_pages(PAGE_SIZE); #endif if (!page_table) page_table = (pte_t *)alloc_bootmem_pages(PAGE_SIZE); } else page_table = (pte_t *)alloc_low_page(); paravirt_alloc_pte(&init_mm, __pa(page_table) >> PAGE_SHIFT); set_pmd(pmd, __pmd(__pa(page_table) | _PAGE_TABLE)); // 将页表物理地址写在页目录项 BUG_ON(page_table != pte_offset_kernel(pmd, 0)); } return pte_offset_kernel(pmd, 0); } pte_ofs = pte_index((pfn<
<< PAGE_SHIFT) + PAGE_SIZE; } else set_pte(pte, pfn_pte(pfn, prot)); } } } } early_ioremap_page_table_range_init(); load_cr3(swapper_pg_dir); }}

Linux内核源码学习 (1)- 从实模式到保护模式

https://my.oschina.net/u/135465/blog/99590

转载地址:http://vblji.baihongyu.com/

你可能感兴趣的文章
redis sharding方案
查看>>
程序员最核心的竞争力是什么?
查看>>
Node.js机制及原理理解初步
查看>>
linux CPU个数查看
查看>>
分布式应用开发相关的面试题收集
查看>>
简单理解Socket及TCP/IP、Http、Socket的区别
查看>>
利用HTTP Cache来优化网站
查看>>
利用负载均衡优化和加速HTTP应用
查看>>
消息队列设计精要
查看>>
分布式缓存负载均衡负载均衡的缓存处理:虚拟节点对一致性hash的改进
查看>>
分布式存储系统设计(1)—— 系统架构
查看>>
MySQL数据库的高可用方案总结
查看>>
常用排序算法总结(一) 比较算法总结
查看>>
SSH原理与运用
查看>>
SIGN UP BEC2
查看>>
S3C2440中对LED驱动电路的理解
查看>>
《天亮了》韩红
查看>>
Windows CE下USB摄像头驱动开发(以OV511为例,附带全部源代码以及讲解) [转]
查看>>
出现( linker command failed with exit code 1)错误总结
查看>>
iOS开发中一些常见的并行处理
查看>>