和菜鸟一起学android4.0.3源码之bluetooth移植心得

近几周一直在移植bluetooth和wifi,看书的时间也没,也没有时间思考一些问题,总结一些移植碰到的困难之类的。前天,终于蓝牙也可以传输文件,通过a2dp播放音乐了,wifi也可以扫描到网络,并可以连接了,因为平台中有本地的一个nfs挂载,所以要上外网,必须要sd卡启动才可以。

昨天的台风“海葵”在家乡登陆,虽然家里没出什么事,但是家乡遭受到这14级台风,肯定损失惨重啊。在此只能默默地祝福了。昨天还知道了一件事,早上通过验证了,不知为何心里空空的,也不想去实验室了,只想默默地听听音乐,静静地呆在,什么也不想做。说的有点多了,,只是我知道了,慢慢来,总会可以的,不用太在意这些。给人打工,永远是被剥削的。学长说的对,给多少工资,干多少活,再怎么努力,公司也不会给你太多的报酬,何必呢。所以把其他的时间都用来学习,用来创造美好的未来。好了,抱怨的够多了,下面还是开始谈谈我对android上bluetooth的移植吧。

对于bluetooth,linux底层驱动已经有了现成的驱动了,这里只要选上相应的就好了,在

中的选上相应的bluetooth和RF的两个选项

然后对于RF,选上两个就好

这里主要是bluetooth中有个RFKILL,用于判断那个按钮的开关状态的。

然后对于bluetooth

对于bluetooth device driver选上

因为开发的是uart的蓝牙,所以选上这个,又用了BCSP的协议。还有就是要准备好uart,如果只是用来传输文件的话,不用太高波特率的话,那么普通的uart就可以了,但是要达到上M的速度的话,必须要准备好高速uart。这里,要得到一个高速uart的节点,用于bluetooth的通信。好了,准备好了内核,接着就是android的事情了。

这里还有一个RFKILL的小小的说明,因为在创建android服务的时候才创建了rfkill0这个节点,然后就是节点里有个state和type,是在android中的蓝牙的硬件抽象层中要打开的,而这个有权限,所以后来在创建的时候就给他最高的权限了。具体在net/rfkill/core.c中,有个rfkill_dev_attrs,然后只要把修改为__ATTR(state, S_IRWXUGO, rfkill_state_show, rfkill_state_store), 和_ATTR(type, S_IRWXUGO, rfkill_state_show, NULL),这样就可以了。

接下来是android源码中的事情了,首先就是要在相应的平台下把蓝牙这个宏定义给选上。举个例子,比如说你的平台是samsung的Tuna平台,那么在device/Samsung/Tuna/BoardConfig.mk中有两个宏必须选上

BOARD_HAVE_BLUETOOTH := trueBOARD_HAVE_BLUETOOTH_BCM := true

这样再编译就可以了。

接着再看下android源码中对于bluetooth的一些代码主要的路径。

1、 Bluez的部分 /external/bluetooth/下

2、 bluez的适配层,也就是android上层通过jni往下调用驱动的硬件抽象曾。

/system/Bluetooth

3、 蓝牙的jni和java部分

这部分不用管太多,几乎不用去看,因为android上层一般都是木有问题的。

下面主要是对于那个选上的宏然后进行编译。首先是Bluez部分吧。主要是生成以下一个.so和应用程序

Libbluetoothd.so audio.a2dp.default.so bluetoothd hciconfig hcitool hciattach bccmd

然后再bluez的适配层了,mm后得到了libbluedroid.so。

最后就是那个jni层也是定义了相关的宏的。

frameworks/base/core/jni/android_server_BluetoothService.cpp中,可能已经编译过后会出问题,只要把所有的.o删除了重新mm后就可以了。这时会重新生成一个libandroid_runtime.so

编译基本上这样就OK了,剩下的就是去调试了。

如果困难是堵砖墙,拍拍它说你还不够高。

和菜鸟一起学android4.0.3源码之bluetooth移植心得

相关文章:

你感兴趣的文章:

标签云: