Nuttx操作系统(十三):内存布局

本文讲解Nuttx系统在RISC-V架构下,运用PMP时的内存布局

内存布局

NuttX系统有3中编译模式,分为统一编址的Flat编译模式、具有PMP地址保护的Protected编译模式和支持虚拟地址的Kernel模式。

Flat模式下没有区分特权程序和非特权程序,应用程序和内核程序都运行在M-Mode模式下。在M-Mode模式下,处理器可以访问全部的地址空间,也就是应用程序可以随意访问内核代码,这将十分容易导致系统奔溃,不能保证系统的稳定;

Protected和Kernel模式都提供了PMP内存保护功能,可以使不可信的代码仅运行在U-Mode模式下,限制了处理器访问权限使其只能访问规定的内存范围,能够最大程度保证系统的稳定。其中,Kernel模式实现内存保护并且实现了虚拟地址功能,但Kernel模式需要硬件MMU的支持,具有硬件局限性;相较而言,Protected编译模式具有地址保护功能同时无需硬件MMU支持,适合大部分嵌入式设备。

物理内存通常分为存放固件的Flash(ROM,掉电数据保存)和程序运行的RAM(掉电数据丢失)。在Protected编译模式下,用户空间和内核空间具有不同的访问权限,因此可将整个物理内存地址空间分为4个区域,分别为存放用户镜像的UROM、内核镜像的KROM、用户运行内存URAM和内核运行内存KRAM,NuttX物理内存划分如下图所示:

NuttX内存布局

下面将详细介绍图6-2中4个内存区域:

  • KROM
  • KROM区域存放内核镜像,包含内核启动代码和通过make menuconfig裁剪的模块;
  • KROM区域受PMP内存保护,具有读权限,禁止用户程序直接访问(U-Mode),应用程序需要通过系统调用陷入M-Mode模式下进行间接访问;
  • UROM
  • UROM区域存放应用镜像,包含NSH(NuttX Shell)和内嵌的应用程序;
  • UROM区域无需PMP内存保护,具有读权限,原则上是U-Mode专用,但M-Mode下仍然可以访问;
  • KRAM
  • KRAM区域作为NuttX内核运行主存;
  • KRAM区域受PMP内存保护,具有读写、执行权限,禁止用户程序使用,即M-Mode下专用,U-Mode不可访问
  • URAM
  • URAM区域作为应用程序运行主存;
  • URAM区域无需PMP内存保护,具有读写、执行权限,原则上是U-Mode专用,但M-Mode下仍然可以访问;

猜你喜欢

转载自blog.csdn.net/u012294613/article/details/132163057