1. 程式人生 > >Android原始碼編譯及替換成自己編譯的linux核心

Android原始碼編譯及替換成自己編譯的linux核心

/****************************************************************************************************************************/
                                    安卓原始碼編譯
/****************************************************************************************************************************/
1. 初始化編譯環境
   a.  JDK的安裝
ubuntu可以不用配置,新版ubuntu自帶的openjdk-7-jdk就可以
若沒有則下載
$ sudo apt-get update
$ sudo apt-get install openjdk-7-jdk
更新系統預設的java和javac
$ sudo update-alternatives --config java
$ sudo update-alternatives --config javac
   b.  其他包的下載
// (Ubuntu 14.04)
$ sudo apt-get install bison g++-multilib git gperf libxml2-utils make python-networkx zlib1g-dev:i386 zip
   c.  其他
ubuntu連線不上手機
$ sudo vim /etc/udev/rules.d/51-android.rules
輸入這些內容  SUBSYSTEM=="usb" ENV{DEVTYPE}=="usb_device", MODE="0666" 儲存即可


2. 下載核心,使用官方提供的下載工具repo,當然也可以使用git直接clone
   a. 安裝repo(原始碼下載的一個工具,整合了以一些命令)
$ mkdir ~/bin
    $ PATH=~/bin:$PATH
$ curl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo
$ chmod a+x ~/bin/repo   //改變repo的許可權,變為可執行

   b. 初始化repo客戶端
$ mkdir WORKING_DIRECTORY  // 例如 mkdir android  建立你的原始碼目錄,就是你的原始碼待會下載到這個目錄
    $ cd WORKING_DIRECTORY     //     cd  android   
$ repo init -u https://android.googlesource.com/platform/manifest // 確定你要下載的原始碼url ,預設master分支
或者 $ repo init -u https://android.googlesource.com/platform/manifest -b android-4.0.1_r1   //-b 選擇其他分支
初始化成功後,你的原始碼目錄下會生成一個.repo的資料夾,裡面會有一些檔案如manifest
   c. 開始下載原始碼
$ repo sync  //  由於在牆外,中途會有中斷,中斷後重複命令後即可
3. 開始編譯
   a. 設定環境
// 在你建立的原始碼目錄下操作
$ source build/envsetup.sh // 或者 $ . build/envsetup.sh
$ lunch   // 選擇你要編譯的型別 虛擬機器或者其他真機(nexus系列)  當然也可以直接選擇型別  $ lunch aosp_arm-eng
 輸入命令後:
You're building on Linux


Lunch menu... pick a combo:
1. aosp_arm-eng
2. aosp_arm64-eng
3. aosp_mips-eng
4. aosp_mips64-eng
5. aosp_x86-eng
6. aosp_x86_64-eng
7. aosp_tilapia-userdebug
8. aosp_flo-userdebug
9. full_fugu-userdebug
10. aosp_fugu-userdebug
11. aosp_grouper-userdebug
12. aosp_deb-userdebug
13. aosp_mako-userdebug
14. aosp_hammerhead-userdebug
15. aosp_flounder-userdebug
16. aosp_shamu-userdebug
17. aosp_manta-userdebug
18. mini_emulator_x86-userdebug
19. m_e_arm-userdebug
20. mini_emulator_mips-userdebug
21. mini_emulator_arm64-userdebug
22. mini_emulator_x86_64-userdebug


Which would you like? [aosp_arm-eng] 14  //此處選擇你需要的型號
 // 機型對照表
        emulator(虛擬機器)   aosp_arm-eng
Nexus 6 shamuaosp_shamu-userdebug
Nexus Player fuguaosp_fugu-userdebug
Nexus 9 volantis (flounder)aosp_flounder-userdebug
Nexus 5 (GSM/LTE)hammerheadaosp_hammerhead-userdebug
Nexus 7 (Wi-Fi)razor (flo)aosp_flo-userdebug
Nexus 7 (Mobile)razorg (deb)aosp_deb-userdebug
Nexus 10 mantaray (manta)full_manta-userdebug
Nexus 4 occam (mako)full_mako-userdebug
Nexus 7 (Wi-Fi)nakasi (grouper)full_grouper-userdebug
Nexus 7 (Mobile)nakasig (tilapia)full_tilapia-userdebug
Galaxy Nexus (GSM/HSPA+)yakju (maguro)full_maguro-userdebug
Galaxy Nexus (Verizon)mysid (toro)aosp_toro-userdebug
Galaxy Nexus (Experimental)mysidspr (toroplus)aosp_toroplus-userdebug
PandaBoard (Archived)pandaaosp_panda-userdebug
Motorola Xoom (U.S. Wi-Fi)wingrayfull_wingray-userdebug
Nexus S soju (crespo)full_crespo-userdebug
Nexus S 4G sojus (crespo4g)full_crespo4g-userdebug
 //  三個版本說明版本
Buildtype Use
userlimited access; suited for production
userdebug like “user” but with root access and debuggability; preferred for debugging
engdevelopment configuration with additional debugging tools
    b. 開始編譯
$ make  // 沒有引數,使用所有核進行全部編譯,make -j4  四個核同時工作進行編譯 ,後面會有講到可以編譯一部分 make bootimage
/****************************************************************************************************************************/
原始碼編譯結束,可以直接刷入手機 
 // 連線電腦,在當前命令列內輸入 
 $ adb reboot bootloader  // 或者手機按電源和音量-進入fastboot模式再連線電腦
 $ fastboot -w flashall   // 刷入手機
/****************************************************************************************************************************/
/****************************************************************************************************************************/
                          安卓核心原始碼編譯,並使用自己編譯的核心刷入手機
/****************************************************************************************************************************/
1. 選擇適用自己機型的核心
Device         Binary location         Source location  Build configuration
shamu    device/moto/shamu-kernel       kernel/msm       shamu_defconfig
fugu    device/asus/fugu-kernel       kernel/x86_64   fugu_defconfig
volantis device/htc/flounder-kernel      kernel/tegra   flounder_defconfig
hammerhead device/lge/hammerhead-kernel   kernel/msm       hammerhead_defconfig
flo        device/asus/flo-kernel/kernel   kernel/msm       flo_defconfig
deb          device/asus/flo-kernel/kernel   kernel/msm       flo_defconfig
manta    device/samsung/manta/kernel   kernel/exynos   manta_defconfig
mako    device/lge/mako-kernel/kernel   kernel/msm       mako_defconfig
grouper     device/asus/grouper/kernel       kernel/tegra   tegra3_android_defconfig
tilapia     device/asus/grouper/kernel       kernel/tegra   tegra3_android_defconfig
maguro     device/samsung/tuna/kernel       kernel/omap       tuna_defconfig
toro    device/samsung/tuna/kernel       kernel/omap       tuna_defconfig
panda    device/ti/panda/kernel           kernel/omap       panda_defconfig
stingray device/moto/wingray/kernel       kernel/tegra   stingray_defconfig
wingray     device/moto/wingray/kernel       kernel/tegra   stingray_defconfig
crespo     device/samsung/crespo/kernel   kernel/samsung   herring_defconfig
crespo4g device/samsung/crespo/kernel   kernel/samsung   herring_defconfig


The goldfish project contains the kernel sources for the emulated platforms.
The msm project has the sources for ADP1, ADP2, Nexus One, Nexus 4, Nexus 5, Nexus 6, and can be used as a starting point for work on Qualcomm MSM chipsets.
The omap project is used for PandaBoard and Galaxy Nexus, and can be used as a starting point for work on TI OMAP chipsets.
The samsung project is used for Nexus S, and can be used as a starting point for work on Samsung Hummingbird chipsets.
The tegra project is for Xoom, Nexus 7, Nexus 9, and can be used as a starting point for work on NVIDIA Tegra chipsets.
The exynos project has the kernel sources for Nexus 10, and can be used as a starting point for work on Samsung Exynos chipsets.
The x86_64 project has the kernel sources for Nexus Player, and can be used as a starting point for work on Intel x86_64 chipsets.


2.  開始下載核心
       $ git clone https://android.googlesource.com/kernel/msm.git    // 比如下載適用於Google Nexus5的核心
  $ git branch -a  // 檢視核心的分支
       $ git checkout 分支名   // 選擇一個分支   
/*
更加保險地下載適合自己手機的核心,可以這樣,找到安卓原始碼編譯後生成的目錄/home/sundrops/android/out/target/product/hammerhead (以hammerhead為例,可能是其他)
        $ dd if=kernel bs=1 skip=$(LC_ALL=C od -Ad -x -w2 kernel | grep 8b1f | cut -d ' ' -f1 | head -1) | zgrep -a 'Linux version' // 引數中kernel可能是其他名字參考你的輸出,可能是zImage-dtb等
輸出
Linux version 3.4.0-g0315133 (
[email protected]
) (gcc version 4.8 (GCC) ) #1 SMP PREEMPT Tue Jul 28 17:54:37 UTC 2015
// g0315133 是commit的hash值,根據這個checkout適合你手機的核心分支
$ git clone https://android.googlesource.com/kernel/msm.git kernel
$ cd kernel
$ git checkout g0315133


*/
3.  配置編譯用的gcc  
    // 下載gcc (可選,因為之前你下載過安卓原始碼的話,會有這個)
$ git clone https://android.googlesource.com/platform/prebuilts/gcc/linux-x86/arm/arm-eabi-4.6
// 配置環境變數
$ export PATH=$(你的安卓原始碼目錄)/prebuilts/gcc/linux-x86/arm/arm-eabi-4.6/bin:$PATH // 有可能是4.8版本,進入資料夾對照一下
4.  開始編譯(以 Google Nexus5為例 編譯適用hammerhead的核心)
// 配置交叉編譯所需的變數
$ export ARCH=arm
$ export SUBARCH=arm
$ export CROSS_COMPILE=arm-eabi-
// 進入核心目錄,開始編譯
$ cd msm
$ make hammerhead_defconfig
$ make
/****************************************************************************************************************************/
                                                   核心原始碼編譯結束
/****************************************************************************************************************************/
/****************************************************************************************************************************/
                                                   替換核心
/****************************************************************************************************************************/
1. 第一種方法,要檢查許多檔案較慢
// 設定核心變數
$ export TARGET_PREBUILT_KERNEL=$你的核心目錄/arch/arm/boot/zImage
(特殊  Google Nexus5 這樣設定 export TARGET_PREBUILT_KERNEL=$你的核心目錄/arch/arm/boot/zImage-dtb 注意是zImage-dtb不是zImage,其他平臺遇到問題可以兩個都試試)
// 重新編譯boot.img
/*
boot.img是由檔案頭資訊,核心資料以及檔案系統資料組成,它們之間非頁面對齊部分用0填充,檔案頭資訊的具體結構可以在system/core/mkbootimg/bootimg.h
** +-----------------+ 
** | boot header     | 1 page
** +-----------------+
** | kernel          | n pages  
** +-----------------+
** | ramdisk         | m pages  
** +-----------------+
** | second stage    | o pages
** +-----------------+
**
*/
$ make bootimage
2.  直接打包,速度快
// 這是一行 ,有了上面boot.img的介紹,這些引數,應該都能理解
      $ mkbootimg --base 0 --pagesize 2048 --kernel_offset 0x00008000 --ramdisk_offset 0x02900000 --second_offset 0x00f00000 --tags_offset 0x02700000 --cmdline 'console=ttyHSL0,115200,n8 androidboot.hardware=hammerhead  user_debug=31 maxcpus=2 msm_watchdog_v2.enable=1'--kernel /arch/arm/boot/zImage-dtb(你的核心) --ramdisk out/target/product/hammerhead/ramdisk.img(安卓原始碼編譯後生成的ramdisk.img) -o out/boot.img(生成的boot.img放在這)


/****************************************************************************************************************************/
                                                   替換核心結束,可以刷入手機
 $ adb reboot bootloader  // 或者手機按電源和音量-進入fastboot模式再連線電腦
 $ fastboot -w flashall   // 刷入手機
/****************************************************************************************************************************/




























相關推薦

Android原始碼編譯替換自己編譯linux核心

/****************************************************************************************************************************/                            

android checkbox 未選中狀態 已選中狀態 替換自己的圖片

轉載:https://www.cnblogs.com/zsychanpin/p/6837900.html 效果圖: 未選中狀態: 選中狀態:   使用步驟: 1.建立自己的selector <?xml version="1.0" encodin

android原始碼下加入替換鈴聲檔案,設定預設鈴聲

系統鈴聲檔案的路徑在frameworks/base/data/sounds資料夾 有四個主要資料夾alarms ,notifications,ringtones,effects,分別對應系統的鬧鐘鈴聲,通知鈴聲,來電鈴聲,音效 如果需要新增鈴聲檔案,只需把鈴聲放入對應的資料

把select的小圖標替換 自己想要的圖片

sele 技術 mage 選項 one 嘗試 下拉 .com 9.png 不同的瀏覽器默認的select的選項圖標是不同的,例如: 在chrome中,是這樣的: 未點擊時 點擊時 在Firefox中是這樣的: 未點擊時 點擊時 在IE9中是這樣的: 未點擊時

如何將網頁的title前面的圖標替換自己的圖標

準備 工具 轉換 格式 net href 背景 rtc 必須 首先要準備自己的圖標,圖標必須是.ico格式的圖片,網上有很多在線工具可以將自己的圖片轉換成ico格式的圖片,這裏給大家介紹兩個網站 在線ico轉換工具:生成的圖標是可以選尺寸的,原圖片的大小不限制 http:/

android原始碼地址下載介紹

git clone https://android.googlesource.com/device/common.gitgit clone https://android.googlesource.com/device/google/accessory/arduino.gitgit clone https:/

Activiti工作流(二)6.0原始碼檢視如何使用自己的使用者表和群組表

一、從執行過程分析 //查詢任務 @Test public void excuteTask() { List<Task> tasks = taskService.createTaskQuery()

UE4將預設角色替換自己的角色的快速方法

1.將角色骨骼和動畫匯入到UE4,然後將預設的ThirdPersonCharacter的mesh換成自己想要替換的mesh。 2.將預設的ThirdPersonCharacter的名字複製下來,然後將其刪除,然後將名字複製給自定義角色的Character. 3.將預設的第三

Android 8.0 系統學習(6)---Linux核心介面要求

您可以將以下配置設定用作 Android 核心配置的基礎。設定會整理到 android-base、android-base-<arch> 和 android-recommended.cfg 檔案中:android-base。這些選項可實現核心 Android 功能,並且應配置為所有裝置指定的選項。

開發自己的 VPN 程式:shadowsocks-android 同步程式碼編譯踩坑

部落格原文: 開發自己的 VPN 程式:shadowsocks-android 同步程式碼及編譯踩坑 官方倉庫: shadowsocks-android 專案非常成熟,很適合拿來打造自己的 VPN app。 工具版本 劃重點,要想少踩坑,要先確認 PREREQUISITES JDK 1.8 Go 1.

Android ADB 命令原始碼編譯命令筆記

ADB 常用命令 adb root:獲取root 許可權 adb remount:重新掛載 adb shell :進入terminal adb devices -s serialnumber :檢視指定裝置狀態 adb devices 獲取裝置列表及裝置狀態 adb kill-ser

Android原始碼編譯環境搭建問題解決方案小結

1. ImportError: No module named bz2 for Python 2.7.2 (1)$ source build/envsetup.sh (2)$ lunch aosp_arm-eng (3)$ mak

Android 原始碼環境搭建編譯

假設原始碼根目錄為~/Android 1 環境搭建 1.1 安裝openjdk-7-jdk Android 5.1 用到的jdk不再是Oracle 的 jdk ,而是開源的 openjdk,在ubuntu安裝好後,使用如下命令安裝jdk:

Mac上下載編譯android原始碼

參考:     https://blog.csdn.net/u010963246/article/details/71480684     https://blog.csdn.net/qq_25333681/article/details/79838325     https

Android 原始碼編譯詳解【一】:伺服器硬體配置機型推薦-2016/06

做 Android系統開發多年,開發環境都是入職就搭建好了,入職時拿個賬號密碼就直接開始搞開發了,年初換了新公司,所有的專案都是剛起步,一切環境都要重新搭建,有幸當此重任,因為自己之前也只是用過,並沒

Android Proguard安全加固教你如何讓自己的應用程式或SDK更難被反編譯--library打包jar並且混淆

在android 應用層開發的時候咱們技術人員都或多或少都會接觸一些SDK比如so、jar等,這些都是資料類公司提供給網際網路開發公司的關於技術核心類方便的東西,因為是核心所以加密加固是必不可少的工作,本博今天就向大家介紹jar的封裝打包以及混淆,完成自己的SDK!在此之前需

SeetaFace編譯成功(有windowsAndroid原始碼

宣告:由於本人水平有限,所提供的程式碼、dll、so等必然存在很多問題,僅用於學習,不適合工業級使用,請謹慎使用,如果造成損失,責任自負。 對齊:  這張照片第3個人的特徵點檢測有點問題  研發人員很快修正了,贊一個。 下面是人臉比對,準確率還

利用Android原始碼編譯一個自己寫的Hello World模組

這應該是我的Android底層開發第二篇文章,在編譯Android原始碼成功的基礎上又進一步利用Android原始碼編譯成功了一個自己寫的hello world,算入門第二步了。1、在android 原始碼路徑下的development路徑下建立hello路徑;2、建立he

android原始碼使用proguard混淆編譯錯誤總結

關於混淆編譯也主要是從網上學習的,決定對網上的進行總結,供大家一起學習,研究,東西主要都是網友們寫的,我這裡借鑑了,文章最後是網友的原文地址; 1,什麼是混淆編譯 ProGuard是一個免費的java類檔案壓縮,優化,混淆器.它探測並刪除沒有使用的類,欄位,方法和屬性.它刪

Android面試收集錄13 Android虛擬機編譯過程

字符串 r.java android面試 改善 native data- 接口 ipa 面試 一、什麽是Dalvik虛擬機 Dalvik是Google公司自己設計用於Android平臺的Java虛擬機,它是Android平臺的重要組成部分,支持dex格式(Dalvi