anroid源码下载和编译
本文是在Ubuntu10.10系统上进行实践的。
1 因为我们需要Android的模拟器,所以需要安装Android的SDK,并创建AVD,
可以一次命名为AVD15,AVD22,AVD23,...
AVD15对应1.5,AVD22对应2.2,AVD23对应2.3,...
获取.config文件:
在启动模拟器AVD15:
$emulator -avd AVD15
$pull /proc/config.gz . //将/proc/config.gz这个文件复制到本地的目录,对应Linux上运行该命令的当前工作的目录,下同
然后,将其解压并保存为.config,留待后面使用
2 arm编译器
去网站下载arm工具链
注意选择较早的版本,很有可能是google那班人在编译的时候 选择的是当时的最新的版本,但是后来就一直用那个版本
http://www.codesourcery.com/sgpp/lite/arm/portal/subscription?@template=lite
要之前的版本:点击 All versions 即可看到所有的发行版本,2008q3-41这个版本是经过很多人测试可以用的。
解压后,设置环境变量,将/usr/local/arm-2008q3/bin 添加到$PATH中
其中 /usr/local/为保存解压后的arm-tools-chain的根目录
3 下载Android的Linux内核
记 住是Android的Linux内核(git clone git://android.git.kernel.org/kernel/common.git),而不是通用的Linuxe内核源码(git clone git://android.git.kernel.org/kernel/linux-2.6.git)
$ git clone git://android.git.kernel.org/kernel/common.git kernel-common
//其中 kernel-common为存放从代码库下来的代码的目录,下同
这一步是个漫长的等待...
$ cd ~/kernel-common
$ git branch
$ android-2.6.36
//这个随着版本的变化而变化
4 下载完Android的Linux内核源码,你会发现在/arch/arm/configs/下没有goldfish_defconfig这个文件,恩我们需要check_out gold_fish版本(模拟器的硬件配置就是Gold_Fish的)
$ cd ~/kernel_common
$ git branch -a
$ *android-2.6.36
remotes/origin/HEAD -> origin/android-2.6.36
remotes/origin/android-2.6.35
remotes/origin/android-2.6.36
remotes/origin/archive/android-2.6.25
remotes/origin/archive/android-2.6.27
remotes/origin/archive/android-2.6.29
remotes/origin/archive/android-2.6.32
remotes/origin/archive/android-gldfish-2.6.29
remotes/origin/archive/android-goldfish-2.6.27
//以上显示是目前看到的,将来的某个时候可以就有点不同了,甚至老版本的Branch 名字也会被修改
//故要特别注意
$ git checkout remotes/origin/archive/android-gldfish-2.6.29
git checkout remotes/origin/android-goldfish-3.4
//这个过程就快多了,等待下载完数据
//git 这个东西确实不怎么好用,还是想念Windows上TortoiseSVN
当下载完,你就能在kernel-common/arch/arm/configs/下看到goldfish_defconfig这个文件
5 编译
1)将1中的.config文件拷贝到 ~/kernel_common目录下
2)修改 ~/kernel_common目录下的Makefile文件(修改两处) -- 修改之掐最好备份下这个文件,因为如果你修改了这个文件 用git获取新版本的时候
会提示Makefile文件被修改
ARCH ?= arm //制定CPU的架构为ARM
CROSS_COMPILE ?= arm-none-linux-gnueabi- //arm编译工具前缀
3)
$ make goldfish_defconfig
$ make -j2 //现在的机器都是双核的,这样代码编译就快多了
编译最后两行信息:
OBJCOPY arch/arm/boot/zImage
Kernel: arch/arm/boot/zImage is ready
6 用我们刚刚编译成功内核启动模拟器(这样不会对原有的模拟器产生任何的影响)
$ emulator -avd AVD15 -kernel ~/kernel_common/arch/arm/boot/zImage
如果模拟器能起来,那说明成功了。
打开另外一个终端,这样就能解决上面的终端被占用的情况下,也能使用终端
$ adb shell
#cd /proc
# cat version
Linux version 2.6.29-00262-gb0d93fb-dirty (dream@dream-VGN-FW351J) (gcc version 4.3.2 (Sourcery G++ Lite 2008q3-41) ) #1 Fri Dec 24 12:31:28 CST 2010
# cat cupinfo
cupinfo: No such file or directory
# cat cpuinfo
Processor : ARM926EJ-S rev 5 (v5l)
BogoMIPS : 272.79
Features : swp half thumb fastmult vfp edsp java
CPU implementer : 0x41
CPU architecture: 5TEJ
CPU variant : 0x0
CPU part : 0x926
CPU revision : 5
Hardware : Goldfish
Revision : 0000
Serial : 0000000000000000
注: dream@dream-VGN-FW351J,其中的 dream为当前登录Ubuntu的用户名,而dream-VGN-FW351J是机器名
Sourcery G++ Lite 2008q3-41 这个就是arm tools chain的版本了
参考文献:
5. http://android.git.kernel.org/
anroid源码下载和编译的更多相关文章
- android源码下载以及编译自己的ROM
android源码下载以及编译自己的ROM 最近发现kernel.org被墙了,为什么这种网站也能被墙了? 要想下载源码的话,只能绕过去了.下面是我从网上搜索到的一些下载方法: =========== ...
- Harmony OS 开发避坑指南——源码下载和编译
Harmony OS 开发避坑指南--源码下载和编译 本文介绍了如何下载鸿蒙系统源码,如何一次性配置可以编译三个目标平台(Hi3516,Hi3518和Hi3861)的编译环境,以及如何将源码编译为三个 ...
- springFramework 源码学习之源码下载与编译
1.源码下载 Spring已经将源码从svn迁移到了git.对于习惯了svn的人来说依然可以svn checkout,最好checkout到英文路径下,本人中文路径编译不过,具体原因不明,路径: ht ...
- [原创]Nexus5 源码下载、编译、真机烧录过程记录
asop使用清华镜像源https://mirror.tuna.tsinghua.edu.cn/help/AOSP/ 一开始使用每月初始化包的方式因为无法搞定版本的问题,没能通过编译,无奈,老老实实一点 ...
- Android 7.1.1系统源码下载、编译、刷机-Nexus 6实战
想成为一位合格的Android程序员或者一位Android高级工程师是十分有必要知道Android的框架层的工作原理,要知道其工作原理那么就需要阅读Android的源代码. 想要阅读Android的源 ...
- openwrt(一):openwrt源码下载及编译环境搭建
声明:从网上各位大神的博客学习,整理后记录,非原创. 注:请用非root用户来下载源码 导航: 1. openwrt编译环境搭建 2. openwrt源码下载 3. feeds更新 1. openwr ...
- openwrt开发笔记一:源码下载与编译
1.1 环境要求 编译系统:Linux发行版(本文使用Ubuntu) 编译一个可以安装的OpenWrt固件镜像文件(大约8MB大小的),你需要: 一个纯净的OpenWrt编译系统大约需要200MB的空 ...
- WebRTC源码开发(一)MacOS下源码下载、编译及Demo运行
工作需要测试网络传输算法,逐学习WebRTC源码 工作环境 Mac OS 10.14 Xcode 10.2.1 源码下载 从google(需要[你懂的]) 首先[你懂的] 打开终端,输入curl ww ...
- Android学习系列(38)--Android源码下载和编译
前面多篇文章介绍到如何下载和编译Android或者CM源码,不过一直都是放在<拓展系列>里.随着学习的深入,android源码是非常有参考和学习价值,强烈推荐大家都去下载,编译,学习,所以 ...
随机推荐
- HBase入门笔记--读性能优化
一.前言 在生产环境使用HBase过程中,随着数据量的不断增加,查询HBase数据变得越来越慢,对于业务来说是不可用的,需要对读性能进行优化 二.问题定位 从hbase监控指标来看,发现FullGC次 ...
- Java实现统计某字符串在另一个字符串中出现的次数
面试时会经常考这样的题目,估计也不让使用正则表达式.还好这个算法还算简单,不过在草稿纸上写难免会出现运行异常,好吧,面试官赢了,乃们屌丝就实实在在的把代码码出来吧. 谢谢“心扉”对我代码bug的纠正, ...
- scrapy进阶-编写中间件和扩展
中间件: 主要讨论的是下载中间件,明确一下顺序: download_middlewares --> server.url ---> spider_middleware 我主 ...
- #define const typedef
#define用法 1. 定义简单的常数:定义常量,便于修改 #define N 1000 2. 定义简单的函数:注意多使用括号 define可以像函数那样接受一些参数,如下: #define max ...
- C语言:九九乘法表打印
题目: 要求:用“,”分隔算式,用“:”做一行的结尾. 另外1*1=1:这个算式是程序的第一行,前面没有空行. 文字版如下: 输入格式: 无 输出格式: 1*1=1; 2*1=2,2*2=4; 3*1 ...
- USACO 5.4 Character Recognition
Character Recognition This problem requires you to write a program that performs character recogniti ...
- logstash部署及基本语法(二)
一.logstash介绍 Logstash是一个开源的数据收集引擎,可以水平伸缩,而且logstash是整个ELK当中拥有最多插件的一个组件,其可以接收来自不同源的数据并统一输入到指定的且可以是不同目 ...
- MongoDB入门教程三[数据类型]
MongoDB的文档使用BSON(Binary JSON)来组织数据,BSON类似于JSON,JSON只是一种简单的表示数据的方式,只包含了6种数据类型(null.布尔.数字.字符串.数组及对象),不 ...
- php中的PDO函数库详解
PHP中的PDO函数库详解 PDO是一个“数据库访问抽象层”,作用是统一各种数据库的访问接口,与mysql和mysqli的函数库相比,PDO让跨数据库的使用更具有亲和力:与ADODB和MDB2相比,P ...
- 安装 Git
是时候动手尝试下 Git 了,不过得先安装好它.有许多种安装方式,主要分为两种,一种是通过编译源代码来安装:另一种是使用为特定平台预编译好的安装包. 从源代码安装 若是条件允许,从源代码安装有很多好处 ...