5.3.10.静态映射表建立过程分析

5.3.10.静态映射表建立过程分析
5.3.10.1、建立映射表的三个关键部分
(1)映射表具体物理地址和虚拟地址的值相关的宏定义

https://blog.csdn.net/liangzuzong/article/details/131994560
(2)映射表建立函数(宏定义)。该函数负责由(1)中的映射表来建立linux内核的页表映射关系。mmu: 页表,查询虚拟地址 得到 物理地址
在kernel/arch/arm/mach-s5pv210/mach-smdkc110.c中的smdkc110_map_io函数
smdkc110_map_io
    s5p_init_io
        iotable_init
结论:经过分析,真正的内核移植时给定的静态映射表在arch/arm/plat-s5p/cpu.c中的s5p_iodesc,本质是一个结构体数组数组中每一个元素就是一个映射,这个映射描述了一段物理地址到虚拟地址之间的映射。这个结构体数组所记录的几个映射关系被iotable_init所使用,该函数负责将这个结构体数组格式的表建立成MMU所能识别的页表映射关系,这样在开机后可以直接使用相对应的虚拟地址来访问对应的物理地址。
5.3.10.静态映射表建立过程分析_第1张图片

 5.3.10.静态映射表建立过程分析_第2张图片

    iotable_init  建立映射:5.3.10.静态映射表建立过程分析_第3张图片

5.3.10.静态映射表建立过程分析_第4张图片

    
(3)开机时调用映射表建立函数
问题:开机时(kernel启动时)smdkc110_map_io怎么被调用的?
start_kernel
    setup_arch
        paging_init
            devicemaps_init
            
if (mdesc->map_io)
        mdesc->map_io();  这个就会执行      .map_io        = smdkc110_map_io,

你可能感兴趣的:(朱老师,5linux驱动开发,linux,运维,服务器)