1. 程式人生 > >Android核心編譯和裁剪

Android核心編譯和裁剪

轉自: http://blog.csdn.net/a578559967/article/details/8654563

一、建立Android 核心開發環境

1、工作環境及所需軟體包

1)系統環境:Ubuntu12.04

2)交叉編譯器:arm-2012.09-64-arm-none-linux-gnueabi-i686-pc-linux-gnu.tar

3)Android核心原始碼:linux-2.6.25-android-1.0_r1.tar.gz

4)AndroidSDK:android-sdk_r11-linux_x86.tgz

SDK 中帶有AndroidEmulator模擬器等工具

2、搭建交叉編譯環境

在使用者目錄下建立一個anroid_kernel_compile的資料夾,把下載的Android kernel,交叉編譯器和Android SDK 都放在此目錄下。

1) 安裝交叉編譯器

將arm-2012.09-64-arm-none-linux-gnueabi-i686-pc-linux-gnu.tar解壓縮到此目錄,得到一個arm-2012.09的資料夾

2) 解壓Android SDK

將android-sdk_r11-linux_x86.tgz解壓縮到此目錄,得到一個android-sdk-linux_x86的資料夾

3) 解壓縮核心原始碼

將linux-2.6.25-android-1.0_r1.tar.gz解壓縮到此資料夾下,得到一個kernel.git的資料夾

4)設定一下環境變數

  1. $export PATH=$PATH:/home/xxx/android_kernel_compile/arm-2012.09/bin/  
  2. $export PATH=$PATH:/home/xxx/android_kernel_compile/android-sdk-linux_x86/tools/  
  3. $export PATH=$PATH:/home/xxx/android_kernel_compile/android-sdk-linux_x86/platform-tools/  


xxx為你的使用者名稱。

二、編譯和執行Android Kernel

1)獲取Android官方的預設核心配置檔案.config

這個.config檔案可以從SDK 中得到。

開啟AndroidSDK and AVD Manager建立一個Android虛擬機器:

  1. $android  


點選new,在name裡填入adrd2.1WVGA800,下面引數target選擇Android2.1-update1-APILevel7,Built-in選擇Default(WVGA800),點選Create AVD

啟動android模擬器,然後用adb 從模擬器中提出核心配置檔案:

  1. $emulator -avd adrd2.1WVGA800 &  
  2. $adb pull /proc/config.gz ./  


關閉模擬器,解壓縮config.gz得到config,重新命名為.config,並移動到kernel.git/下:

  1. $gunzip config.gz  
  2. $mv config kernel.git/.config  


2)修改kernel目錄中的Makefile檔案

修改CROSS_COMPILE變數為:

CROSS_COMPILE=arm-none-linux-gnueabi-

這個就是剛剛的下載和解壓的工具鏈的字首了,旨在告訴make,在編譯的時候要使用我們的工具鏈。

在Makefile中註釋掉LDFLAGS_BUILD_ID這個變數:

例如將如下定義:

  1. LDFLAGS_BUILD_ID = $(patsubst -Wl$(comma)%,%,/  
  2.                                    $(call ld-option,-Wl$(comma)--build-id,))  


修改為:

  1. LDFLAGS_BUILD_ID=  
  2. #LDFLAGS_BUILD_ID = $(patsubst -Wl$(comma)%,%,/  
  3. #                                   $(callld-option, -Wl$(comma)--build-id,))  


把它註釋掉的原因是目前android的核心還不支援這個選項。--build-id選項,主要是用於在生成的elf可執行檔案中加入一個內建的id,這樣在coredump,或者debuginfo的時候就可以很快定位這個模組是哪次build的時候弄出來的。這樣就可以避免,每次都把整個檔案做一遍效驗,然後才能得到該檔案的是由哪次build產生的。對於核心開發者來說,這是很不錯的想法,可以節約定位模組版本和其影響的時間。

目前,該功能還出於earlystage的狀態,未來的android或許會支援,但至少目前的版本是不支援的。

所以,用#註釋掉即可,或者害怕不保險的話,就加入LDFLAGS_BUILD_ID=空,這樣即使編譯的時候用了,也只是一個空格而已。

對這個--build-id選項感興趣的朋友,可以訪問下面的網址,它的作者已經解釋得非常明白了:http://fedoraproject.org/wiki/Releases/FeatureBuildId

3)編譯

$make

在編譯過程中,會提示你需不需要安裝一些新的特性,這裡算是可以裁剪的地方(僅限於新加的功能),按照自己的意願選就可以了,全選n也沒關係。

編譯完成後在kernel.git/arch/arm/boot/路徑下生成了一個zImage映象檔案,新功能全都沒有加則編譯後的大小為1.3m,我選擇了一些功能,編譯後大小為1.4m。

  1. $ls kernel.git/arch/arm/boot/zImage -l -h  
  2. -rwxrwxr-x 1 junluoyu junluoyu 1.4M  3月  6 21:30kernel.git/arch/arm/boot/zImage  


執行該映象

  1. $emulator -kernelkernel.git/arch/arch/arm/boot/zImage -avd adrd2.1WVGA800 &  


檢視/proc下的version資訊:

  1. $adb shell  
  2. #cat /proc/version  
  3. Linux version 2.6.25 ([email protected]) (gcc version4.7.2 (Sourcery CodeBench Lite 2012.09-64) ) #2 Thu Mar 7 20:30:22 CST 2013  


上面[email protected]是 使用者名稱@主機名,這個是我的使用者名稱和我的主機。

檢視/proc下的cpu資訊

  1. # cat /proc/cpuinfo  
  2. Processor         :ARM926EJ-S rev 5 (v5l)  
  3. BogoMIPS         :419.43  
  4. Features  :swp half thumb fastmult vfp edsp java  
  5. CPU implementer    :0x41  
  6. CPU architecture: 5TEJ  
  7. CPU variant      :0x0  
  8. CPU part  :0x926  
  9. CPU revision    :5  
  10. Cache type       :write-through  
  11. Cache clean     :not required  
  12. Cache lockdown       :not supported  
  13. Cache format  :Harvard  
  14. I size                  :4096  
  15. I assoc               :4  
  16. I line length      :32  
  17. I sets                  :32  
  18. D size                 :65536  
  19. D assoc             :4  
  20. D line length    :32  
  21. D sets                :512  
  22. Hardware         :Goldfish  
  23. Revision   :0000  
  24. Serial                  :0000000000000000  


在虛擬機器裡檢視版本資訊:

[Settings]->[About phone]裡可以看到:

三、裁剪

裁剪主要是對.config檔案進行修改,從而裁剪一些模組。

未裁剪前,包的大小為1.4M,裁剪後包的大小為1.2M:

  1. $make menuconfig  


以下是裁剪掉的模組:

1.General setup --->

   (1)Promptfor development and/or incomplete code/drivers

       這個是允許使用不完整的開發中的驅動,可以裁剪掉,去掉此勾選即可

   (2)ControlGroup support

       控制組管理支援,去掉此勾選

 2.Userspacebinary formats --->

   (1)Kernelsupport for MISC binaries

       核心支援MISC格式的二進位制檔案,可以裁剪掉,去掉此勾選

 3.PowerManagement options --->

    (1)PowerManagement support

        電源管理支援,去掉此勾選

 4.Networking--->Networking options--->

    (1)802.1d Ethernet Bridging.

    (2)802.1Q VLAN Support

         無線網,去掉此模組

  5.DeviceDrivers --->

     (1)Input device support--->

           1)Providelegacy /dev/psaux device

             去掉此勾選

           2)Keyboards

              鍵盤支援,去掉此勾選

           3)Miscellaneous devices

              去掉此勾選

     (2)Network device support--->

            1)Ethernet (1000Mbit)

            2)Ethernet (10000Mbit)

               千兆乙太網和萬兆乙太網,去掉這兩項的勾選

      (3)USBsupport

           USB支援,去掉此勾選

     (4)MMC/SD card support

           SD卡支援,去掉此勾選

     (5)Android--->

           1)Android log driver

              安卓日誌驅動,去掉此勾選

  6.Filesystems--->

      (1)Network File Systems

          網路檔案系統,去掉此勾選

   7.Kernelhacking--->

     (1)Kernel debugging

           核心除錯,去掉此勾選


相關推薦

Android核心編譯裁剪

轉自: http://blog.csdn.net/a578559967/article/details/8654563 一、建立Android 核心開發環境 1、工作環境及所需軟體包 1)系統環境:Ubuntu12.04 2)交叉編譯器:arm-2012.09-64-a

Android編譯二次打包

犯錯 解壓 就會 field har stat 生成 https make 參考:APK反編譯 一、工具介紹: 1、解壓工具 2、JDK 3.apktool: aapt.exe,apktool.bat,apktool.jar;三個在同一目錄結合使用,用來反編譯apk

Android 核心編譯記錄

下載核心原始碼和交叉編譯鏈,交叉編譯鏈我用的https://aosp.tuna.tsinghua.edu.cn/platform/prebuilts/gcc/linux-x86/arm/arm-linux-androideabi-4.9 export CROSS_COMPILE=$(pwd)/bin

Android APP編譯執行原理

在本篇中,主要介紹Android平臺應用程式的執行原理,在閱讀了SDK文件中“Application Fundamentals”一篇的內容後,根據自己的理解繪製了下面的示意圖:       每個應用程式安裝後,系統便會為其分配一個獨立的儲存空間,所謂的“Securi

Linux核心編譯grub安裝注意事項(修改預設啟動項)

一般的過程不多說。 下載核心原始碼,make menuconfig , make , make modules_install, make install等一系列。 要注意的事情: 1.安裝模組時,要用特殊引數,否則編譯出來的initrd.img特別大有300M,而

ARM版Linux核心編譯裁剪

Win7下使用Oracle VM VirtualBox搭建的Ubuntu11.10虛擬機器 1、建立交叉編譯環境:       下載交叉編譯器arm-linux-gcc-3.4.1.tar.bz2             tar jxvf arm-linux-gcc-3.

Android編譯編譯時出現error: Error: String types not allowed錯誤的解決辦法

     1、在Android Project配置檔案中你使用了當前工程目標版本所沒有的特性,針對這種情況只需更改下目標版本就行了      2、apktool.jar可能不是最新的,針對這種情況下載最新版的apktool.jar就行了      3、在windows平

android編譯執行python版的tensorflow

    Tensorflow採用python作為主語言,雖然tensorflow提供了運行於android的例子,但採用是java。基於原始碼,採用NDK,可以編譯出android版本的tensorflow。     編譯環境採用ubuntu 16.04,NDK使用r13b

關於fedora上linux核心編譯安裝

裝了幾次,方法比較簡單: 1.在核心目錄下,管理員許可權執行:make menuconfig 此時在desk-live 系統下可能沒有gcc ,無法make,裝gcc即可:yum install gcc 。順便裝了g++也可以:yum install gcc g++ 不管是

關於樹莓派核心編譯驅動編寫(2)

前幾天搞定了樹莓派2的核心編譯執行工作,這幾天集中研究了樹莓派的gpio操作,那麼現在是時候把它搞出來了 我們知道,gpio操作是驅動的基礎操作,那麼研究一塊板子,一個版本的核心,首先要從gpio入手。 基礎的gpio操作有以下: ioremap對映暫存器地址,readl

Android核心編譯過程遇到的問題

前言:2014-08-30記錄在hi baidu上,現在移過來 Linux環境:Ubuntu14.4 x64位 1:arm-eabi-gdb: error while loading shared libraries: libpython2.6.so

Android核心編譯除錯

一、Android核心原始碼的選擇 Android手機裝置核心原始碼的除錯需要外部硬體裝置的支援,除錯步驟比較麻煩。相對來說,Android模擬器核心原始碼的除錯就比較簡單了,這裡以Android模擬器核心原始碼的除錯為例。首先建立一個Android API 19(An

利用ccache加快android原始碼linux核心編譯速度的方法

一、android原始碼編譯加速 當你刪掉out/target目錄或者使用make clean清空輸出重新編譯原始碼的時候,編譯時間通常都很漫長。其實這個問題很容易解決,Android官方為我們帶來了解決方案–ccache編譯器快取。官方這麼講:You can optio

Android Apk的反編譯加密

打不開 源文件 資源 left 結果 blog 9.png 規則 找到   這幾天在上海出差,忙裏偷閑學習了一下Apk的反編譯工具的基本使用。下面就簡單介紹一下如何將我們從網上下載的Apk文件進行反編譯得到我們想要獲得的資源文件和源碼。 一、Apk文件組成   Androi

如何為Android平臺編譯 opencv3 opencv_contrib (Linux)

gre inter jni fuzzy dnn letter ott esc lis p { margin-bottom: 0.1in; direction: ltr; color: rgb(0, 0, 10); line-height: 120%; text-align:

Android核心技術-day06-01-顯式意圖隱式意圖

package com.gaozewen.intent; import android.content.Intent; import android.net.Uri; import android.os.Bundle; import android.support.v7.app.AppC

轉自老羅 Android應用程式資源的編譯打包過程分析

原文地址   http://blog.csdn.net/luoshengyang/article/details/8744683 轉載自老羅,轉載請說明   我們知道,在一個APK檔案中,除了有程式碼檔案之外,還有很多資原始檔。這些資原始檔是通過An

如何編譯更換Linux系統核心

step0 — 完成編譯和安裝Linux需要的基本條件 核心原始碼 從即可下載程式碼,注意你需要下載的是完整的原始碼包(點選tarball即可下載),而不是patch或change log之類。 編譯需要的軟體 編譯kernel需要一些基本的develop工具軟體

Android 驅動開發---Android Linux 核心編譯 Nexus 5x

本文以Nexus 5X為例,講解Android Linux 驅動開發的準備驅動開發瞭解:Android對硬體的支援分成了兩層,一層放在使用者空間(User Space),一層放在核心空間(Kernel Space),其中,硬體抽象層執行在使用者空間,而Linux 核心驅動程式執行在核心空間。 所以Andro

Android系統編譯:新增OpenCV庫模型配置檔案

一、新增 libopencv_java3.so庫至/system/lib64/ 在Android原始碼目錄的hardware/libgesture/目錄下建立libopencvhw資料夾,並將libo