分类: 嵌入式
2011-07-29 14:14:41
cmemk.ko的编译过程:
首先,明确一点,修改了memory map,并不需要编译cmemk.ko的,我修改多次map,编译多次,生成的cmemk.ko都是一样的,从目录
下的文件insmod_rmmod.sh可以看出,修改cmem段大小和地址后,只需要在loadmodul.sh里面修改即可,将被当成参数传递到cmemk.ko。
1. 进入目录,打开readme.txt, 里面粗略介绍了编译方法;
2. 根据readme.txt, 修改当前目录下的Rules.make内容:
EXEC_DIR=/opt/mv_pro_4.0/montavista/pro/devkit/arm/v5t-le/target/opt/dvevm (指定执行路径)
MVTOOL_PREFIX=/opt/mv_pro_4.0/montavista/pro/devkit/arm/v5t-le/bin/arm_v5t_le- (交叉编译器的安装路径)
LINUXKERNEL_INSTALL_DIR=/nfshost
3. make
4. make install
=========================================================================
dsplink.ko的编译:
DSPLink是一个软件组件,用于帮助ARM和DSP间通信. 1.30版本DSPLink,在DSP memory map有改动时,需rebuild整个DSPLink. 而对1.40版本DSPLink,它更为动态,无需rebuild.
>转到(cd)目录:
>以编辑模式打开DSPLink配置文件: config/all/CFG_Davinci.TXT;
>找到"RESUMEADDR"处, 缺省下会看到其值为0x8FF00020. 将之改变成值(RESET_VECTOR段起始地址值 + 0x20);
>找到“RESETVECTOR”处, 将其值修改为memory map中RESET_VECTOR段的起始地址值;
>找到"MEMTABLE0"的入口处. 在这你会发信某些entries与你的memory map类似,而有些却不同. 找到其中的DSPLINKMEM, RESETCTRL(即RESET_VECTOR), DDR. 将它们的地址和尺寸修改成与你的memory map相同(其中ADDRDSPVIRTUAL和ADDRPHYSICAL相同), 无需担心这里找不到DDRALGHEAP, 因为DSPLink不需要知道它的值, 原因是DSPLink的内容只是在DSP被启动但尚未被ARM访问阶段存在. 从这里可见,只有DDR等以下的三个段发生改变时才需要重新编译dsplink.ko。
>在Linux host上编辑文件: make/Linux/davinci_mvlpro4.0.mk, 它包含DSPLink对ARM的build指令. 编辑该文件的以下域,使之与自己的DVEVM相符. 注意Linux kernel 和ARM编译工具的所在位置.
a. BASE_BUILDOS:
b. BASE_CGTOOLS:
>在Linux host上编辑文件: make/DspBios/c64xxp_5.xx_linux.mk, 它包含DSPLink对DSP的build指令. 编辑该文件的以下域,使之与自己DVEVM的DSP/BIOS安装相符.
a. BASE_SABIOS:
b. BASE_CGTOOLS: <在linux上运行的C64P编译工具所在位置 > (该目录结束方式不定,但总是包含子目录"bin"、"include"、"lib")
>设置环境变量DSPLINK到以下目录:
>在当前目录(即 $DSPLINK)下,type:
gmake -C gpp/src
gmake -C dsp/src
>在目录gpp/export/BIN/Linux/Davinci/RELEASE/dsplinkk.ko下找到新编译的DSPLink kernel模块,将之拷贝到自己的DVEVM文件系统。 注意:以上步骤应该是针对你所配置的mem-map对应的一个server,如果前面build了多个servers,则这里build DSPLink就不再对它们起作用了.