大家好、
我目前正在基于 DM385进行定制设计。 我们的软件源自 nSketch 开发的开发板、如果有用、我们的 PSP 软件包为"PSP _04_04_00_02"。
DevKit 包含512MB RAM、 我相信它的地址映射如下所示:
地址0x80000000 - 0x90000000处为256MB
地址0xB0000000 - 0xC0000000处为256MB
我们的定制板总共使用1GB、两个512MB 芯片。 我认为它的地址映射如下所示:
地址0x80000000 - 0xA0000000处为512MB
地址0xA0000000 - 0xC0000000处为512MB
您可以看到、它基本上填补了原始映射中的512MB 缺口。
我们的内核引导参数是:
console=ttyO0、115200n8 rootwait=1 rw ubi.mtd=7、2048 rootfstype=ubifs root=allow0:rootfs init=/sbin/init mem=92M vram=8M notifyk.vpssm3_sva=0xBFD00000 ip=off memeth=$(ethadal=92M vram=8M notifyk.vpms3_smm=0x85k_sva=0xBFD00000 ipld=off memmemety=0X85k=0Xcpreq=0Xcpek.phys.end=0X85k_cpegreq=0X85k
MEM=92M -我将其理解为92M@0x80000000
cmemk.phys_start=0x85C00000 cmemk.phys_end=0x8AE00000 cmemk.allowOverlap=1 - CMEM 区域从0x85C00000到0x8AE00000
我们项目使用的.bld 文件(mcfw/src_bios6/cfg/tid810x/config_512M.bld)提供了以下看起来匹配的内存映射:
/*头256MB */ var linux_size = 92*MB; var cmem_size = 82*MB; var SR1_size = 50*MB; var video_m3_code_size = 512*KB; var video_m3_data_size = 512*KB; var var_m3_code_size = 4*MB; var var_m3_data_size = 512*b* ;dsp_size = 512*/dsp_size = 512MB_size = 512*/ ddss;var var_m3_code_size = 512KB;var var_b_size = 512*/dsp_size = 512KB;var /*减少此值以修复 VID 帧分配故障。 需要修复*//*必须在128MB 边界上对齐*/ var SR2_FRAME_buffer_size = 217*MB;//如果启用了 tiler,则设置超过128M var SR0_size = 16*MB; var VIDEO_M3_EXception_CTX_size = 128*KB; var VPS_M3_EXception_CTX_size = 128KB; var = 256*SS_MB ; var = 2*DVSS_b_b_b_size = 256*_MB;var 通知_b_bsb_b_b_b_b_bs_b_b_b_bs_b_size = 256*2;var var remote_debug_size = 1*MB;
我要做的是从0x90000000 - 0xB0000000到 Linux 提供512MB、以便我的用户应用程序可以使用它。 如果我可以离开、我希望保留存储器映射中的所有其他分配、以最大程度地减少对系统的更改。
下面是我到目前为止为了解情况而做的实验。 应该注意的是、我尚未修改.bld 文件以考虑整个1GB RAM、因此这可能是我的问题。
在 uboot 中、我运行了范围为0xA0000000 - 0xC0000000的 mtest (跳过头256MB、不想吹掉 uboot、我不确定 uboot 正在使用多少内存)。 mtest 在使用不同测试数据进行5或6次迭代后未检测到任何问题。 不是一次彻底的测试、但我认为这是一个很好的开始。
只需将以下内容添加到 bootargs "mem=512M@0x90000000"、例如:
console=ttyO0、115200n8 rootwait=1 rw ubi.mtd=7、2048 rootfstype=ubifs root=allow0:rootfs init=/sbin/init mem=92M mem=512M@0x90000000 vram=ubitnotifyk.vpssm3_sva=0xBFD00000 ip=off 0x85meys=0Xmembegreq=0=0X85k=end_memcpegreq=0x85k.phys.cpuedrk=0=0X85k=end_memcpueds.cpueds.cpuedrk=0xcys.cpuedrk=0xcy=0
系统正常引导至命令提示符。 内核初始化打印稿表明它考虑了额外的内存:
内存:92MB 502MB 1MB = 595MB 总 内存:597996k/597996k 可用、20500k 保留、0K HIGHMEM
/proc/meminfo 还指示存在存储器:
总内存:598200KB
但是、当我开始加载 MCFW 固件时、我会遇到以下问题:
root@DM385_CBB:~/video#./remote_debug_client.out bff00000 & root@DM385_CBB:~/video#[c6xdsp ]远程调试共享内存@ m3video] 远程调试共享内存@ ffb05020 [m3vpss ]远程调试共享内存@ @~ sysb0385_video# 链接:mc2b0video* 2.21.02.10 SysLink 模块创建日期:2017年7月25日时间:12:58:38 root@DM385_CBB:~/VIDE#./FW_LOAD.OUT 启动 VPSS-M3 carbb_RDK_FW_m3vpss.xem3 [host]连接到从处理器1。 大小为21929984的 VMAP 分配失败:使用 vmalloc= 以增大尺寸。 无法处理虚拟地址00000000 PgD = ee718000 [000000000000]*PgD=aea20031、*Pte=00000000、*ppte=00000000 内部错误:oops:817 [#1] 最后 一个 cpfs 文件:链接的模块:syslink bat_eq_systiether 81xx nop_usb 命令 xtidrb : 0未被污染(2.6.37_DM385_CBB_0.80.00 #2) PC 位于__memzero+0x24/0x80 LR 位于0x0 PC:[ ] lr:[<000000000000>] PSR:20000013 sp:eea57d24 IP:00000000 fp:0000000a R10:00000005 R9:f1de8000 R8:06a85000 r7:f1d79000 R6:00000000 r6:014e8b48 r4 :eeaFlags 578 r3:00000r0:00000r0 r0 nzCv 模式下 FIQ 上的 IRQ SVC_32 ISA ARM 段用户 控制:10c5387d 表:ae718019 DAC:00000015 处理 FW_LOAD.OUT (pid:173、栈限制= 0xea562e8) 堆栈:(0xea57d24至0xea58000) 7d20: bf04a850 8e500000 003a429a 003a429a 00000001 bf0e4948 00000001 7d40:00000001 00000000 8e500000 8e50000 bf058094 014e8b48 00000000 7dEC60:00000001 bf0e4948 003a429a 8e500000 8e500000 bf058094 0b48 00000001d8000 bd00000001d8000 bf80000 04000001d00000001d8001 bf80000 080000 080000 04002 bd00000001d4000 bf8001 bf80000 08001 bf80000 080000 08001 b08001 b080000 0d4000 b0d4000 b0d4000 bd4000 bd8001 d4000 bf8001 d4000 bf8001 d8001 d800 f7400000 00000001 003a4480 00000000 00000002 00000020 f1deb000 f1deb000 7de0:00000000 03046000 f1d79000 f1d73000 00000000 00000000 00000000 bf0e4948 7e00:beeefaf4 bf04a274 f1de5000 000000000000000000000000 00000001d700000000 00000000 0e4000000 0e00000000 0e4000000 0e4000000 0e0004 bf40008000800080000:bee00000004 bf00000004 bf00000004 bf00000004 bf00000004 bf00004000 00000001d00000001 00000004 00000001 00000001 00000001 00000001 00000001 00000001 00000001 00000001 00000002 0000000 f1de5000 eea57f00 00000000 bf046b48 00000000 eea57f00 00000000 00000000 7e80 :beeefa90 00000000 c020e0a2 f1de5000 00000000 eea56000 00000000 bf048ed8 7ea0:00000000 eef57f00 000006e0 c01c01000 00000000 0001e01000 c0001 0001 000000 eeeee080000 048e1000008 00000008 0000eee1000008 0000eeeeeeeeee0008 00000001eee01000001 0001 0001 0001 0001 0001 0001 0001 0001 0001 0001 0001 0001 0001 000eeeeeeeeeeeeeee01000 :00000008 00000008 00000001 00000001 0001 00000000 ef19a9f0 eea56000 00000000 eecddc80 00000008 beeefa90 00000008 7f20:00000000 c00c407c ee918000 ee918000 00000025 c01b2440 ee99fbc0 c01b4bd8 7f40:0000009d 2d4eeeeeeeeeeee4000008 00000008 eeeeee0008 eeeee1000008 00000008 eeee0008 ee10000000008 eeeeee00080 eeeeee0008 eeee100000000080 e10000000008 e00080 ee0008 eeeeeeeeeeeee0008 e10000000008 ee00080 e00080 eee00080 eeeeee00080 e c0040604 c0040480 0001f1c4 00000000 00000008 c020e0a2 beeefa90 00000008 7fc0:0001f1c4 00000000 beeefa90 00000036 00000000 00000000 4011b000 beeefaf4 7fe0:c020e0a2 beeefa78 00000001eefa100 0001eafe1002 eafe0001e0001e0001eeeeeeee0008 eeeeeeeeeeeeeaf421-e1002eeeeeee0008eeeeee0008eeeeeeeeeeeeeeeee0421- eeeeeeeeeee
3.如果我将这个新的 Linux 内存部分减少到256MB (0x90000000 - 0xA0000000),我会遇到同样的问题
4.我最接近开始工作的是将 CMEM 位置移动到0x90000000 - 0xA0000000 (256MB)并从中进行分配。 出于某种原因、mcfw 固件未使用此配置进行损坏。 遗憾的是、由于我们的应用程序的结构、我们无法使用 CMEM 分配。
那么、我的问题是、增加 Linux 可用内存的正确方法是什么?
谢谢!