create_mapping函数结束后回到其最开始的调用位置paging_init函数 。执行dma_contiguous_remap函数 。开始处理虚拟地址空间的静态映射 。基本处理流程如下↓
1.从指定内存域取出需要映射的空间.
2.清洗相应的硬件MMU空间.
3.填充map.
4.建立映射表空间.
5.同时将其加入到静态映射空间链表管理 。

文章插图
dma_contiguous_remap函数

文章插图
dma_contiguous_remap实现(1)
- 第32行:遍历dma_mmu_remap,将其中管理的内存域依次填充成map的结构来处理 。还记得dma_mmu_remap里面管理的是什么吗?请回顾

文章插图
dma_contiguous_remap实现(2)
- 第59行:以PMD为步长,初始化pmd表项空间,并刷洗硬件MMU相应与之对应的TLB
- 第61行:刷洗内核内start到end区间内的TLB,这个函数细节暂不分析 。
- 第64行:初始化这一段表空间,实现↓

文章插图
iotable_init
- 第12行:向memblock申请静态结构数据(svm)空间,1个map对应一个svm
- 第14行:对map建立物理映射关系表
- 16~21行:将建立的映射关系同步设置到对应的svm
- 第22行:将svm添加到static_vmlist进行管理
devicemaps_init函数

文章插图
devicemaps_init实现(1)
- 第74行:向memblock申请了2页的空间
- 第76行:CPU架构相关暂不分析
- 第79行:填充从VMALLOC_START开始到最后的PMD表项空间,并清空硬件MMU相应的TLB

文章插图
devicemaps_init实现(2)

文章插图
【静态网页空间 静态空间图片】devicemaps_init实现(3)
- 定义了XIP_KERNEL、FLUSH_BASE、FLUSH_BASE_MINCACHE则建立相应的物理内存映射关系

文章插图
devicemaps_init实现(4)

文章插图
devicemaps_init实现(5)
- 第116~124行:将vector页框映射到起始地址为0xffff0000的位置 大小为1页
- 第126~130行:如果存在low_vector则将vector页框同时映射到起始地址为0的位置,大小为2页
- 第144行:内核提供给用户的创建外设IO资源静态映射到内核地址空间的接口
- 第147行:在静态映射链表上因为每个PMD包含2个pmd_t,分别是PMD[0]和PMD[1].每个占用1M空间,实际使用过程中有的可能只使用了其中的一半,另一半未被初始化 。为了避免这个问题所以就有了这个函数 。一旦静态映射就绪,就使用插入假VM的形式避免另一半被ioremap或者其他拿去使用 。实现细节↓
- 第150行:保留PCI设备的IO空间,与上面分析类似

文章插图
fill_pmd_gaps实现(1)

文章插图
fill_pmd_gaps实现(2)

文章插图
fill_pmd_gaps实现(3)
- 网页证书过期怎么解决 网站的证书过期怎么办
- 3D网页游戏排行榜 3d网络大型游戏排行榜
- 七度空间卫生裤 space7七度空间卫生巾是七度空间吗
- 聊天技巧 qq空间玩法
- qq邮箱在线登录 腾讯网qq邮箱网页登录
- 一淘网在哪里 一淘网页版
- 什么加速器可以加速网页游戏视频 带游戏加速的路由器
- 手机网页翻译器使用方法视频 vivo怎么快速翻译
- 魔兽世界官网电脑版 魔兽世界网页版游戏
- 刚刚交往一个月,我女朋友的QQ空间有隐藏的照片,问过之后给我放开了一部分,但还隐藏很多,能继续追问吗?
特别声明:本站内容均来自网友提供或互联网,仅供参考,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
