前言:什么是CyanogenMOD
CyanogenMod(发音:sigh-AN-oh-jen-mod。简称cm):
Cyanogen团队是目前全球最大的Android第三方编译团队,其发布的Android 2.1内核CM5系列ROM被广泛使用,促进了用户从Android 1.6到Android 2.1版本的第三方升级。
这个小组曾经先于google公司为很多手机率先定制出稳定的1.6ROM。
CyanogenMod目前系列有
CM4(android1.6)、
CM5(android2.1)、
CM6(android2.2)、
CM7(android2.3)、
CM8(android3.*【用于平板电脑,所以不被关注】)、
CM9(android4.*)
CyanogenMod自我简介
系统
2008年9月HTC Dream电话发布后, 一种由Android社区发现其中一个可以在Android的Linux的子系统得到特权控制 "rooting"(也称为 "root access")的方法. 这个发现, 结合了Android开源的性质, 让手机的固件可以随意进行修改和重新安装到手机。某些手机并不需要进行修改, 如Android开发手机和Nexus One, 这些用作开发用途的手机上。
现时,CyanogenMod固件是基于Android2.3,也有大量由CyanogenMod的代码被加入了。CyanogenMod的自定部分本来是由Cyanogen (Steve Kondik)编写,不过加入了由xda-developers社区编写的代码(如已强化的主画面, 已强化的调用程序和已强化的网页浏览器)和其他的程序(如busybox)。
一个叫CyanogenMod Updater的程序提醒CyanogenMod用户有新版本的CyanogenMod及安装到他们的电话。用户可以在Android Market下载该程序。
特点
高度优化的内核,带有很多额外模块改进的RAM,
使用智能启动和优化安装选项
包含E2FSProgs可检查并转换Ext文件系统
自动安装Apps2SD
多个个分屏幕
自动适用方向
关机和重启依然具有干净的文件系统
不需要危险的SPL操作
包含大量APN列表
CPU工作频率
设置程序的大量改进
包括额外的分区
由cytown改进电话应用
还有很多
第一章:环境的搭建
1.系统选择和安装我使用的是 ubuntu LTS 10.04
建议使用X64版本,我使用的就是该版本
新手朋友推荐Deepin Linux 基于ubuntu定制的,适合新手使用
http://www.linuxdeepin.com/download
系统安装教程,以下方法通用于UBUNTU官方版本
U盘安装:http://wiki.linuxdeepin.com/index.php/Unetbootin
光盘安装:http://wiki.linuxdeepin.com/index.php/光盘安装
搭建android编译环境:
英文好的请猛击这里:WIKI: http://wiki.cyanogenmod.com/index.php?title=Building_from_source
1.安装JDK
因为ANDROID大部分东西是java写的,所以首先我们需要安装JDK
打开终端按照如下命令输入或者直接复制粘贴:
编译android 2.3 或者更新的版本请使用 jdk 6
$ sudo add-apt-repository "deb http://archive.canonical.com/ lucid partner"
$ sudo apt-get update
$ sudo apt-get install sun-java6-jdk
如果你需要编译的是2.2以下的版本请使用JDK 5,因为现在大家都是使用 Gingerbread 以上的系统,这里就不介绍jdk5如何安装的了,如果有需要请
2.安装各种依赖包
64位环境:依然是终端中输入
$ 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 python-markdown \
libxml2-utils xsltproc
如果这些依赖包依然不能解决你的问题,请参考如下:
http://wiki.cyanogenmod.com/wiki/HTC_Hero_(CDMA):_Compile_CyanogenMod_(Linux)
http://source.android.com/source/initializing.html
3.下载代码
打开终端:
我在我的个人目录下面使用的是android 代替我的工程,用cm7代替 CM7的源码 用CM9代替 CM9的源码
如果你要更新下载CM7的源码
请输入:
mkdir -p ~/bin
mkdir -p ~/android/cm7
个人目录下的 bin目录是为了保存repo 等更新脚本的
依然再终端输入:
-
curl https://dl-ssl.google.com/dl/googlesource/git-repo/repo > ~/bin/repo
-
chmod a+x ~/bin/repo
可以把 ~/bin/repo 加入到环境变量里面
在PATH=“”
ivanhuang为我个人目录的名称,也就是我的计算机登录名
更改结束之后
就能直接在终端中使用repo 命令了。
然后下一步 我们开始同步代码:
依然是打开终端输入
-
repo init -u git://github.com/CyanogenMod/android.git -b gingerbread
-
repo sync -j16
这个是更新CM7的源码
如果你要更新CM9的源码
请输入
repo init -u git://github.com/CyanogenMod/android.git -b ics
repo sync -j16 今天就到这里,其他按照机器适配等编译命令,请参考 cyanogenmod的wiki
上面已经列出
第一章:环境的搭建 补充
Ubuntu 中安装配置JDK
首先从SUN网站下载JDK
然后在shell中执行:
代码:
sudo chmod +x jdk-6u17-linux-i586.bin
修 改bin文件权限,使其可执行。
然后执行
代码:
jdk-6u17-linux-i586.bin
将 会出现字幕,持续按回车键,直到屏幕出现需要输入yes/no,此时输入yes/y 回车,将会把JDK解压到文件夹,得到jdk1.6.0_17.此时JDK安装完毕。下面进行配置。
执行
代码:
sudo gedit /etc/environment
在 environment中修改如下信息:
PATH="........:/home/cy/jdk1.6.0_17/bin"
CLASSPATH=".:/home/cy/jdk1.6.0_17/lib"
JAVA_HOME="/home/cy/jdk1.6.0_17"
由 于ubuntu中有默认jdk还需要执行如下工作
执行
代码:
sudo update-alternatives --install /usr/bin/java java /home/cy/jdk1.6.0_17/bin/java 300
sudo update-alternatives --install /usr/bin/javac javac /home/cy/jdk1.6.0_17/bin/javac 300
通过 这一步将我们安装的JDK加入java选单
然后执行。
代码:
sudo update-alternatives --config java
通 过这一步设置系统默认的JDK
然后在shell中执行
代码:
java -version
此时显示的系统中的java就是刚刚安装的 java
第二章:android 源码总体结构
第三章:移植第一步 编译recovery
本章介绍并且讲解如何编译一个支持你设备的recovery。
system
|-------device
这个就是目录结构,我们在roamer目录下面,新建
recovery_ui.c
AndroidBoard.mk
AndroidProducts.mk
BoardConfig.mk
device_roamer.mk
kernel
recovery.fstab
system.prop
从官方rom提取,比如 n760
首先我们写 AndroidBoard.mk
# 这一句的意思的 根目录就是roamer 目录
PRODUCT_MAKEFILES := \
$(LOCAL_DIR)/device_roamer.mk
USE_CAMERA_STUB := true
# inherit from the proprietary version
-include vendor/zte/roamer/BoardConfigVendor.mk
TARGET_NO_BOOTLOADER := true
TARGET_BOARD_PLATFORM := unknown
TARGET_CPU_ABI := armeabi
TARGET_BOOTLOADER_BOARD_NAME := roamer//此处一版为device
# 此处为打包 boot.img 的信息,可以通过厨房 查看到,我模糊的记得用厨房解压boot.img的时候的选项应该是打开厨房,选择0 高级,然后选择 20 ,再选择 S 就能看到下面这三个信息了
# dev:size erasesize name
# mtd0: 00600000 00020000 "recovery"
# mtd1: 00400000 00020000 "boot"
# mtd2: 00180000 00020000 "splash"
# mtd3: 00080000 00020000 "misc"
# mtd4: 03980000 00020000 "cache"
# mtd5: 0dc00000 00020000 "system"
# mtd6: 0a280000 00020000 "userdata"
# mtd7: 00100000 00020000 "oem"
# mtd8: 00180000 00020000 "persist"
BOARD_BOOTIMAGE_PARTITION_SIZE:= 0x00500000
BOARD_RECOVERYIMAGE_PARTITION_SIZE := 0x00600000
BOARD_SYSTEMIMAGE_PARTITION_SIZE:= 0x0dc00000
BOARD_USERDATAIMAGE_PARTITION_SIZE := 0x0a280000
BOARD_FLASH_BLOCK_SIZE := 131072
# 内核路径
TARGET_PREBUILT_KERNEL := device/zte/roamer/kernel
# 一般情况下,手机没有实体返回键,建议选择这一项,有的手机触摸返回键在recovery下面不能使用的,比如小米手机。
BOARD_HAS_NO_SELECT_BUTTON := true# 编译recovery 指定 keymap 文件,看参数名称就知道了,不懂的可以google翻译
#语言配置文件
$(call inherit-product, $(SRC_TARGET_DIR)/product/languages_full.mk)
# The gps config appropriate for this devicegps配置文件
$(call inherit-product, device/common/gps/gps_as_supl.mk)
# vendor 私有库配置文件
$(call inherit-product-if-exists, vendor/zte/roamer/roamer-vendor.mk)
#有些你需要对应用 或者 framework 进行初始化设定值的地方
DEVICE_PACKAGE_OVERLAYS += device/zte/roamer/overlay
#kernel路径选择
ifeq ($(TARGET_PREBUILT_KERNEL),)
LOCAL_KERNEL := device/zte/roamer/kernelelseLOCAL_KERNEL := $(TARGET_PREBUILT_KERNEL)endif
PRODUCT_COPY_FILES += \$(LOCAL_KERNEL):kernel
$(call inherit-product, build/target/product/full.mk)
PRODUCT_BUILD_PROP_OVERRIDES += BUILD_UTC_DATE=0PRODUCT_NAME := full_roamerPRODUCT_DEVICE := roamer