移植adb到iMX6开发板(arm)
说明
交叉编译与本地编译
编译器和目标程序都是相同架构的编译过程,被称为本地编译
编译器和目标程序运行在不同架构的编译过程,被称为交叉编译,如编译器运行在x86架构平台上,编译生成ARM架构的可执行程序
静态库与动态库
-
静态库的扩展名一般为“.a”或“.lib”;动态库的扩展名一般为“.so”或“.dll”。
-
静态库在编译时会直接整合到目标程序中,编译成功的可执行文件可独立运行;动态库在编译时不会放到连接的目标程序中,即可执行文件无法单独运行。
所使用的平台
使用飞凌资料里提供的linux4.1.15+qt的ubuntu 12虚拟机作为编译环境
目的是将adb工具移植到arm平台【飞凌嵌入式 搭载NXP i.MX6Quad
的OKMX6Q-S3
开发板】
adb移植相关源码
adb移植有三个部分:交叉编译zlib,交叉编译openssl,交叉编译adb
android-tools源码使用study_record,里面包含了这两个库和adb的源码,我替换了其中的openssl,使用的是openssl-1.0.0s.tar.gz,1.0.0以其他字母结尾的应该也可以,不同字母对应不同小版本迭代,修复bug之类的
交叉编译zlib
解压进入zlib目录
tar zxvf zlib-1.2.11.tar.gz
cd zlib-1.2.11
执行飞凌提供的环境变量,主要是export了一些配置,如CC=,CPP=等等
. /opt/fsl-imx-x11/4.1.15-2.1.0/environment-setup-cortexa9hf-neon-poky-linux-gnueabi
然后config会根据刚刚export的环境变量更换CC等参数,可以查看makefile确认,如果configure错误,可以查看configure.log文件,里面有详细错误信息
./configure --prefix=/home/workspace/build/zlib
编译
make
make install
完成后可以在/home/workspace/build/下找到zlib,在lib目录下可以看到.so文件,是动态库
交叉编译openssl
下载openssl-1.0.0s.tar.gz压缩包,放入虚拟机,解压,进入文件夹
tar zxvf openssl-1.0.0s.tar.gz
cd openssl-1.0.0s/
执行飞凌提供的环境变量
. /opt/fsl-imx-x11/4.1.15-2.1.0/environment-setup-cortexa9hf-neon-poky-linux-gnueabi
配置
./Configure --prefix=/home/workspace/build/openssl os/compiler:arm-poky-linux-gnueabi-gcc
打开makefile,把里面的CC= $(CROSS_COMPILE)arm-poky-linux-gnueabi-gcc
改成CC= $(CROSS_COMPILE)gcc
,重复了
编译
make
make install
在/home/workspace/build/下可以找到openssl,config没有shared参数,出来的是静态库
交叉编译adb
进入/android-tools-4.2.2/core/adb下 打开makefile文件,注释掉CC字段,修改zlib openssl 头文件与库搜索路径,包括CPPFLAGS和LDFLAGS,对应交叉编译时对应的prefix字段
完整的makefile如下
|
|
执行环境变量
. /opt/fsl-imx-x11/4.1.15-2.1.0/environment-setup-cortexa9hf-neon-poky-linux-gnueabi
编译
make
将得到的adb可执行文件用u盘拷贝到开发板上,运行./adb即可
这里不需要拷贝zlib和openssl到开发板,openssl是静态链接不用导入板子,zlib是动态的,但在板子上已经有了,可以在开发板/lib目录下查看,所以不用管