获取Android源码跟官方Linux内核源码

  最近在探索安卓源码跟ROM,有幸买了本书跟在网上看到一些交教程,先做一些笔记,以备不时之需...

  1、了解git和repo

  2、环境配置

    首先最先的肯定是JDK和SDK的安装,网上教程很多,也可以参考Google官方提供的: https://source.android.com/source/initializing.html

    (a)安装git 和curl:

      apt-get install git-core curl

    (b)安装repo:

    创建存放repo目录

      # mkdir ~/bin 
      # export PATH=~/bin:$PATH

      # curl http://commondatastorage.googleapis.com/git-repo-downloads/repo  > ~/bin/repo  (也可以在网上下载现成的)

      # chmod a+x ~/bin/repo

  3、下载安卓源码

    下载Android源码:
      # mkdir ~/source 
      # cd source

      # repo init -u https://android.googlesource.com/platform/manifest -b android-4.2.2_r1  (同步指定分支,可git branch -a查看)
      # repo sync

    编译安卓源码:

      # source build/envsetup.sh

      # lunch full-eng  (编译生成可在安卓模拟器上运行,也可以只输lunch 显示当前支持的所有设备,例如:full_x86-eng适合在X86架构的计算机运行)

      # make -j4  (4个线程编译)

      生成的文件在:~/source/out/target/product/generic 下包括镜像文件(ramdisk.img、system.img、userdata.img)

      Google官方源码编译细节可在 https://source.android.com/source/building.html 了解

  4、下载安卓官方Linux内核源码

    git命令

      # git clone http://android.googlesource.com/kernel/common.git

      # git clone http://android.googlesource.com/kernel/exynos.git

      # git clone http://android.googlesource.com/kernel/goldfish.git

      # git clone http://android.googlesource.com/kernel/msm.git

      # git clone http://android.googlesource.com/kernel/omap.git

      # git clone http://android.googlesource.com/kernel/samsung.git

      # git clone http://android.googlesource.com/kernel/tegra.git

    其中

      common:通用的Linux内核,后面6套都是以该源码为基础;

      exynos  :用于使用三星Exynos芯片的Android设备,典型代表是Nexus 10;

      goldfish:用于Android模拟器的内核源码;

      msm    :用于使用高通MSM芯片的Android设备,典型代表是ADP1(G1)、ADP2(G2)、Nexus One和Nexus  4;

      omap   :用于使用德州仪器(TI)OMAP芯片Android设备,典型代表是PandaBoard和Galaxy Nexus;

      samsung:用于使用三星Hummingbird芯片的Android设备,典型代表是Nexus S;

      tefra    :用于使用NVIDIA (Tefra)芯片Android设备,典型代表是Xoom和Nexus 7。

    HTC手机的话,也可以在以下地址下载指定设备的Linux内核源码:

      http://www.htcdev.com/devcenter/downloads

    查看内核分支:

      # cd  common

      # git branch -a

    切换分支:

      # git checkout remotes/origin/xxxxxxxxx

  5、编译内核源码

    要想编译适合在Android设备上运行的内核源码,必须要安装支持arm架构的交叉编译器,但是每个设备官方编译使用的版本不一样,必须考虑。

    Nexus 7设备用的是交叉编译器4.4.3,可参考下面的命令:

      # git clone https://android.googlesource.com/platform/prebuilt

      # export PATH=$(pwd)/prebuilt/linux-x86/toolchain/arm-eabi-4.4.3/bin:$PATH

      # export ARCH=arm

      # export CROSS_COMPILE=arm-eabi-

      # make

    最后在<Linux源码根目录>/arch/arm/boot 目录生成一个zImage文件,是可运行的Linux内核的二进制版本(Nexus 7)。

(也可以参考http://android.git.kernel.org/)

时间: 2024-08-02 02:49:39

获取Android源码跟官方Linux内核源码的相关文章

linux 内核源码分析 - 获取数组的大小

#define ARRAY_SIZE(x) (sizeof(x) / sizeof((x)[0])) 测试程序: #include<stdio.h> #include<stdlib.h> struct dev { int a; char b; float c; }; struct dev devs[]= { { 1,'a',7.0, }, { 1,'a',7.0, }, { 1,'a',7.0, }, }; int main() { printf("int is %d \

Linux内核源码分析--内核启动之(5)Image内核启动(rest_init函数)(Linux-3.0 ARMv7)【转】

原文地址:Linux内核源码分析--内核启动之(5)Image内核启动(rest_init函数)(Linux-3.0 ARMv7) 作者:tekkamanninja 转自:http://blog.chinaunix.net/uid-25909619-id-4938395.html 前面粗略分析start_kernel函数,此函数中基本上是对内存管理和各子系统的数据结构初始化.在内核初始化函数start_kernel执行到最后,就是调用rest_init函数,这个函数的主要使命就是创建并启动内核线

Linux内核源码分析--内核启动之(3)Image内核启动(C语言部分)(Linux-3.0 ARMv7) 【转】

原文地址:Linux内核源码分析--内核启动之(3)Image内核启动(C语言部分)(Linux-3.0 ARMv7) 作者:tekkamanninja 转自:http://blog.chinaunix.net/uid-25909619-id-4938390.html 在构架相关的汇编代码运行完之后,程序跳入了构架无关的内核C语言代码:init/main.c中的start_kernel函数,在这个函数中Linux内核开始真正进入初始化阶段, 下面我就顺这代码逐个函数的解释,但是这里并不会过于深入

Linux内核源码分析--内核启动之(4)Image内核启动(setup_arch函数)(Linux-3.0 ARMv7)【转】

原文地址:Linux内核源码分析--内核启动之(4)Image内核启动(setup_arch函数)(Linux-3.0 ARMv7) 作者:tekkamanninja 转自:http://blog.chinaunix.net/uid-25909619-id-4938393.html 在分析start_kernel函数的时候,其中有构架相关的初始化函数setup_arch. 此函数根据构架而异,对于ARM构架的详细分析如下: void __init setup_arch(char **cmdlin

Linux内核源码分析方法

  一.内核源码之我见 Linux内核代码的庞大令不少人“望而生畏”,也正因为如此,使得人们对Linux的了解仅处于泛泛的层次.如果想透析Linux,深入操作系统的本质,阅读内核源码是最有效的途径.我们都知道,想成为优秀的程序员,需要大量的实践和代码的编写.编程固然重要,但是往往只编程的人很容易把自己局限在自己的知识领域内.如果要扩展自己知识的广度,我们需要多接触其他人编写的代码,尤其是水平比我们更高的人编写的代码.通过这种途径,我们可以跳出自己知识圈的束缚,进入他人的知识圈,了解更多甚至我们一

和菜鸟一起学linux内核源码之基础准备篇

注:以下大部分内容摘自Linux内核编程入门篇和linux内核完全注释 在工作的这段时间,发现我的visio画图熟悉了点点,总喜欢把什么源码啊,结构啊之类的就当作流程图来画来理解,因为对于图,有一个很直观的认识,所以接下去也是以图为中心. 关于linux内核体系结构 说到操作系统,我们都会知道windows操作系统,linux操作系统,苹果的iOS操作系统,以前很火的塞班操作系统,还有最近消费类电子很火的Android操作系统.一个完整的操作系统分为4个部分. 可以把这个理解为我们用的手机.其中

Linux内核源码分析--内核启动之(6)Image内核启动(do_basic_setup函数)(Linux-3.0 ARMv7)【转】

原文地址:Linux内核源码分析--内核启动之(6)Image内核启动(do_basic_setup函数)(Linux-3.0 ARMv7) 作者:tekkamanninja 转自:http://blog.chinaunix.net/uid-25909619-id-4938396.html 在基本分析完内核启动流程的之后,还有一个比较重要的初始化函数没有分析,那就是do_basic_setup.在内核init线程中调用了do_basic_setup,这个函数也做了很多内核和驱动的初始化工作,详解

Linux内核源码学习之 数据结构

本篇记录在学习Linux内核源码过程中对一些知道但不熟悉不会用的数据结构进行记录. union 是在学习进程复制函数do_fork中遇到的: <sched.h> union thread_union { struct thread_info thread_info; unsigned long stack[THREAD_SIZE/sizeof(long)]; }; struct  thread_info和stack被声明为union 共享空间 "联合"是一种特殊的类,也是一

ARMv8 Linux内核源码分析:__flush_dcache_all()

1.1 /* *  __flush_dcache_all() *  Flush the wholeD-cache. * Corrupted registers: x0-x7, x9-x11 */ ENTRY(__flush_dcache_all) //保证之前的访存指令的顺序 dsb sy //读cache level id register mrs x0, clidr_el1           // read clidr //取bits[26:24](Level of Coherency f