Skip to main content

划分小核配置内存的方法

一 内存划分原理

小核是运行在大核的内存中的,如果不进行内存分段划分的话,而内存是共用的。就有可能出现大小核内存数据相互影响,导致一些奇奇怪怪的问题。所以首先保证在大核中预留一段rtos_size内存,专用于小核运行和执行小核程序。

配置方法:位于 bootloader/uboot-x2000/boards.cfg 中配置,在所用配置的 options 里加上 RTOS_SIZE_MB=XXX

例如内存总大小为128MB时,如果RTOS_SIZE_MB=32,那么0MB~96MB(128-32)的位置为Linux系统大核的内存可用地址,96MB~128MB的位置为小核的内存可用地址,也就是说小核的内存预留段为从0x6000000开始的32M。

查看:烧录进入板子后可通过在 Linux 系统里 cat /proc/cmdline 查看当前配置的 RTOS_SIZE_MB

1

计算方法:没有固定的计算公式,根据小核所需要的功能配置对应需要的内存大小。

注意:

1,所有内存划分均以主控芯片上最大内存容量为限,超出实际内存容量的划分方法应避免。最大划分范围为0~256MB。

2,x2600的可划分内存范围为0~128MB,x2600e的可划分内存范围为0~256MB。如果实际内存容量超出256MB(如x2600h),那么各预留段仍均在0~256MB内进行划分。

内存划分相关详细文档请参照:repo代码库\doc\开发使用说明\预留内存使用说明文档\x2600\Linux预留内存管理.pdf

特别注意:

如果没有预留小核内存或者预留小核内存地址和小核运行地址不匹配,小核也能运行起来,但是可能长时间运行或者负载较重时会出现一些大小核程序都不稳定的奇奇怪怪的问题,此时优先根据本文和doc\开发使用说明\预留内存使用说明文档\x2600\Linux预留内存管理.pdf 检查当前代码配置的小核内存划分和设置是否正确。

二 总体空间划分

以256MB内存空间为例:

2

图中mem、vpu_mem、rmem、rtos_size和share_mem的顺序是固定的, 哪个不设置就不预留这个内存段就可以了。

vpu_mem、rmem、rtos_size和share_mem的大小可以直接更改,设置为0时则不划分。

以编译配置x2600e_nor_5.10_defconfig为例,展示x2600e(256MB内存容量的主控芯片)预留6M RTOS_SIZE_MB内存给小核使用,同时预留16M RMEM内存段的配置方法。

三 配置boards.cfg

首先确定当前编译配置对应的spl配置位置和具体配置:

xy@vb:~/job/linux/x2600/build$ cat configs/x2600e_nor_5.10_defconfig |grep uboot
APP_uboot_toolchain_dir=../tools/toolchains/mips-xburst2-gcc720-glibc238
APP_uboot_dir=../bootloader/uboot-x2000
APP_uboot_config=x2600e_base_xImage_sfc_nor

可知当前spl编译路径为../bootloader/uboot-x2000, spl的编译配置为:x2600e_base_xImage_sfc_nor

所以应该在../bootloader/uboot-x2000/boards.cfg中寻找对应的编译配置x2600e_base_xImage_sfc_nor并添加

3

在x2600e_base_xImage_sfc_nor对应项后面添加RMEM_MB=16,RTOS_SIZE_MB=6

4

四 计算rtos_size的起始地址

本例中因为没有划分VPU_MEM和SHARE_MEM,所以RTOS_SIZE的空间应该是总内存大小256MB的最后6M,也就是250M~256M。RMEM应该是倒数第二段内存,即234M~250M,也就是从(256M-6M-16M)到(256M-6M)。

所以RTOS_SIZE段的起始地址为250MB位置,即0xfa00000,大小为6MB。

五 设置小核的运行内存地址

5

将此处的“memory起始地址”和“memory 大小”对应设置为上面算好的RTOS_SIZE段的起始地址和大小。一定不能错了!!!

六 确认小核运行地址是否设置正确

上述修改经编译烧录后,可以查看当前的cmdline中对rtos_size和rmem的具体划分,从而确认小核配置的“memory起始地址”和“memory 大小”是否正确。

6

可知当前大核划分的rtos_size段是从0xfa00000开始的6M, rmem段为从0xea00000开始的16M。与上述小核配置的起始地址和大小一致,说明上述设置正确。

7

内存划分相关详细文档请参照:repo代码库\doc\开发使用说明\预留内存使用说明文档\x2600\Linux预留内存管理.pdf