鲜红斑痣治疗费用:我的 G1终于装上了自己编译的ROM - ning的日志 LUPA开源社区

来源:百度文库 编辑:九乡新闻网 时间:2024/04/28 20:36:22
首先声明一下: 烧ROM有风险,变砖不要砸我。

再过3个月,我的G1就快一岁了,但始终用着安卓网 www.hiapk.com 提供的现成编译好的ROM。做为当初购买的理由,就是打算在上面做一些自己的开发,这么多时间过去了,终于下定决心开始自己编个ROM。

作为第一步,当然是google编译ROM的网页信息,但遗憾的是,国内的android玩家绝大多都是刷别人的ROM,很少有自己编ROM的(这个结论不见得正确,只是从网页上公开的信息得出来的)。因此国内的网站上很少有介绍ROM编译的信息的。我把这一周来折腾ROM的过程和碰到了问题记录下来,供对ROM制作有兴趣的朋友参考。

一开始打算跟随鼎鼎大名的cyanogenmod http://www.cyanogenmod.com/ ,找到了编译ROM的方法wiki http://wiki.cyanogenmod.com/index.php/Compile_for_dream ,但是编译的时候出现错误,一直无法解决。由于 cyanogenmod wiki上说明的Ubuntu的版本是10.04的,于是我也将我的 8.04版本的 Ubuntu重装更新了。但编译还是有问题。最后终于发现了wiki上的第一句话 “***WORK IN PROGRESS***”,然后再仔细看wiki,发现wiki不再是原来的了,最大的区别是,原来是编译 donut (android v1.6),现在变成 eclair (android v2.1)的了。顿时晕倒!与时俱进害死人,暂时先放弃吧。

在网上又找到了另一个制作 ROM的链接 http://nhenze.net/?p=311  按照他的方法,终于编译成功。具体步骤如下:

原来网页推荐的是用 VirtualBox 虚拟机安装Ubuntu,本人还是推荐直接安装Ubuntu,因为代码量很大,编译时间是以小时计算的(针对第一次编译),虚拟机运行速度较慢。

网页上安装的Ubuntu是9.10版本,我用的是10.04版本,没有问题。

安装以下的软件包:
sudo apt-get install git-core gnupg flex bison gperf libsdl-dev libesd0-dev libwxgtk2.6-dev build-essential zip curl libncurses5-dev zlib1g-dev

由于Java5的安装源不在Ubuntu的官方源上,因此需要增加Java5包的源。
sudo gedit /etc/apt/sources.list

将下面两行放在该文件的最后。
deb http://us.archive.ubuntu.com/ubuntu/ jaunty multiverse
deb http://us.archive.ubuntu.com/ubuntu/ jaunty-updates multiverse

保存退出后,使用下面的两条命令,安装java5。
sudo apt-get update
sudo apt-get install sun-java5-jdk

接下来安装repo工具,用来下载 android源代码。
cd ~
mkdir bin
curl http://android.git.kernel.org/repo >~/bin/repo
chmod a+x ~/bin/repo

安装unyaffs工具,用来解压使用yaffs文件系统制作的文件
curl http://unyaffs.googlecode.com/files/unyaffs >~/bin/unyaffs
chmod a+x ~/bin/unyaffs

将下面的路径添加到环境变量文件 .bashrc (我没有安装android的SDK,因此这里没有将sdk的路径添加上去,第二行是添加fastboot的路径,后文有提到)
PATH=~/bin:$PATH
PATH=~/mydroid/out/host/linux-x86/bin:$PATH
export PATH

使环境变量生效
source ~/.bashrc

下载android源代码,大约需要1.5个小时,取决于你的带宽。
mkdir mydroid
cd mydroid
repo init -u git://android.git.kernel.org/platform/manifest.git -b donut-plus-aosp
repo sync

从HTC开发网站 http://developer.htc.com/adp.html 下载下面两个文件,因为我是编译donut版本(android v1.6),因此需要下载:
signed-dream_devphone_userdebug-ota-14721.zip
signed-dream_devphone_userdebug-img-14721.zip

将signed-dream_devphone_userdebug-ota-14721.zip拷贝到~/mydroid,解压出部分需要的文件。
cp signed-dream_devphone_userdebug-ota-14721.zip ~/mydroid
cd ~/mydroid/vendor/htc/dream-open
./unzip-files.sh

将HTC预编译好的闭源的google的文件解压
cd ~
mkdir htc
cp signed-dream_devphone_userdebug-img-14721.zip ~/htc
cd ~/htc
unzip signed-dream_devphone_userdebug-img-14721.zip
unyaffs system.img

从 http://nhenze.net/temp/copy_google_apps.sh 下载copy_google_apps.sh到 ~/htc 并运行之
./copy_google_apps.sh

脚本的内容如下,主要是将HTC预编译好的闭源的google的文件拷贝到android工作路径,否则编译好的ROM中没有象GMAIL/Google Map/Gtalk/YouTube等应用。

mkdir -p ~/mydroid/vendor/google/app
cp ~/htc/app/Email.apk ~/mydroid/vendor/google/app/Email.apk
cp ~/htc/app/GlobalSearch.apk ~/mydroid/vendor/google/app/GlobalSearch.apk
cp ~/htc/app/GoogleCheckin.apk ~/mydroid/vendor/google/app/GoogleCheckin.apk
cp ~/htc/app/ImProvider.apk ~/mydroid/vendor/google/app/ImProvider.apk
cp ~/htc/app/Gmail.apk ~/mydroid/vendor/google/app/Gmail.apk
cp ~/htc/app/GmailProvider.apk ~/mydroid/vendor/google/app/GmailProvider.apk
cp ~/htc/app/GoogleApps.apk ~/mydroid/vendor/google/app/GoogleApps.apk
cp ~/htc/app/GoogleContactsProvider.apk ~/mydroid/vendor/google/app/GoogleContactsProvider.apk
cp ~/htc/app/GooglePartnerSetup.apk ~/mydroid/vendor/google/app/GooglePartnerSetup.apk
cp ~/htc/app/GoogleSettingsProvider.apk ~/mydroid/vendor/google/app/GoogleSettingsProvider.apk
cp ~/htc/app/GoogleSubscribedFeedsProvider.apk ~/mydroid/vendor/google/app/GoogleSubscribedFeedsProvider.apk
cp ~/htc/app/gtalkservice.apk ~/mydroid/vendor/google/app/gtalkservice.apk
cp ~/htc/app/Maps.apk ~/mydroid/vendor/google/app/Maps.apk
cp ~/htc/app/MediaUploader.apk ~/mydroid/vendor/google/app/MediaUploader.apk
cp ~/htc/app/NetworkLocation.apk ~/mydroid/vendor/google/app/NetworkLocation.apk
cp ~/htc/app/SetupWizard.apk ~/mydroid/vendor/google/app/SetupWizard.apk
cp ~/htc/app/Street.apk ~/mydroid/vendor/google/app/Street.apk
cp ~/htc/app/Talk.apk ~/mydroid/vendor/google/app/Talk.apk
cp ~/htc/app/Vending.apk ~/mydroid/vendor/google/app/Vending.apk
cp ~/htc/app/VoiceSearch.apk ~/mydroid/vendor/google/app/VoiceSearch.apk
cp ~/htc/app/YouTube.apk ~/mydroid/vendor/google/app/YouTube.apk

mkdir -p ~/mydroid/vendor/google/etc/permissions
cp ~/htc/etc/permissions/com.google.android.gtalkservice.xml ~/mydroid/vendor/google/etc/permissions/com.google.android.gtalkservice.xml
cp ~/htc/etc/permissions/com.google.android.maps.xml ~/mydroid/vendor/google/etc/permissions/com.google.android.maps.xml

mkdir -p ~/mydroid/vendor/google/framework
cp ~/htc/framework/com.google.android.gtalkservice.jar ~/mydroid/vendor/google/framework/com.google.android.gtalkservice.jar
cp ~/htc/framework/com.google.android.maps.jar ~/mydroid/vendor/google/framework/com.google.android.maps.jar

然后更改相关的Makefile,确保android能够将这些闭源的Google应用编译进去。
下载 http://nhenze.net/temp/device_dream.mk 到 ~/mydroid/vendor/htc/dream-open/device_dream.mk

device_dream.mk内容如下:
#
# Copyright (C) 2009 The Android Open-Source Project
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#      http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#

# To be included directly by a device_dream_*.mk makefile;
# do not use inherit-product on this file.

DEVICE_PACKAGE_OVERLAYS := vendor/htc/dream-open/overlay vendor/htc/common-open/overlay

PRODUCT_PROPERTY_OVERRIDES := \
    ro.config.notification_sound=F1_New_SMS.ogg \
    ro.com.google.locationfeatures=1

PRODUCT_PACKAGES := \
    framework-res \
    Browser \
    Contacts \
    Launcher \
    HTMLViewer \
    Phone \
    DownloadProvider \
    GoogleSearch \
    MediaProvider \
    SettingsProvider \
    TelephonyProvider \
    UserDictionaryProvider \
    PackageInstaller \
    Bugreport \
    AlarmClock \
    AlarmProvider \
    Calendar \
    Camera \
    DrmProvider \
    LatinIME \
    Mms \
    Music \
    Settings \
    Sync \
    Updater \
    CalendarProvider \
    SyncProvider \
    Calculator \
    Email \
    ImProvider \
    VoiceDialer

PRODUCT_COPY_FILES := \
        vendor/google/app/ImProvider.apk:system/app/ImProvider.apk \
        vendor/google/app/Email.apk:system/app/Email.apk \
        vendor/google/app/GlobalSearch.apk:system/app/GlobalSearch.apk \
        vendor/google/app/Gmail.apk:system/app/Gmail.apk \
        vendor/google/app/GmailProvider.apk:system/app/GmailProvider.apk \
        vendor/google/app/GoogleCheckin.apk:system/app/GoogleCheckin.apk \
        vendor/google/app/GoogleApps.apk:system/app/GoogleApps.apk \
        vendor/google/app/GoogleContactsProvider.apk:system/app/GoogleContactsProvider.apk \
        vendor/google/app/GooglePartnerSetup.apk:system/app/GooglePartnerSetup.apk \
        vendor/google/app/GoogleSettingsProvider.apk:system/app/GoogleSettingsProvider.apk \
        vendor/google/app/GoogleSubscribedFeedsProvider.apk:system/app/GoogleSubscribedFeedsProvider.apk \
        vendor/google/app/gtalkservice.apk:system/app/gtalkservice.apk \
        vendor/google/app/Maps.apk:system/app/Maps.apk \
        vendor/google/app/MediaUploader.apk:system/app/MediaUploader.apk \
        vendor/google/app/NetworkLocation.apk:system/app/NetworkLocation.apk \
        vendor/google/app/SetupWizard.apk:system/app/SetupWizard.apk \
        vendor/google/app/Street.apk:system/app/Street.apk \
        vendor/google/app/Talk.apk:system/app/Talk.apk \
        vendor/google/app/Vending.apk:system/app/Vending.apk \
        vendor/google/app/VoiceSearch.apk:system/app/VoiceSearch.apk \
        vendor/google/app/YouTube.apk:system/app/YouTube.apk \
        vendor/google/etc/permissions/com.google.android.gtalkservice.xml:system/etc/permissions/com.google.android.gtalkservice.xml \
        vendor/google/etc/permissions/com.google.android.maps.xml:system/etc/permissions/com.google.android.maps.xml \
        vendor/google/framework/com.google.android.gtalkservice.jar:system/framework/com.google.android.gtalkservice.jar \
        vendor/google/framework/com.google.android.maps.jar:system/framework/com.google.android.maps.jar

回到android目录,进行编译,编译的时间很长,反正我等了一个多小时还没完,就睡觉去了。
cd ~/mydroid
. build/envsetup.sh
lunch aosp_dream_us-eng
make

编译出来的文件在目下: ~/mydroid/out/target/product/dream-open下,可以看到 boot.img recovery.img system.img userdate.img

编译成功后,接下来就要刷ROM了。这里介绍的方法是用fastboot进行刷,fastboot是android编译出来的应用,在out/target/product/dream-open路径。这里与安卓网介绍了用recovery进行刷不一样。

注意!!!
刷前,请先看后文中刷ROM的介绍,以免变砖!!!


G1关机,然后按相机按钮+挂机按钮进入HBOOT,显示如下:

DREA110 PVT 32B
HBOOT-0.95.0000
CPLD-4
RADIO-2.22.19.26I
Sep 2 2008

网页上提示进入HBOOT后,再按 BACK按钮就进入fastboot模式,但是我按了N遍BACK无反应。于是只好又开始google。

发现HBOOT-0.95.0000版本是stock SPL版本 (在安卓网上的名称为 “非SPL”),也就是出厂版本,没有fastboot功能。需要刷engineering SPL(在安卓网上的名称为“SPL”)。于是 按照安卓网的 http://www.hiapk.com/bbs/thread-53451-1-1.html 刷了SPL,然后在进入HBOOT模式,显示如下:

DREA110 PVT 32B ENG S-OFF
HBOOT-1.33.2005 (DREA11000)
CPLD-4
RADIO-2.22.19.26I
Apr 20 2009, 15:30:43

按 BACK键,出现 “FASTBOOT USB”

开始刷ROM
cd ~/mydroid/out/target/product/dream-open
fastboot flash boot boot.img
fastboot flash system system.img
fastboot flash recovery recovery.img
fastboot flash userdata userdata.img
fastboot reboot

发现提示 < waiting for device> ,fastboot始终处于等待状态,看来是usb驱动的问题,于是再次google之。

在 http://forum.xda-developers.com/showthread.php?t=537508 找到了对应的方法,新建一个文件 /etc/udev/rules.d/51-android.rules ,内容写入 SUBSYSTEM=="usb", SYSFS{idVendor}=="0bb4", MODE="0666" 后保存,然后重启udev服务  service udev restart

再用 fastboot命令刷,终于成功!

启动G1后,终于看到了熟悉的界面。不过gmail账号连接不上,手机恢复缺省配置后ok。





因为刷ROM有风险,担心变砖,因此也搜索了一些信息,汇总一下:

1.  我的是g1的机器,其他机器不清楚,请不要对号入座。
2.  HBOOT提示的机器类型为 DREAM PVT 32B,非该类型请谨慎,不建议刷。
3.  RADIO版本必须要为 2.22.19.26I,非此版本,刷机后100%变砖
4.  刷机时务必电池要有电,不要刷了一半没电了,或者是电池掉出来了。因此USB线请一直连着,电池掉出来也不怕。

从上面的信息,我推测,变砖的最大可能就是HBOOT升级出现问题,其他的升级 recovery system userdate理论上应该不会挂掉(只是理论上的猜想)。开发过单板的朋友应该比较清楚,如果booter和硬件不匹配,booter是起不来的(针对上面的1和2)。booter在启动的过程中可能会检查RADIO版本的配套关系,不匹配则重启(针对3)。booter没有烧完成,会跑飞(针对4)。希望HBOOT有源码,可以验证下我的想法。

上面的过程只是万里长征的第一步,定制还没有做(比如ROM版本不是root权限),希望有时间把 android再研究透一些。

ning
chou.o.ning@gmail.com
2010.5.30 凌晨