## 環境準備與編譯
個人使用的是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
~~~
啟動后的效果圖

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
~~~
其中第二項,就是我們的設備。
- 前言
- Freescale IMX6 Android (1): 使用HDMI作為Android顯示輸出的配置
- Freescale IMX6 Android (2): Android NFS啟動問題匯總
- Freescale IMX6 Android (3): 手動制作Android啟動用SD卡 省去MFGTOOLS燒寫
- Freescale IMX6 Android (5): APP通過JNI控制LED
- Freescale IMX6 Android (4): 基于TQIMX6 給Toolbox添加LED控制程序
- Freescale IMX6 Android (6): 向ServerManager中添加Service
- Freescale IMX6 Android (7): Android啟動動畫死循環 Home界面不出來與pid XXX exit 可能的原因匯總