DSP

beagleboard上dvsdk移植----ARM调用DSP过程详解

2019-07-13 10:41发布

一、准备工作

        1、首先下载正确的dvsdk,在TI官网上寻找后最新的dvsdk,这里有TI的关于omap37x的SDK。最新的sdk为 dvsdk_dm3730-evm_04_03_00_06_setuplinux  还有一个为dvsdk_dm3730-evm_04_02_00_06_setuplinux,这个关于omap37x系列的两个SDK,同时beagleboard也有一个自己的sdk因为使用的beagleboard上的内核,这里编译驱动的时候需要指定内核,beagleboard上使用的内核为ti-sdk-beagleboard-05.04.00.00-Linux-x86-Install。这个为beagleboard上的sdk。首先安装beagleboard上的sdk,安装的默认目录为/usr/local/ti-sdk-beagleboard。其中内核源代码的目录为/usr/local/ti-sdk-beagleboard/board-support,这个目录下有内核和u-boot的源代码。需要移植的sdk为dvsdk_dm3730-evm_04_03_00_06_setuplinux。也需要将这个SDK安装上去。这两个SDK的安装都需要图形界面,同时后者的安装需要交叉编译器的arm-none-linux-gnueabi- 这里安装的默认目录为/usr/local/arm/arm-2009q1/bin可以写一个shell脚本,每次开启一个终端需要source这个脚本。 #! /bin/sh export PATH=$PATH:/usr/local/arm/arm-2009q1/bin开启一个终端后source setenv.sh(同时记得修改权限) 在完成以后可以通过在终端输入arm+tab键验证是否有这个编译器出现。     2、修改makefile文件,因为编译模块需要指定内核目录所在目录,这里需要指定的目录已经在上边介绍。          同时需要将这个内核编译,或者出现某个问题可以参考这个文章,或者直接编译linux-3.0.8-r110b内核。然后修改makefile,在/usr/local/dvsdk的顶层目录下有makefile文件,但是makefile文件的内容非常少,因为文件的第一条中有include Rules.make。所以很多变量都在这个文件中定义,这里指需要修改内核目录即可 # Where the PSP is installed. PSP_INSTALL_DIR=$(DVSDK_INSTALL_DIR)/psp # The directory that points to your kernel source directory. LINUXKERNEL_INSTALL_DIR=/usr/local/ti-sdk-beagleboard/board-support/linux-3.0.8-r110b/ #LINUXKERNEL_INSTALL_DIR=$(DVSDK_INSTALL_DIR)/psp/linux-2.6.37-psp04.02.00.07.sdk #KERNEL_INSTALL_DIR=$(LINUXKERNEL_INSTALL_DIR) # wang # Where the local power manager is installed. LPM_INSTALL_DIR=$(DVSDK_INSTALL_DIR)/local-power-manager_1_24_03_10_eng # Where the development headers and libs are installed. LINUXLIBS_INSTALL_DIR=$(DVSDK_INSTALL_DIR)/linux-devkit/arm-arago-linux-gnueabi/usr修改结束在顶层目录编译 make help 查看make指令都有什么内容 make cmem 编译共享内存模块,这个是ARM调用DSP必须使用的模块 make dsplink  编译ARM调用DSP模块 make lpm 编译电源管理模块 编译的顺序也是有讲究的,不能乱调顺序。三个模块编译成功以后可以加载模块,使用脚本文件 CMEM_MODPARAMS="phys_start=0x9E100000 phys_end=0x9E700000 pools=10x614400" # insert CMEM driver, using two blocks of memory # # To use this command, the kernel must be configured such that it does not # use the internal memory located at 0x40200000 - 0x4020EFFF. # # block 1: 0x40200000 - 0x4020EFFF (60 KB), Internal Memory # pool: 60 KB, 15 x 4 KB buffers (4 KB minimum size buffer allowed) # #CMEM_MODPARAMS="$CMEM_MODPARAMS phys_start_1=0x40200000 phys_end_1=0x4020F000 pools_1=15x4096 allowOverlap=1" #CMEM_MODPARAMS="$CMEM_MODPARAMS phys_start_1=0x40200000 phys_end_1=0x4020F000 pools_1=15x4096 allowOverlap=1" rmmod rfcomm rmmod ircomm_tty rmmod ircomm rmmod irda rmmod hidp if [ -e cmemk.ko ] then insmod cmemk.ko $CMEM_MODPARAMS else modprobe cmemk $CMEM_MODPARAMS fi # Allow cmem driver to be used by all users if [ -e /dev/cmem ] then chmod 777 /dev/cmem fi sleep 1 rm /dev/cmem -f mknod -m 0777 /dev/cmem c 246 0 # insert DSP/BIOS Link driver if [ -e dsplinkk.ko ] then insmod dsplinkk.ko else modprobe dsplinkk fi # Allow dsplink driver to be used by all users if [ -e /dev/dsplink ] then chmod 777 /dev/dsplink fi sleep 1 rm /dev/dsplink -f mknod -m 0777 /dev/dsplink c 230 0 # insert Local Power Manager driver if [ -e lpm_omap3530.ko ] then insmod lpm_omap3530.ko else modprobe lpm_omap3530 fi # Allow lpm driver to be used by all users if [ -e /dev/lpm0 ] then chmod 777 /dev/lpm* fi sleep 1 rm /dev/lpm0 -f mknod -m 0777 /dev/lpm0 c 245 0 查看加载结果是否成功。

二、ARM调用DSP的例子



留给自己(没有参考价值,因为看不懂) 写在前面: 首先讲述了板子的启动过程,配置好各种东西。 安装各种SDK    Ti的SDK是在图像化界面安装的,如果自己在putty或者其他ssh工具上安装,可能不会成功。 但是在安装dvsdk的时候需要注意几个地方,首先安装一个交叉编译器,arm-none-linux-gnueabi-gcc 编译器,不过这个编译器在3327的项目中也是用过,只不过那个版本是2007ql,这里是用的是2009ql. Beagle-xm的启动       使用的内核是2013年8月份TI培训配置好的内核和文件系统,只不过这个文件系统好像需要很多配置,如果是第一次使用nfs挂在文件系统,内核启动以后需要和文件系统结合,结合以后需要配置很多模块,这是第一次启动的结果。内核的编译和文件系统的配置在培训的文档中都有介绍。     使用TI培训的内核和文件系统需要很多注意的地方。第一,使用的ubuntu一定为10.04 LTS版本,因为在安装omap 3730的sdk的使用需要这个版本,一方面是为了后边的另一个板子(omap3730 这个也是ARM+DSP 同样需要看懂ARM如何调用DSP的),另一方面是为了让beagle使用这里的工程,因为使用过beagle的人说可以使用omap3730的SDK来完成beagle上的ARM调用DSP。 板子的运行: 最终使用了另一个版本的SDK,再编译cmemk.ko、dsplink.ko、   Make cmem make cmem_install Make dsplink make dsplink_install make lpm  make lpm_install 编译模块的顺序是有讲究的,这三个顺序不能更改,/usr/local/dvsdk/dsplink_1_65_01_05_eng/dsplink/gpp/export/INCLUDE/Linux/OMAP3530/usr这个目录下的头文件都是在编译完dsplink后才产生的。然而lpm目录需要使用这些头文件。 主要的目录介绍:    目录/home/beagle下的所有目录都是为了在beagleboard上实现ARM调用DSP这个目标而准备的。   其中rootfs是文件系统,这个文件系统是TI暑期培训的文件系统,SDK、内核也是培训使用的东西(来源未知),其中beagle是从SD卡启动启动的资料为培训资料。    SDK目录保存了beagleboard和OMAP37X系列的SDK。其中两个位OMAP3730的SDK,这里使用最新的SKD,一个为beagleboard上的SDK。 Tools目录下为交叉编译器。 安装过后目录介绍: 安装的连个SDK目录都在/usr/local目录下,其中一个目录dvsdk是omap3730的目录。Ti-sdk-beagleboard目录为beagleboard的sdk安装过后的目录。 其中omap3730的内核源代码的目录为./psp下,这里有u-boot和内核源代码 /usr/local/dvsdk/linuxutils_2_26_02_05/packages/ti/sdo/linuxutils/cmem/src/module/cmemk.ko这个目录为生成的ko文件的目录,将来生成的所有ko文件都在这个目录下    /root/install/dm3730/lib/modules/3.0.8/kernel/drivers/dsp将来install的所有目录都在这个目录下。 实现过程的步骤:      使用arm-none-linxu-gnueabi-交叉编译器,但是使用omap的SDK共同协作完成beagle上的ARM调用DSP任务,但是omap3730上的sdk上也需要制定交叉编译器的位置,这个编译器和beagle上的交叉编译器使用的不同. 其中omap3730需要的交叉编译器安装在/usr/loca/arm目录下,和beagle相关的SDK目录在/usr/local/ti-sdk-beagleboard。和omap3730相关的SDK在/usr/local/dvsdk目录下。    (注意:记忆中在编译beagleboard内核的时候使用的是另外一个编译器,) 参考内容:    参考博客http://blog.csdn.net/yusiguyuan/article/details/11567095    参考文档 TI培训