Android系統源碼下載及編譯流程

Android系統源碼下載及編譯流程


  • 1.準備工作
  • 2.Android源碼下載
  • 3.Android編譯環境搭建
  • 4.Android系統編譯
  • 5.Android內核模塊編譯

1.準備工作

  • Android 由四個層組成: 
    • Linux 內核(c/c++)
    • 本地用戶空間native (c/c++)
    • 應用程序框架層
    • 應用程序層(java) 
      老師說她一般在kernel、native、framework層進行代碼安全加固。
  • 選擇Android4.4,4.4系統優化較4.0,2.3明顯,且不算太大;20G,6.0的大約60G
  • 環境: 
    • ①安裝虛擬機Ubuntu16.04編譯快 
      4G運存,CPU 4核心,80G硬盤(最後佔50G)
    • ②安裝samba文件服務器,進行文件傳輸

2.Android源碼下載

兩種方式:

  1. repo工具(批處理工具,一次下載多個git倉庫) 
    • ①.安裝repo: 
      mkdir ~/bin 
      PATH=~/bin:$PATH 
      下載repo腳本: 
      curl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo 
      設置repo可執行權限: 
      chmod a+x ~/bin/repo
    • ②.初始化repo客戶端 
      創建AndroidCode目錄用來存放源碼: 
      mkdir AndroidCode 
      cd AndroidCode 
      運行repo下載源碼: 
      repo init -u https://android.googlesource.com/platform/manifest -b android-4.4_r1 
      repo sync 
      據說20個G,提供更新.repo文件佔10個g,我們暫時用不到,所以採用第二種,並讓同學幫我分擔了一部分流量~


3.搭建Android編譯環境:

  1. 安裝一系列工具、依賴: 
    sudo apt-get install -y git flex bison gperf build-essential libncurses5-dev:i386 
    sudo apt-get install libx11-dev:i386 libreadline6-dev:i386 libgl1-mesa-dev g++-multilib 
    sudo apt-get install tofrodos python-markdown libxml2-utils xsltproc zlib1g-dev:i386 
    sudo apt-get install dpkg-dev libsdl1.2-dev libesd0-dev 
    sudo apt-get install git-core gnupg flex bison gperf build-essential 
    sudo apt-get install zip curl zlib1g-dev gcc-multilib g++-multilib 
    sudo apt-get install libc6-dev-i386 
    sudo apt-get install lib32ncurses5-dev x11proto-core-dev libx11-dev 
    sudo apt-get install lib32z-dev ccache 
    sudo apt-get install libgl1-mesa-dev libxml2-utils xsltproc unzip m4

  2. 安裝jdk: 
    Android4.4的源碼編譯所使用的jdk爲oracle jdk1.6。jdk一定要安裝1.6的最高版本,即jdk1.6.0_45,否則編譯中會報錯

    • 具體過程: 
      在/usr/loacl目錄下創建jvm文件夾用來存放jdk:mkdir /usr/local/jvm 
      複製到/usr/local/jvm中:cp jdk-6u45-linux-x64.bin /usr/local/jvm 
      進入到/usr/local/jvm下,給.bin文件一個可執行權限 
      chmod +x jdk-6u45-linux-x64.bin 
      執行.bin文件進行安裝:./jdk-6u45-linux-x64.bin 
      安裝成功後設置環境變量,打開/etc/profile,添加如下幾行後保存 
      export JAVA_HOME=/usr/local/java/jdk1.6.0_45 
      export JRE_HOME=/usr/local/java/jdk1.6.0_45/jre 
      export CLASSPATH=.:$JAVA_HOME/lib:$JRE_HOME/lib:$CLASSPATH 
      export PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$JAVA_HOME:$PATH
       
      source /etc/profile後,輸入java -version,顯示java version “1.6.0_45”則成功

4.編譯Android源碼

  1. 環境初始化: 
    ~.bashrc文件末尾追加export USE_CCACHE = 1(加速編譯 ) 
    echo export USE_CCACHE=1 >> ~/.bashrc 
    source ~/.bashrc 
    導入編譯Android源碼所需的環境變量和其他參數: 
    source build/envsetup.sh 
    最後: make –j4(開啓四線程編譯) 
    CPU滿負荷運行,3個多小時後,系統鏡像文件 system.img、ramdisk.img和userdata.img

5. Android內核模塊編譯

  1. 在/usr/local/android/kernel/goldfish/drivers/char/my_test/下,gedit hello.c 


  1. 在my_test下,gedit makefile//編譯hello.c 
    內容:obj-y := hello.o //內建編譯,還有個obj-m表示模塊編譯,沒時間實現了~
  2. 在../char下,gedit Makefile //包含hello驅動 
    加入:obj-y += my_test/hello.o
  3. 重新編譯,將hello驅動設備編譯到內核中; 
    make –j4
  4. 啓動後查看內核狀態: 
    emulator –kernel zImage –show-kernel & 


成功打印出hello,而且它是以drivers下的char字符驅動的形式實現的。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章