手动编译移植库/软件的一般方法
经常需要移植各种软件包,标准的做法是使用发行版定制工具,如Yocto,详见Yocto的使用实例。但有些情况下,我们不得不手动去移植。
本文以移植openobex1.3为例,展现了移植的方方面面。
参考:http://blog.csdn.net/hclydao/article/details/51451725
1.理清依赖关系
- 我们为了获得目标库/程序,往往需要移植数个被依赖的库。以openobex1.3为例:
openobex
|
|--bluez-libs
|__bluez-utils
|
|--libusb
|__glib
| |__zlib
| |
| ?//此处视版本而定,有时glib会和dbus互相依赖
|__dbus
|__expat
- 通过网络资料可以知道各个库的依赖关系,如果网上没有也没关系,可以先编译,通过报错信息也可获知依赖内容
2.确定各个库的版本
- 这是最讲究的部分,库的版本直接决定了移植是否能够成功。一般原则如下
- 库的版本发布时间最好比开发环境稍早几年,比如开发板的内核是3.1x版本的,则bluez适合使用3.36版本
- 库的依赖库最好比自己稍旧一些,但也不能旧太多,比如expat就应该比dbus的版本旧一点
- 如果网络上有现成的移植方案,尽量完全套用,可以极大的提高移植成功率
- 基于以上原则,这里软件包选用的版本为
bluez-libs-3.36
expat-2.1.0.
dbus-1.0.2
glib-2.24.2
bluez-utils-3.36
libusb-1.0.9
3.配置内核
- 为了让obex、bluez正常运行,仅仅移植库还不够,内核方面的支持也是必不可少的
- 使用menuconfig
首先令内核支持bluetooth,打开menuconfig
进入Device Drivers ---> USB support
选中host相关的选项
以及USB Physical Layer drivers子目录下的选项
进入Networking support
<*> Bluetooth subsystem support
进入Networking support ---> Bluetooth subsystem support
<*> RFCOMM protocol support
[*] RFCOMM TTY support
<*> BNEP protocol support
[*] Multicast filter support
[*] Protocol filter support
<*> HIDP protocol support
进入Networking support ---> Bluetooth subsystem support ---> Bluetooth device drivers
<*> HCI USB driver
< > HCI SDIO driver (NEW)
< > HCI UART driver (NEW)
<*> HCI BCM203x USB driver
<*> HCI BPA10x USB driver
< > HCI BlueFRITZ! USB driver (NEW)
< > HCI VHCI (Virtual HCI devic