1、合众达dm6446 开发板128M 内存分配如下:
2、经过系统测试,Linux至少需要35M内存才能正常运行程序。
3、为了增大DDRALGHEAP内存大小,修改的内存图表如下:
4、修改步骤如下:
(1) 重新生成dsplinkk.ko
a. cd /opt/dvevm_1_20/dsplink_1_30_08_02/packages/dsplink
b. gedit config/all/CFG_Davinci.TXT
c. 找到"RESUMEADDR"处, 缺省下会看到其值为0x8FF00020. 将之改变成值(RESET_VECTOR段起始地址值 + 0x20);
d. 找到“RESETVECTOR”处, 将其值修改memory map中RESET_VECTOR段的起始地址值;
e.找到"MEMTABLE0"的入口处. 在这你会发信某些entries与你的memory map类似,而有些却不同. 找到其中的DSPLINKMEM, RESETCTRL(即RESET_VECTOR), DDR. 将它们的地址和尺寸修改成与你的memory map相同(其中ADDRDSPVIRTUAL和ADDRPHYSICAL相同), 无需担心这里找不到DDRALGHEAP, 因为DSPLink不需要知道它的值, 原因是DSPLink的内容只是在DSP被启动但尚未被ARM访问阶段存在. 从这里可见,只有DDR等以下的三个段发生改变时才需要重新编译dsplink.ko
f. 设置环境变量:source etc/host/scripts/Linux/dsplinkenv
g. 编译模块:gcc –C gpp/src
gcc –C dsp/src
h. 生成可执行文件路径: gpp/export/BIN/Linux/Davinci/RELEASE
(2)修改DSP Sever端的.tcf配置文件中的memory map数组,如下:
var mem_ext = [
{
comment: "DDRALGHEAP: off-chip memory for dynamic algmem allocation",
name: "DDRALGHEAP",
base: 0x83A00000,
len: 0x3C00000, //60MB
space: "code/data"
},
{
comment: "DDR: off-chip memory for application code and data",
name: "DDR",
base: 0x87600000,
len: 0x800000, //8MB
space: "code/data"
},
{
comment: "DSPLINK: off-chip memory reserved for DSPLINK code and data",
name: "DSPLINKMEM",
base: 0x87E00000,
len: 0x00100000, // 1MB
space: "code/data"
},
{
comment: "RESET_VECTOR: off-chip memory for the reset vector table",
name: "RESET_VECTOR",
base: 0x87F00000,
len: 0x00000080,
space: "code/data"
},
];
(3)修改loadmodules.sh中CMEM起始地址、和介绍地址
insmod cmemk.ko phys_start=0x83200000 phys_end=0x83A00000 pools=1x3145728,6x829440,1x61440,1x10240
(4)修改Linux内存参数
$ Setenv bootargs mem=50M console=ttyS0,115200n8 root=/dev/nfs noinitrd rw ip=192.168.1.113:192.168.1.1:255.255.255.0 nfsroot=192.168.1.112:/opt/nfs video=dm6446fb:output=pal
$ saveenv