Linux内核静态映射表建立过程分析

来源:互联网 发布:淘宝详情页模版 编辑:程序博客网 时间:2024/05/22 10:31

Linux内核静态映射表建立过程分析

分析的源码:九鼎为s5pv210移植过的linux+qt4.8的kernel,内核版本号2.6.35

建立映射表的三个关键部分:

  • 映射表
  • 映射表建立函数
  • 映射表建立函数被调用

1. 映射表

具体物理地址和虚拟地址的值相关的宏定义,也就是文章《随笔–Linux字符设备驱动开发基础》中静态映射操作LED一节提到的静态映射表。实际工作中我们也只要明白静态映射表的意义就可以编写相关的代码

2. 映射表建立函数

该函数负责由(1)中的映射表来建立MMU所能识别的页表映射关系。
在kernel/arch/arm/mach-s5pv210/mach-smdkc110.c中的smdkc110_map_io函数:
blog001

结论:经过分析,真正的内核移植时给定的静态映射表在arch/arm/plat-s5p/cpu.c中的s5p_iodesc,本质是一个结构体数组,数组中每一个元素就是一个映射,这个映射描述了一段物理地址到虚拟地址之间的映射。这个结构体数组所记录的几个映射关系被iotable_init所使用,该函数负责将这个结构体数组格式的表建立成MMU所能识别的页表映射关系,这样在开机后可以直接使用相对应的虚拟地址来访问对应的物理地址。

3.映射表建立函数被调用

开机时(kernel启动时)smdkc110_map_io怎么被调用的?

blog002

0 0
原创粉丝点击