NKStartup的参数KData
发布日期:2021-06-30 21:55:17 浏览次数:3 分类:技术文章

本文共 1650 字,大约阅读时间需要 5 分钟。

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;

转载地址:https://loongembedded.blog.csdn.net/article/details/5991971 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:WINCE6.0+S3C2443的启动过程---内核启动
下一篇:CE6内核启动过程-新角度

发表评论

最新留言

能坚持,总会有不一样的收获!
[***.219.124.196]2024年04月07日 22时25分18秒

关于作者

    喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!

推荐文章