一、准备工作
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培训