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)設定一下環境變數
- $export PATH=$PATH:/home/xxx/android_kernel_compile/arm-2012.09/bin/
- $export PATH=$PATH:/home/xxx/android_kernel_compile/android-sdk-linux_x86/tools/
- $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虛擬機器:
- $android
點選new,在name裡填入adrd2.1WVGA800,下面引數target選擇Android2.1-update1-APILevel7,Built-in選擇Default(WVGA800),點選Create AVD
啟動android模擬器,然後用adb 從模擬器中提出核心配置檔案:
- $emulator -avd adrd2.1WVGA800 &
- $adb pull /proc/config.gz ./
關閉模擬器,解壓縮config.gz得到config,重新命名為.config,並移動到kernel.git/下:
- $gunzip config.gz
- $mv config kernel.git/.config
2)修改kernel目錄中的Makefile檔案
修改CROSS_COMPILE變數為:
CROSS_COMPILE=arm-none-linux-gnueabi-
這個就是剛剛的下載和解壓的工具鏈的字首了,旨在告訴make,在編譯的時候要使用我們的工具鏈。
在Makefile中註釋掉LDFLAGS_BUILD_ID這個變數:
例如將如下定義:
- LDFLAGS_BUILD_ID = $(patsubst -Wl$(comma)%,%,/
- $(call ld-option,-Wl$(comma)--build-id,))
修改為:
- LDFLAGS_BUILD_ID=
- #LDFLAGS_BUILD_ID = $(patsubst -Wl$(comma)%,%,/
- # $(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。
- $ls kernel.git/arch/arm/boot/zImage -l -h
- -rwxrwxr-x 1 junluoyu junluoyu 1.4M 3月 6 21:30kernel.git/arch/arm/boot/zImage
執行該映象
- $emulator -kernelkernel.git/arch/arch/arm/boot/zImage -avd adrd2.1WVGA800 &
檢視/proc下的version資訊:
- $adb shell
- #cat /proc/version
- 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資訊
- # cat /proc/cpuinfo
- Processor :ARM926EJ-S rev 5 (v5l)
- BogoMIPS :419.43
- Features :swp half thumb fastmult vfp edsp java
- CPU implementer :0x41
- CPU architecture: 5TEJ
- CPU variant :0x0
- CPU part :0x926
- CPU revision :5
- Cache type :write-through
- Cache clean :not required
- Cache lockdown :not supported
- Cache format :Harvard
- I size :4096
- I assoc :4
- I line length :32
- I sets :32
- D size :65536
- D assoc :4
- D line length :32
- D sets :512
- Hardware :Goldfish
- Revision :0000
- Serial :0000000000000000
在虛擬機器裡檢視版本資訊:
[Settings]->[About phone]裡可以看到:
三、裁剪
裁剪主要是對.config檔案進行修改,從而裁剪一些模組。
未裁剪前,包的大小為1.4M,裁剪後包的大小為1.2M:
- $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