多应用+插件架构,代码干净,二开方便,首家独创一键云编译技术,文档视频完善,免费商用码云13.8K 广告
## 环境准备与编译 个人使用的是Ubuntu 12.04 X64,针对环境的配置,百度即可。板子使用的是TQIMX6Q。 ### lunch目标 但是,编译的时候使用的是TQ提供的脚本build_sh,根据这个脚本,可以看到lunch的目标是sabresd_6dq: ~~~ $ echo $TARGET_PRODUCT sabresd_6dq ~~~ 即,TQIMX6的Android lunch目标其实使用的是sabred板子的目标,并没有自己添加lunch target,编译完成后,也没有userdata.img: ~~~ 10:50 hexiongjun:TQIMX6_android-4.3 $ echo $OUT /home/hexiongjun/iMX6Q/TQIMX6_android-4.3/out/target/product/sabresd_6dq 10:51 hexiongjun:TQIMX6_android-4.3 $ ls -l $OUT/*.img -rw-r--r-- 1 hexiongjun hexiongjun 5314560 Dec 4 18:37 /home/hexiongjun/iMX6Q/TQIMX6_android-4.3/out/target/product/sabresd_6dq/boot.img -rw-rw-r-- 1 hexiongjun hexiongjun 242287 Dec 4 18:37 /home/hexiongjun/iMX6Q/TQIMX6_android-4.3/out/target/product/sabresd_6dq/ramdisk.img -rw-rw-r-- 1 hexiongjun hexiongjun 794534 Dec 4 18:37 /home/hexiongjun/iMX6Q/TQIMX6_android-4.3/out/target/product/sabresd_6dq/ramdisk-recovery.img -rw-r--r-- 1 hexiongjun hexiongjun 5865472 Dec 4 18:37 /home/hexiongjun/iMX6Q/TQIMX6_android-4.3/out/target/product/sabresd_6dq/recovery.img -rw-r--r-- 1 hexiongjun hexiongjun 293601280 Dec 4 18:37 /home/hexiongjun/iMX6Q/TQIMX6_android-4.3/out/target/product/sabresd_6dq/system.img 10:53 hexiongjun:TQIMX6_android-4.3 $ ~~~ 同时也编译了uboot与uImage。 ### 编译可能出现的问题 Android编译使用的是自带的ToolChain,自然不需要再自己配置。但是Host PC中的GCC也需要注意版本,否则会出现问题: ~~~ host C: libcrypto_static <= external/openssl/crypto/bio/b_sock.c external/openssl/crypto/bio/b_print.c:842:2: internal compiler error: Segmentation fault Please submit a full bug report, with preprocessed source if appropriate. See <http://gcc.gnu.org/bugs.html> for instructions. make: *** [out/host/linux-x86/obj/STATIC_LIBRARIES/libcrypto_static_intermediates/crypto/bio/b_print.o] Error 1 ~~~ 看log输出,还以为是Host GCC的Bug,换了多个版本的GCC之后,问题依旧,后来发现make时指定submake过多,将make -j8改成了make libcrypto就好了,比较怪异。 HDMI硬件配置 因为没有TFT屏幕,所以使用了以前用过的改装过的笔记本屏幕,参考我以前的博文:[废物利用: 动手将笔记本的显示器改成多功能显示器 可用于电视盒子以及嵌入式开发](http://blog.csdn.net/sy373466062/article/details/50184341) HDMI显示输出的配置 因为我们使用的是HDMI显示输出,因此需要配置参数,这个参数通过uboot的bootargs env传递到内核中去,使用的笔记本屏幕分配率是1366X768,找了一个接近的1280X720,显示部分的参数如下: ~~~ video=mxcfb0:dev=hdmi,1366x768MM@60,if=RGB24,bpp=32 video=mxcfb1:off video=mxcfb2:off fbmem=48M ~~~ 按需更改。 ## Android的NFS启动 配置好NFS Server与TFTP Server,可以参考我以前的博文:[Ubuntu下nfs server与tftp server的搭建](http://www.hexiongjun.com/?p=75) Android的NFS可以先使用TQ提供的文件系统。如果需要使用自己编译出来的,请看下一篇博文。 然后就是启动板子,在uboot中配置环境变量与启动: ~~~ set serverip 192.168.2.100 set ipaddr 192.168.2.111 set bootargs 'console=ttySAC0,115200n8 root=/dev/nfs nfsroot=192.168.2.100:/home/hexiongjun/nfs-imx6/Android ip=192.168.2.120 debug ignore_loglevel init=/init vmalloc=400M androidboot.console=ttySAC0 androidboot.hardware=freescale video=mxcfb0:dev=hdmi,1280x720MM@60,if=RGB24,bpp=32 video=mxcfb1:off video=mxcfb2:off fbmem=48M' tftp 0x10800000 192.168.2.100:imx6/uImage;bootm 0x10800000 ~~~ 启动后的效果图 ![](https://box.kancloud.cn/2016-05-05_572afc960944a.jpg) ADB的配置 在TQIMX6上面开启开发者选项,并启用USB调试,然后在出现的运行USB调试选项中确定。 在Linux端中,添加vendor ID到android adb配置中: ~~~ echo "0x0451" > ~/.android/adb_usb.ini ~~~ 然后用USB线连接板子与PC,使用adb 查看是否连接成功: ~~~ 17:51 hexiongjun:Con $ adb devices List of devices attached emulator-5554 device 0123456789ABCDEF device ~~~ 其中第二项,就是我们的设备。