zoukankan      html  css  js  c++  java
  • NKStartup的参数KData

    NKStartup的参数KData是什么?,其实就是一个数据结构, 它位于nkldr的data区。如下:

          AREA |.KDATA|,DATA,NOINIT

            

    KDataArea

    PTs     %       0x4000          ; space for first-level page table

    ExceptionVectors 

            %       0x0400    ; space for exception vectors

            %       0x0400    ; space for interrupt stack

            %       0x0100    ; space for FIQ stack

            %       0x0700    ; space for Abort stack

    KPage  %       0x0c00   ; space for kernel stack & KDataStruct

    HighPT %       0x0400   ; 2nd level page table to map 0xFFF00000

    KDEnd %       0

    撇开实现, 单纯去理解的话, 和传递一个结构体指针没有什么区别。 再问: 这个数据结构干嘛的,代表什么? 这得明白高地址分配。

    [高地址分配]

       ^ 0xFFFD0000

    FirstPT         # 0x4000

                 # 0x4000

                 # 0x8000

                 # 0x10000       ; not mapped

    ExVector       # 0x0400        ; vectors and table

                 # 0x0400  ; 1K interrupt stack            (ffff0400)

    IntStack       # 0x0100 ; 256 byte FIQ stack            (ffff0800)

    FIQStack      # 0x0700 ; 2K-256 abort stack            (ffff0900)

    AbortStack  #0xC000-0x1000;not mapped                (ffff1000)

    KDBase       # 0x07E0        ; 2K-32 kernel stack

    KStack        # 0x0020        ; temporary register save area

    KData         # 0x400         ; kernel data area

    FirstPT就是之前说的一级页表所在。大小16kbytes。 后面保留了2块区域,也许是提供给2级页表使用。 ExVector是异常入口, Arm有个机制, 通过设定p15, 可以将异常入口从0x18改成高地址FFFF0000. IntStack, FIQStack, AbortStack, KStack分别是各个模式以及内核的堆栈。 KData就是内核参数区了。

    typedef struct ARM_HIGH {

        ulong   firstPT[4096];      // 0xFFFD0000: 1st level page table

        char    reserved2[0x20000-0x4000];

        char    exVectors[0x400];   // 0xFFFF0000: exception vectors

        char    reserved3[0x2400-0x400];

        char    intrStack[0x400];   // 0xFFFF2400: interrupt stack

        char    reserved4[0x4900-0x2800];

        char    abortStack[0x700];  // 0xFFFF4900: abort stack

        char    reserved5[0x6800-0x5000];

        char    fiqStack[0x100];    // 0xFFFF6800: FIQ stack

        char    reserved6[0xC000-0x6900];

        char    kStack[0x800];      // 0xFFFFC000: kernel stack

        struct KDataStruct kdata;   // 0xFFFFC800: kernel data page

    } ARM_HIGH;

  • 相关阅读:
    .NET Interop 工具集
    关于正弦波的算法
    Windows Phone 系列 本地数据存储
    Xaml cannot create an instance of “X”
    Windows Phone 系列 使用 MVVM绑定时无法获取当前值
    Windows Phone 系列 应用程序图标无法显示
    Windows Phone 系列 WPConnect无法上网的问题
    Windows Phone 系列 使用 Windows Phone 保存铃声任务
    WP7.5提交应用
    Windows Phone 系列 动态删除ObservableCollection
  • 原文地址:https://www.cnblogs.com/LoongEmbedded/p/5298850.html
Copyright © 2011-2022 走看看