android編譯環境的搭建和編譯(全志A20平臺)

android編譯環境搭建和編譯
 
  • 第一部分,平臺說明
    1,編譯平臺:I7-4770+16G-DDR3-1600+500G-HD.
    2,硬件平臺:全志 A20
    3,軟件平臺:ubuntu12.04LTS+android4.2(全志SDK)
 
 
  • 第二部分,android編譯環境搭建
 
一,開始構建Linux編譯 環境

1,android官方推薦安裝ubuntu12.04LTS。html

2,編譯Gingerbread (2.3.x)以上android版本(包含主流版本),都應使用64位系統環境;安裝ubuntu-12.04LTS-AMD64而不是ubuntu-12.04LTS-x86。java

3,在虛擬機上是能夠編譯android的,可是要編譯android代碼樹,至少要保證16G的RAM或者SWAP和很多於30G的磁盤空間。python

4,還須要如下工具:Python 2.6-2.7,GNU Make 3.81-3.82,JDK 6(sun-java6-jdk),Git 1.7 or newer。linux

 
二,安裝sun-java6-jdk包
 
1,下載bin文件
下載oracle java 6 jdk 64-bit(即sun-java6-jdk)
$ wget --no-cookies --header "Cookie: gpw_e24=http%3A%2F%2Fwww.oracle.com%2F" http://download.oracle.com/otn-pub/java/jdk/6u45-b06/jdk-6u45-linux-x64.bin
$ chmod u+x jdk-6u45-linux-x64.bin
2,安裝的過程
$ ./jdk-6u45-linux-x64.bin
$ sudo mv jdk1.6.0_45 /opt
$ sudo update-alternatives --install "/usr/bin/java" "java" "/opt/jdk1.6.0_45/bin/java" 1
$ sudo update-alternatives --install "/usr/bin/javac" "javac" "/opt/jdk1.6.0_45/bin/javac" 1
$ sudo update-alternatives --install "/usr/lib/mozilla/plugins/libjavaplugin.so" "mozilla-javaplugin.so" "/opt/jdk1.6.0_45/jre/lib/amd64/libnpjp2.so" 1
$ sudo update-alternatives --install "/usr/bin/javaws" "javaws" "/opt/jdk1.6.0_45/bin/javaws" 
3,ubuntu可能還有其餘的jdk,下兩行就是選擇默認的JDK版本(sun-java6-jdk) 
$ sudo update-alternatives --config java
$ sudo update-alternatives --config javac
4,設置JAVA_HOME環境變量
$ export _JAVA_HOME=/opt/jdk1.6.0_45/
 
        有個一點注意:因爲ubuntu社區已經對sun-java6-jdk不提供支持了,因此,網上那些添加源的作法已經失效了。不用再嘗試了。本方法經過wget命令從oracle下載bin文件,能夠離線安裝更加具備廣泛效應。
        
        5,可能出現的問題:因爲 sun-java6-jdk最終安裝在/opt目錄下面,在編譯android過程當中可能出現,找不到jar命令的狀況,這時就應當爲jar在/usr/bin下面建立一個連接文件。
        5.1解決未發現jar的方法
                             $ cd /usr/bin
             $ sudo ln -s -f /opt/jdk1.6.0_30/bin/jar  
 
 
        5.2解決未發現javadoc的方法
            $ cd /usr/bin
            $ sudo ln -s -f /opt/jdk1.6.0_30/bin/javadoc 
 
三,安裝依賴包
    在安裝過程當中可能出現依賴關係的問題;一旦出現了,能夠嘗試一個個的安裝相應的依賴包。
de style="line-height: 14px;  font-size: 18px;"  >$ sudo apt-get install git gnupg flex bison gperf build-essential \
  zip curl libc6-dev libncurses5-dev:i386 x11proto-core-dev \
  libx11-dev:i386 libreadline6-dev:i386 libgl1-mesa-glx:i386 \
  libgl1-mesa-dev g++-multilib mingw32 tofrodos \
  python-markdown libxml2-utils xsltproc zlib1g-dev:i386de>
de style="line-height: 14px;  font-size: 18px;"  >
$ sudo ln -s /usr/lib/i386-linux-gnu/mesa/libGL.so.1 /usr/lib/i386-linux-gnu/libGL.sode>
四,搭建完成構建
 
 
  • 第三部分 SDK包的徹底編譯
 
一,SDK代碼說明
    SDK包包含2個部分,lichee部分代碼樹和android部分
 
二,編譯lichee部分代碼樹
     以下代碼:
$ cd lichee
$ ./build.sh -p sun7i_android
    編譯開始前,將mkimage複製到/usr/bin下面;並將文件的權限改成0777。
 
 
 
三,編譯android部分代碼樹
    以下代碼:
$ cd ../android4.2.1
$ source build/envsetup.sh
$ lunch //選擇wing_k70-eng
$ extract-bsp    //拷貝內核和模塊到android中;  
$ make -j16
$ pack    //徹底打包 //在lichee\tools\pack路徑下生成了固件sun7i_android_wing-k70.img
 
 
四,說明
    1,使用time命令組合編譯,就能夠獲得編譯所要的時間。
    2,使用pack命令打包後,全部的img造成一個固件(sun7i_android_wing-k70.img),包括內核,uboot,文件系統和android。這個新的img的存放路徑是:lichee\tools\pack\sun7i_android_wing-k70.img
 
  • 第四部分 固件的燒寫( 燒寫sun7i_android_wing-k70.img )
一,尋找固件
打包(pack)完後,在lichee/tools/pack目錄下面有一個文件sun7i_android_wing-k70.img,該文件就是咱們要燒錄到板子的固件。
 
二,固件說明
固件是徹底打包;已經將其餘的*.img文件封包到了sun7i_android_wing-k70.img中。因此,無需在燒錄別的文件了。
 
三,固件燒寫
    1,使用PhoenixSuit燒寫固件。
 
在預覽中打開sun7i_android_wing-k70.img
 
 
    2,長按其餘按鍵(非電源鍵),插入USB,以後不斷按壓電源鍵,這樣PhoenixSuit會提示在燒寫固件。在過程當中,因爲USB可能接觸不良,要有耐心,多重複幾回。固件大,下載過程長。
 
 
3,燒寫成功後,從新開啓平板電腦。燒寫的固件可能會與硬件不匹配,可是經過命令是能夠查看,系統是否已經運行。
 
  • 第五部分  只升級內核與文件系統的方法(燒寫boot.img)
一,燒寫boot.img的說明
    boot.img文件,包含內核與文件系統,可是未能將內核的模塊加載進入boot.img,這點必定要注意。
 
二,燒寫過程
 
1,編譯代碼樹
第一步,編譯lichee
$ cd lichee
$ ./build.sh -p sun7i_android
第二步,編譯android
$ cd ../android4.2.1
$ source build/envsetup.sh
$ lunch //選擇wing_k70-eng
$ extract-bsp
$ make bootimage
注意:「make -j16」和「pack」不用。在執行這些命令後,內核印象文件a20_wing4.2_to_chenwenjie/android4.2.1/out/target/product/wing-k70/boot.img時間戳會發生更新。而後,就能夠使用adb推入平板電腦了。
 
2,燒寫boot.img
boot.img 鏡像文件包括了安卓系統的內核和文件系統。單獨燒錄boot.img的方法以下:
> adb push Z:\to_chenwenjie\a20_wing4.2_to_chenwenjie\android4.2.1\out\target\product\wing-k70\boot.img /mnt/sdcard/
> adb shell sync
> adb shell dd if=/mnt/sdcard/boot.img of=/dev/block/nandc
> adb shell sync
> adb shell reboot
 
圖中命令是上面說起的命令。請注意boot.img的存放路徑。在執行完畢上面的命令完畢後,平板電腦會發生重啓,PC端android軟件有個掉線到從新上線的過程。在推送boot.img過程當中,並無推送相關的驅動*.ko文件。
 
 
三,注意的幾個問題
1,問題一: A20平臺直接讀寫寄存器。
下圖就是讀寫寄存器的命令
 
 
2,問題二:在升級內核與文件系統後,根據須要升級內核模塊。(第六部分)
 
 
  • 第六部分 升級內核模塊
一,升級內核模塊以CTP爲例
 
二,舉例說明:燒錄boot.img時發現的問題
 
1,問題的解釋和解決方法
boot.img 鏡像文件包括了安卓系統的內核和文件系統,可是並無包含驅動模塊,因此可能出現內核更新了,而模塊不更新的現象。例如,本例中的gslX680.ko內核模塊。
 
在燒錄boot.img時發現的出現一個問題,就是發現驅動模塊沒有被編譯進入boot.img中。解決方法以下:
    > adb push Z:\to_chenwenjie\a20_wing4.2_to_chenwenjie\lichee\linux-3.3\drivers\input\touchscreen\gslX680.ko /system/vendor/modules
    > adb shell sync
    > adb remount     //解決只讀問題(可選)
    > adb shell reboot
如圖示:
 
 
2,問題的延伸
如何是一個硬件失去驅動,例如刪除了gslX680.ko這個文件,重啓平板電腦後,機器的觸摸屏不能工做。
    > adb shell
    # cd /system/vendor/modules
    # rm gslX680.ko
    # reboot
 
 
一樣地,反向操做又是能夠恢復驅動的。
 
3,另外解決方法,經過代碼樹的徹底編譯打包解決這個問題
若是徹底編譯而且打包,那麼就不會出現上述的問題。將最新的固件sun7i_android_wing-k70.img經過PhoenixSuit燒入平板電腦。
 
4,內核模塊的其餘操做命令
    #insmod *.ko    //加載模塊到內核
    #rmmod *    //將模塊從內核中移除
    #lsmod         //顯示已加載的模塊
 
  • 第七部分 監視內核調試信息
 
一,安裝adb調試工具
將目錄中全部的文件複製到系統的system32的目錄下。接着,就能夠在cmd中使用adb命令就能夠使用該調試工具。
 
 
 
二,參看內核打印信息
    >adb shell cat /proc/kmsg > 1.txt //或者直接adb shell cat /proc/kmsg 
在administrator的目錄下就能夠查看1.txt文件。1.txt文件內容以下:
 
 
在打印信息能夠提取到:在「lichee/linux-3.3/drivers/video/sun7i/disp/de_bsp/de/disp_tv.c」文件的第335行,有一行錯誤打印信息
「DE_WRN("dac %d short to ground\n", i);」。接下來根據調試方法和調試須要,對代碼進行修改。
 
 
 
 
 
  • 附錄:參考資料
 
相關文章
相關標籤/搜索