拿到TI的CompanyName_toolchain_built_Distribution_3_5.tar.gz,里面有Linux平台下使用自定义交叉编译链编译的蓝牙协议栈的库文件,以及里面一些应用的例子程序,可以方便开发蓝牙应用时参考。
解压得到如下文件结构:
build文件夹下有如何编译SDK中的sample程序的例子的说明文件:Buildinstructions。
1,将setup-bt.sample复制一份,改名为setup-bt
2,修改其中的toolchain和kernel source的路径:
# Path to local toolchain installation
export TOOLCHAIN_PATH=/opt/poky-gen7/version1.0/sysroots/
# Path to SDK compiled kernel
export KERNEL_PATH=~/linux/4.1.15-r0/build/
这需要一份Linux kernel source,在自己的build环境中找到使用的kernel source。
比如yocoto编译的话,kernel source路径就是:
yocto-bsp/build/tmp/work/proj-poky-linux-gnueabi/linux/4.1.15-r0/build
可以拷贝一份,或者直接指定这个路径。
3,然后根据需要修改build/proj文件夹下的*.mak文件。
因为我们的toolchain是自己定制的,所以检查下toolchain-defs.mak文件是否需要修改:
TOOLCHAIN_PATH_NATIVE=$(TOOLCHAIN_PATH)/x86_64-pokygen7sdk-linux/
TOOLCHAIN_PATH_TARGET=$(TOOLCHAIN_PATH)/cortexa7t2hf-neon-poky-linux-gnueabi
TOOLCHAIN_PREFIX=arm-poky-linux-gnueabi
ARCH=arm
这里面是toolchain下面的交叉编译工具链的PC host平台的工具,以及目标平台的工具。
还有LDFLAGS修改:
LDFLAGS+=-lpthread -lm -lrt --sysroot=$(TOOLCHAIN_PATH)/cortexa7t2hf-neon-poky-linux-gnueabi -no-pie
改为:
LDFLAGS+=-lpthread -lm -lrt --sysroot=$(TOOLCHAIN_PATH)/cortexa7t2hf-neon-poky-linux-gnueabi -no-pie -Wl,--dynamic-linker=/lib/ld-linux-armhf.so.3
要手动指定dynamic linker的库,这个库是在目标板子上的,然后编出来的例子程序才能在目标板上执行。
5,然后在build目录下执行:
$ source ./setup-bt
$ source ./configure.sh
$ make
我这个版本提示有个错误,
../BluetopiaPM/Bluetopia/profiles_gatt/sample/LinuxSPPDMMulti/LinuxSPPDMMulti.c:38:10: fatal error: PLATVER.h: No such file or directory
38 | #include "PLATVER.h" /* Bluetopia over STM32 platform Version. */
找到这个头文件在\BluetopiaPM\include里,放到\BluetopiaPM\Bluetopia\include文件夹里,然后编译OK。
生成的Sample的程序,在\BluetopiaPM\bin和\BluetopiaPM\Bluetopia\bin目录下。
---------------------------------------------
还有一些准备工作要做。
在目标板上还需要添加一些蓝牙协议栈要使用的文件。
/lib/firmware/TIInit_6.12.26.bts
/home/root/tibt/config
这两个文件,第一个是蓝牙协议栈启动所需要的硬件配置,我手里芯片上的内容是:
nshutdown_gpio=18
tty=/dev/ttymxc2
flow_cntrl=1
baud_rate=115200
第一行表示蓝牙的reset pin,用来重启蓝牙芯片。
第二行是蓝牙使用的UART资源。
第三行表示使用流控。
第四行表示UART波特率,通常启动后是115200,为了提高蓝牙数据吞吐率,也可以根据实际硬件信号情况提升波特率,比如改成3000000。
第二个文件是蓝牙启动后,会通过HCI把bts文件发送到蓝牙controller芯片,更新蓝牙固件,比如更新前显示蓝牙协议栈版本是Bluetooth Core Specification 4.1,这个文件更新完就变成了Bluetooth Core Specification 4.2。
--------------------------------------------
在\BluetopiaPM\Bluetopia\bin里找到想要使用的例子程序,比如LinuxHOGP。
这个是BLE HID的profile的应用的例子程序。
将这个文件copy到目标板上:(目标板上有SSH server, 假如IP设置是192.168.10.10,使用scp来传递文件)
$ scp ./LinuxHOGP root@192.168.10.10:/tmp
$ /tmp/LinuxHOGP
然后就能运行这个程序,来测试蓝牙功能了。