zoukankan      html  css  js  c++  java
  • Linux内核静态映射表的建立过程

    /*

     *    平台:   s5pv210

     *    内核版本号: 2.6.35.7

     */

    kernel/arch/arm/mach-s5pv210/mach-smdkc110.c 这个文件是由三星在移植内核时提供的一个很重要的文件,这个文件中的函数都是与硬件相关的。

    mach-smdkc110.c文件中的smdkc110_map_io函数就是静态映射表建立过程调用的一个函数

    开机时调用映射表建立函数: 

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

    start_kernel

        setup_arch

            paging_init

                devicemaps_init

                {

                      if (mdesc->map_io)

                           mdesc->map_io();       //   这个map_io指向的就是smdkc110_map_io函数,这个之前在讲内核的启动过程的时候就分析过了

                }

    smdkc110_map_io

        s5p_init_io

            iotable_init

    结论:经过分析,真正的内核移植时给定的静态映射表在arch/arm/plat-s5p/cpu.c中的s5p_iodesc,本质是一个结构体数组,数组中每一个元素就是一个映射,这个映射描述

    了一段物理地址到虚拟地址之间的映射。这个结构体数组所记录的几个映射关系被iotable_init所使用,该函数负责将这个结构体数组格式的表建立成MMU所能识别的页表

    映射关系,这样在开机后可以直接使用相对应的虚拟地址来访问对应的物理地址。这个s5p_iodesc数组如下:

  • 相关阅读:
    MRC与ARC两种模式的相互兼容
    解决获取的手机序列号卸载应用重新安装时序列号变动的问题
    屏幕截图
    图片右下角显示水印
    在一个工程中建两个端口(司机端和货主端)
    左右侧边栏抽屉效果
    第二阶段第一天站立会议总结
    第十天站立会议总结
    第九天站立会议总结
    第八天站立会议总结
  • 原文地址:https://www.cnblogs.com/deng-tao/p/6366901.html
Copyright © 2011-2022 走看看