2025-05-08 20:14:03 世界杯冠军教练

前言:什么是CyanogenMOD

借鉴百度百科的介绍:http://baike.baidu.com/view/5079569.htm

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自我简介

What is CyanogenMod?CyanogenMod is an aftermarket firmware for a number of cell phones based on the open-source Android operating system. It offers features not found in the official Android based firmwares of vendors of these cell phones.

系统

CyanogenMod是一个基于开源Android系统,供某些手机使用的二级市场固件。它提供一些在官方Android系统或手机厂商没有提供的功能,例如:支持Free Lossless Audio Codec- FLAC (无损音频压缩编码)音频格式的音乐,多点触控, 从SD外置存储器运行程序,压缩缓存,大量APN的名单,重新启动功能,Wi-Fi无线网络支持,蓝牙,USB网络分享等。CyanogenMod也是第一个使用BFS作任务管理器的操作系统。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

建议使用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如何安装的了,如果有需要请

度娘 或者 google

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 加入到环境变量里面

终端输入 sudo gedit /etc/environment

在PATH=“” 加入 PATH="/home/ivanhuang/bin:"

ivanhuang为我个人目录的名称,也就是我的计算机登录名

更改结束之后 终端输入 source /etc/environment

就能直接在终端中使用repo 命令了。

然后下一步 我们开始同步代码:

依然是打开终端输入

cd android/cm7

repo init -u git://github.com/CyanogenMod/android.git -b gingerbread

repo sync -j16

这个是更新CM7的源码 Gingerbread分支的

如果你要更新CM9的源码

请输入

mkdir -p android/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 源码总体结构

– Makefile (全局的Makefile文件)

– bionic (Bionic含义为仿生,这里面是一些基础的C库源代码)

– bootloader (引导加载器)

build目录中的内容不是目标所用的代码,而是编译和配置所需要的脚本和工具)

– build (build目录中的内容不是目标所用的代码,而是编译和配置所需要的脚本和工具)

– cts (Android兼容性测试套件标准)

– libcore (核心库相关)

Dalvik虚拟机 针对嵌入式设备优化的Java

Java虚拟机)

– dalvik ( Dalvik虚拟机,针对嵌入式设备优化的Java虚拟机)

– development (创建应用程序所需要的模板和工具)

qcom,

– device (与具体设备相关的一些编译脚本和库,如htc,qcom,samsung等)

– external (Android使用的一些外部的开源框架和库)

(应用程序的框架层,SDK

SDK的接口基本都是在这里实现的)

– frameworks (应用程序的框架层,SDK的接口基本都是在这里实现的)

– hardware (与硬件相关的库)

Linux2.6

– kernel (Linux2.6的内核源代码)

– ndk (本地开发套件--C语言开发套件)

--C

Android的各种应用程序)

– packages (Android的各种应用程序)

– prebuilt (Android在各种平台下编译的预置脚本)

– sdk (SDK及模拟器)

Android的底层的一些库)

– system (Android的底层的一些库)

`– vendor (厂商私有的代码)

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

packages/

|– apps (各种应用程序,如联系人、浏览器等)

|– experimental (一些实验性的项目,如错误报告)

|– inputmethods (输入法相关)

|– providers (各种数据源实现,如联系人数据、媒体库等信息)

|– wallpapers (各种壁纸程序)

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Android Framework功能介绍

android.app :提供高层的程序模型和基本的运行环境。

android.content :包含对各种设备上的数据进行访问和发布。

android.database :通过内容提供者浏览和操作数据库。

android.graphics :底层图形库,包含画布、点、矩形等,可以将其直接绘制到屏幕上。

android.location :定位和相关服务的类。

android.media :提供一些类管理多种音频、视频的媒体接口。

android.net :提供帮助网络访问的类,超过通常的 java.net.* 接口。

android.os :提供了系统服务、消息传输和 IPC 机制。

android.opengl :提供 OpenGL 的工具。

android.provider :提供访问 Android 内容提供者的类。

android.telephony :提供与拨打电话相关的 API 交互。

android.view :提供基础的用户界面接口框架。

android.util :涉及工具性的方法,例如时间日期的操作。

android.webkit :默认浏览器操作接口。

android.widget :包含各种 UI 元素(大部分是可见的)在应用程序的布局中使用

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

build/

|– buildspec.mk.default

|– cleanspec.mk

|– core (各种以mk为结尾的文件,它门是编译所需要的Makefile)

|– envsetup.sh

|– libs

|– target (包含board和product两个目录,为目标所需要文件)

|– tools (编译过程中主机所需要的工具,一些需要经过编译生成)

其中,core中的Makefile是整个Android编译所需要的真正的

Makefile,它被顶层目录的Makefile引用。

基本介绍到此,文章参考网络中各种文章,如果有侵权啥行为的,请联系删除。

第三章:移植第一步 编译recovery

本章介绍并且讲解如何编译一个支持你设备的recovery。

前面已经介绍过CyanogenMod是什么东西,以及环境搭建,android源码的大概框架。地址:

http://blog.sina.com.cn/u/1697247850

,所以这里就不再介绍。

首先你要确定你的设备,是否支持刷第三方recovery,或者是否支持fastboot模式,或者是否解锁bootloader,如果你的设备上述都不支持,那么你的机器可能就不能移植第三方系统。如果这样请跳过本文。当你确定你的设备有支持上述所讲的,那么恭喜你,你的设备可以移植第三方系统。

接下来我们开始干活了,工欲善其事,必先利其器。制作支持你手持设备的recovery。这里以中兴n760为例子介绍如何编译 支持中兴n760的recovery.

如果你已经下载了cm源码,请往下看,如果你没有下载源码,请按照前面发的教程下载源码.首先在device目录下面建立一个zte目录,这个目录是厂商的名字,例如中兴就是zte 我就建立zte,华为的话我就建立huawei,然后在zte 目录下面 建立一个目录为 roamer 这个名字如何得到呢,在手机rom里面 system/build.prop 目录下面搜索 ro.product.device 你会发现 ro.product.device = roamer 所以我把设备名称定为 roamer 目录都新建好了之后,我们来看一下 目录树

system

|-------device

|-------zte

|----roamer

这个就是目录结构,我们在roamer目录下面,新建

recovery_ui.c 这个文件里面是 手机各按键对应的 按键值,这样写入之后才能正确选择按键

AndroidBoard.mk 连接地址到 kernel

AndroidProducts.mk 让编译工具连接到device_roamer.mk

BoardConfig.mk 手持设备机器CPU GPU 型号参数配置

device_roamer.mk build.prop信息添加,私有库 xml文件 init文件拷贝 按机器设备device来写 roamer是N760的设备型号

kernel 官方提取,boot.img提取提取可以使用国外高手制作的厨房软件

recovery.fstab 手机分区表

system.prop 可有可无

从官方rom提取,比如 n760 boot.img 里面提取的 init.roamer.rc 文件 这个也是需要这些文件的.

首先我们写 AndroidBoard.mk 文件

# 这一句的意思的 根目录就是 roamer 目录

AndroidProducts.mk

看文件名

PRODUCT_MAKEFILES := \ $(LOCAL_DIR)/device_roamer.mk

BoardConfig.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翻译

device_roamer.mk 这个是编译recovery的时候我写的,有些东西可以不要,以后编译rom的时候需要删除重写的

#语言配置文件

$(call inherit-product, $(SRC_TARGET_DIR)/product/languages_full.mk)

# The gps config appropriate for this device

gps配置文件

$(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/kernel

else

LOCAL_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=0

PRODUCT_NAME := full_roamer

PRODUCT_DEVICE := roamer

recovery.fastab 官方recovery.img提取 自己想个办法,我用厨房提取的

全部写好之后 在源码根目录

用终端输入

. build/envsetup.sh

然后输入lunch

选择你的设备

然后输入

make recoveryimage

就可以编译了

编译结束之后,到out/target/product/roamer目录下面可以发现 recovery.img 这个文件

使用fastboot 工具到fastboot 模式下面刷写,刷写命令为 fastboot flash recovery recovery.img

教程到此结束,有关如何进入fastboot模式 recovery模式,还有fastboot工具使用,请google 或者 baidu

谢谢