微信小程序本地存储与登录页面处理实例详细讲解
954
2022-09-17
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;
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~