Android源代码由两部分组成,其一是Android系统应用部分的代码,其次是Android所使用的内核代码,
由于公司是针对Google nexus s来开发rom,所以需要下载三星的内核代码
Android 系统应用代码
http://android.git.kernel.org/
Android内核代码
http://android.git.kernel.org/?p=kernel/samsung.git
准备阶段:安装JDK
Java 6: for Gingerbread and newer
$ sudo add-apt-repository "deb http://archive.canonical.com/ lucid partner"
$ sudo add-apt-repository "deb-src http://archive.canonical.com/ubuntu lucid partner"
$ sudo apt-get update
$ sudo apt-get install sun-java6-jdk
Java 5: for Froyo and older
$ sudo add-apt-repository "deb http://archive.ubuntu.com/ubuntu dapper main multiverse"
$ sudo add-apt-repository "deb http://archive.ubuntu.com/ubuntu dapper-updates main multiverse"
$ sudo apt-get update
$ sudo apt-get install sun-java5-jdk
1、安装一些必备的软件。
Git是Linux Torvalds为了帮助管理Linux内核而开发的一个开放源码的分布式版本控制系统软件,它不同于SVN,CVS这样集中式的版本控制系统。在集中式版本控制系统中只有一个仓库(repository),
许多个工作目录,而git这样的分布式控制系统中,每一个工作目录都包含一个完整仓库,它们支持离线工作,
本地提交可以稍后提交到服务器上。分布式系统理论上也比集中 式的单服务器系统更健壮,单服务器系统一旦
服务器出现问题整个系统就不能运行了,分布式系统通常不会因为一两个节点而收到影响。
因为Android是由kernel,Dalvik,Bionic,prebuild,build等多个Git项目组成,
所以Android项目编写了一个名为repo的python的脚本来统一管理这些项目的仓库,使得Git的使用更加简单。
$sudo apt-get install git-core gnupg flex bison gperf build-essential \
zip curl zlib1g-dev libc6-dev lib32ncurses5-dev ia32-libs \
x11proto-core-dev libx11-dev lib32readline5-dev lib32z-dev \
libgl1-mesa-dev g++-multilib mingw32 tofrodos
2、创建源代码目录
首先确保在当前用户的主目录下创建一个/bin目录(如果没有的话),然后把它加到PATH环境变量中,
这个bin目录名字随便,是用来存放你下载的android系统应用源代码的
#cd
#mkdir bin
#export PATH=$PATH:/root/bin
3、用curl下载repo脚本,并保存在~/bin/repo文件中
#curl http://android.git.kernel.org/repo >~/bin/repo
为repo加上执行权限
#chmod a+x ~/bin/repo
4、初始化版本库
由于google nexus s所使用的是android 2.3.4版本的系统
首先建立一个目录,用来存放下载下来的东西
#mkdir repo
#cd repo
选择你所下载的版本号,Nexus S对应的是crespo android-2.3.4_r1
Device Branch Build configuration
crespo android-2.3.4_r1 full_crespo-userdebug
crespo4g gingerbread full_crespo4g-userdebug
passion android-2.3.4_r1 full_passion-userdebug
sapphire android-2.2.2_r1 full_sapphire-userdebug
dream android-2.2.2_r1 full_dream-userdebug
以后,执行如下命令
#repo init -u git://android.git.kernel.org/platform/manifest.git -b android-2.3.4_r1
由于之前下载的是android2.3.3版本的,所用的参数是android-2.3.3_r1。由于最新的是android-2.3.4_r1,所以使用上面即可下载2.3.4的源代码
注意:如果要是把所有的版本都下载下来,那时间是需要很久很久的,需要耐心等待,但是如果仅仅是下载某一个版本的话,
很快就可以了。
最后,如果看到repo initialized in /repo的提示,说明本地的版本库已经初始化成功了(期间需要你填写姓名和邮件)
5、执行repo sync命令
在执行该命令之前,需要做一些改动,因为如果用git的方式下载的话,需要很多时间不说,而且不一定有结果,可能还会出现
Connection timed out错误等。所以进入.repo文件夹下打开后找到清单manifest.xml(manifest.xml为隐藏文件,
得显示文件后才能看到)
#cd .repo
#ll
#vim mainfest.xml
将fetch=”
git://android.git.kernel.org/”修改为fetch=”http//android.git.kernel.org”[[br
]] 通过用http的方式穿透,然后执行repo sync
#repo sync
如果出现如下的字样的话,说明下载完成了,否则,嘿嘿,你懂的。
Syncing work tree:100%(168/168),done.
这个下载过程同样需要很久,少则几个小时,多则几天,依赖于网速
6、编译Android系统应用的源代码
经过漫长的等待,在执行repo sync命令后约1天时间以后,终于将源码下载完成,然后进入bin目录
#cd ~/bin
(注意,是在root用户下)
这里的这个bin目录其实就是你下载后源代码所在的位置,查看该文件夹下的东西类似如下
|-- Makefile |-- bionic (bionic C库)
|-- bootable (启动引导相关代码)
|-- build (存放系统编译规则及generic等基础开发包配置)
|-- cts (Android兼容性测试套件标准)
|-- dalvik (dalvik JAVA虚拟机)
|-- development (应用程序开发相关)
|-- external (android使用的一些开源的模组)
|-- frameworks (核心框架——java及C++语言)
|-- hardware (主要保护硬解适配层HAL代码)
|-- out (编译完成后的代码输出与此目录)
|-- packages (应用程序包)
|-- prebuilt (x86和arm架构下预编译的一些资源)
|-- sdk (sdk及模拟器)
|-- system (文件系统库、应用及组件——C语言)
`-- vendor (厂商定制代码)
这时,如果直接执行make命令的话,会出现错误,这是因为在make(编译)之前,需要安装一些依赖包才能够正常编译,
否则会出现各种各样的问题
7、编译Gingerbread系统源代码
首先,需要注意的是,下载后的源代码先不要编译,最好备份一下,然后再编译。不能直接make
(1)进入到你的bin目录下,清理编译过的文件,释放空间
#make installclean
#make clean
(2)用envsetup.sh脚本初始化环境变量
#source build/envsetup.sh
或者
#. build/envsetup.sh
(3)选择版本号,执行lunch操作
输入full_crespo_userdebug或者4
(4)开始编译源代码
#make -j4
其中-j(n)表示用n核cpu编译,这样会更快速,可以用top命令查看cpu的个数
完成编译大约1个小时左右
8、以下是各种错误对应的解决办法:
build/core/main.mk:73: You are attempting to build on a 32-bit system.
build/core/main.mk:74: Only 64-bit build environments are supported beyond froyo/2.2.
是因为froyo/2.2默认只支持64-bit,而我的计算机是32位的,所以需要修改一些文件即可
将
./external/clearsilver/cgi/Android.mk
./external/clearsilver/java-jni/Android.mk
./external/clearsilver/util/Android.mk
./external/clearsilver/cs/Android.mk
4个文件中的
LOCAL_CFLAGS += -m64
LOCAL_LDFLAGS += -m64
注释掉,或者将“64”换成“32”
LOCAL_CFLAGS += -m32
LOCAL_LDFLAGS += -m32
然后,将./build/core/main.mk 中的
ifneq (64,$(findstring 64,$(build_arch)))
改为:
ifneq (i686,$(findstring i686,$(build_arch)))
这样,32位的计算机也可以正常编译了
编译成功后,会在~/bin/目录下得到~/bin/out/target/product/crespo。编译好的源代码会在out目录下生成两个img镜像文件,可以先执行
#updatedb 创建数据库,用来方便查询所需的文件
#locate system.img
#locate userdata.img
9、配置环境变量
增加环境变量
#vim /root/.bashrc
在.bashrc中增加环境变量,如下
export ANDROID_PRODUCT_OUT=/root/bin/out/target/product/generic
ANDROID_PRODUCT_OUT_BIN=/root/bin/out/host/linux-x86/bin
export PATH=${PATH}:${ANDROID_PRODUCT_OUT_BIN}:${ANDROID_PRODUCT_OUT}
保存退出后,更新一下.bashrc
#source .bashrc
10、在模拟器上运行编译好的镜像文件
最后,同步这些变化:(注意,我的~是/root,我是以root用户登录的)
# source ~/.bashrc
# cd ~/android/out/target/product/crespo
# emulator -system system.img -data userdata.img -ramdisk ramdisk.img
最后进入android桌面,就说明成功了。 但是上面的只是系统应用源码编译完成后,用google自带的模拟器来运行测试的,而我需要用google nexus s
的三星的内核编译,所以还需要其他的动作要进行
11、下载Nexus s 的kernel source
#cd /root/bin
(你的项目创建的源代码,就是大多人用的~/mydroid这个目录)
#git clone git://android.git.kernel.org/kernel/samsung.git
下载完成后,会在bin目录下面出现一个samsung的文件夹,这个就是你刚才下载的内核源码所在的位置,现在开始编译
#export PATH=$PATH:/root/bin/prebuilt/linux-x86/toolchain/arm-eabi-4.4.3/bin/
#make ARCH=arm clean
#make ARCH=arm herring _defconfig
#make -j4 ARCH=arm CROSS_COMPILE=arm-eabi-
说明:上面四条语句要正确,尤其是路径要正确,否则后面执行make的时候会出现各种各样的错误
第一条:设置交叉编译链,这样内核编译环境就设置好了
第二条:为内核结构准备源目录树
第三条:内核参数设置
第四条:j4表示4核CPU
差不多一个小时左右,你会发现,在samsung目录下有
/root/bin/samsung/arch/arm/boot/zImage镜像文件
/root/bin/samsung/drivers/net/wireless/bcm4329/bcm4329.ko
12、将你的手机取得root权限
接下来,要将编译好的镜像文件放入到真机里进行测试,首先需要做的工作是先将你的手机root,
只有有了root权限以后才能够进行下一步操作。详细的Nexus S的root步骤参考wiki上的root教程,
因为只有手机root以后,才能够将自己编译好的内核在Nexus S上测试
13、在手机上运行编译好的samsung内核
现在的工作是将编译好的内核在Nexus S上测试,下载下面的附件,解压后将fastboot文件存放到你的SDK/tools目录下,
将unpack-booting.pl脚本文件和mkbootimg 二进制文件放入到你的roo目录下的NS-bootwork文件夹下,另外,
将你编译好的zImage镜像文件也好拷贝到此文件夹下(如果没有该文件夹,自己创建)
进入你的SDK/tools目录下,执行adb shell
$adb shell
此时,你的手机上显示“授权请求”,默认是10秒以后就过时了,所以需要在10秒之内,点击允许。点击允许以后,
$符号将会变成#,表示已经取得了root权限。(注意:手机必须root以后才能够使用)
将boot.img下载到本地,你可以用adb命令,也可以用终端程序
#adb shell
$su
#cat /dev/mtd/mtd2 > /sdcard/boot.img
退出adb到终端的tools目录下
#adb pull /sdcard/boot.img /root/NS-bootwork
#cd NS-bootwork
#./unpack-booting.pl boot.img
#cd boot.img-ramdisk/
#find . | cpio -o -H newc | gzip > /root/NS-bootwork/boot.img-ramdisk/ramdisk-repack.cpio.gz
#cd ..
#./mkbootimg --kernel zImage --ramdisk /root/NS-bootwork/boot.img-ramdisk/ramdisk-repack.cpio.gz
--base 0x30000000 --pagesize 4096 -o newtestboot.img
这样,就在该目录下生成了一个newtestboot.img镜像文件
进入到SDK/tools文件夹下,关闭你的手机。然后长按电源键和音量上键进入bootloader界面
在ubuntu的终端上执行
#cd /home/loulijun/android/android-sdk-linux_86/tools
#./fastboot boot newtestboot.img
(必须是root权限)
如果boot成功,说明你的内核是对的,点击“设置”--“关于手机”--“内核版本“
显示
2.6.35.7-ge382d80
root@ubuntu#1
说明成功了,但这只是测试,从新启动后,就会回复到之前的样子,可以再次执行上面的操作,可以看到
2.6.35.7-ge382d80
android-build@apa28
内核版本好都是一样的,说明下载的内核源代码跟手机用的是一样的
参考资料:
(1)
http://source.android.com/index.html
(2)
http://forums.androidcentral.com/t-mobile-nexus-s-rooting-roms-hacks/48675-how-compile-nexus-s-kernel-source.html
(3)
http://forum.xda-developers.com/showthread.php?t=704561
- 大小: 47.8 KB
- 大小: 60 KB
分享到:
相关推荐
最初,将Android Gingerbread相机源进行了分叉,然后进行了修改,使其向下兼容到API级别7(Eclair)。 视频功能也已删除。 然后,对该代码进行了进一步修改,以支持以下无法正常运行的设备: HTC Evo HTC Desire...
关于如何把ot990的2.2.2的安卓系统刷为2.3.4的系统,本人亲自测试,没有问题,驱动需要下载
如果您心急,想体验一下 Android 2.3.3(姜饼)最新的系统 那就下载这个 升级ROM吧! 不过这次,只给 FRG83G系统版本号的网友提供升级! 升级文件是:FRG83G系统版本号 更新至 GRI40 下载地址 ...
应有部分API没有包含,这次是修复好了,包含所有的API,最完整的Android4.0 API 源代码。 下载的压缩包里有使用方法,下载后在Eclipse里关联该压缩包即可使用。
大胆尝姜饼:HTC Legend G6开刷Android 2.3
缅甸语(Zawgyi-one)语言的Android姜饼键盘 简单的姜饼键盘。 Zawgyi自动校正。 有关缅甸语言的建议。 和更多....下载你可以从那里得到它变更记录版本2.1.0.0 错误修复版本2.0.0.0 添加5行模式添加5个新主题(三星...
姜饼机器人这是我和女儿为 2014 年圣诞节建造的姜饼机器人的代码。 图片在这里: :
2.3版的Gingerbread(姜饼).添加了sip通话的支持,在省电上下了功夫,做成了黑色主题 3.0版的Honeycomb(蜂巢)主要是针对平板电脑,为平板和手机的整合做准备,有了对设备的判断开关 4.0版的Ice cream SandWich...
id com.collegefootballstandings.app Android Gingerbread 10-Lollipop 23 显示2015-2016年大学橄榄球赛季的当前AP排名每个每周的排名通过文件服务器进行更新,该文件服务器将作为json流解析到应用程序流中被拉出,...
要求安卓Android Studio 2.1.2.0或更高版本SDK 10或更高版本(姜饼) NDK r12或更高版本构建工具23.0.3或更高版本的iOS Xcode 7.1或更高版本iOS 9.1或更高版本如果要在iDevice上运行: : 建筑(Android) 将DESCENT....
###目录###在完整和紧凑之间切换###要求### 带有 Eclipse 的 Android ADT 捆绑包注意:从 Eclipse 的角度编写,但与任何 Android 开发环境兼容。 最低目标 Android 版本:9 / 姜饼 快速开始本指南假定...
新版的姜饼溢出程序可以一键新版的姜饼溢出程序可以一键root
版本代码 杀死后台进程 重新开始 建造 操作系统版本 有纸杯蛋糕 有甜甜圈 有泡芙 有弗罗约 有姜饼 有蜂窝 有冰淇淋三明治 有果冻豆 有奇巧 设备 设备名称 SDK版本 电话号码 有相机 是模拟器 输入过滤器 全低 限制...
android桌面launcher源码 版本2.3 已修改源码 可以运行
亲测可用于很多普通软件root不了的系统
现在可以在Google Play上找到源代码现在保持在Classic Monitor是Midnite solar的Classic 150、200、250充电控制器的免费状态监视器。 这是一个只读程序,不会写入经典程序。 该软件按“原样”提供,没有任何明示或...
ACME姜饼工具包以圣诞节/冬季主题艺术的各种纹理进行折衷,从而可以构造姜饼结构,带有爆米花线的巨型圣诞树和条纹糖果结构块。 它与ACME Resource Pack结合使用。
Android 应用程序,它为用户推荐下一步吃什么! 适用于 Gingerbread 及以上版本。
eoeAndroid特刊第十四期:Android2.3特色讲解 pdf,目录:姜饼Android2.3的新特性介绍、有关NFC技术,Android2.3的模拟器Emulator安装教程,以及一些android2.3的翻译资料和实例教程等。