CyanogenMod 7

来源:互联网 发布:自然哲理 知乎 编辑:程序博客网 时间:2024/05/16 05:46

转自: http://blog.csdn.net/mirkerson/article/details/8834824

              http://zhidao.baidu.com/link?url=yKLV9Z1UyA3SCZqcZkDM0hCc_v6BEFte_9sERacDiuhgtWW4CLESXzVuUl---JrJCafDLI4peqsUvJpp-PI2iamS7qd5J--5jGFEY5ZfMDW

这个教程没写完善的,过于简陋,而且我还没有检查过,

不过我要去写作业去了,先占个位子,下次补全,
也许里面有什么错误哦,请及时指正我,毕竟我只是一个普通的linux开发爱好者,不够专业。
希望能有懂linux的同学加入编译u8500rom的行列,其实很简单的啦

下面主要讲的是如何编译这个cm7到u8500去,方法可能与tooken的不一样,貌似他的不是从源码编译的。。。汗

ok,tooken发布了千金版,可能大家对cm7没有什么印象,我以前编译过cm6,不过没有成功移植到u8500去,放假了,在网上看到tooken说要出cm7版,我就编译了最新的cm7试试,也可以运行,不过也只是能运行而已,
电话短信、gprs、wifi、相机、蓝牙等等的东西因为缺少u8500的hal层和我能力问题而无法继续,就是一个能运行android和一些软件的空架子而已。
这个帖子意在讲解一下编译android的一些东西,可能说得不太清楚,需要到Google、百度搜索一下,筒子需要一定的linux基础,有相关的移植经验的最好,意在增加u8500的第三方rom开发的同学。

cm7=CyanogenMod 7 
官方网站:http://www.cyanogenmod.com/
CyanogenMod是相对Google而言的第三方开源rom制作团队。
和Google闹过纠纷,后将Google的一些代码移除出去了,所以在原版的cm里面是不会出现Google的软件的,比如Gmail,Gtalk之类的。
cm6是2.2,cm7是2.3.3,支持很多机型的第三方应用,并且提供比原版效果更佳的体验,
中国最大的rom开发团队miui便是在cm的基础上二次开发而成。(我打算弄这个miui的移植,不过烦得很,单单就图像资源的重新打包就累死)
支持的机型(自然,木有u8500):http://www.cyanogenmod.com/devices
cm的特点很多,不过相信刷过tooken的cm7千金版的同学都会明白的,我也懒得写,毕竟网上介绍不少,

一,系统环境
推荐使用ubuntu 10.10,并且有10GB以上的空余空间。(事实上,我的cm7+cm6的代码一共编译后使用了 12.7 GB)
执行这个,加上一些源:
  1. sudo add-apt-repository "deb http://archive.canonical.com/ maverick partner"
  2. sudo apt-get update
复制代码
32位系统安装:
  1.    git-core gnupg flex bison gperf libsdl1.2-dev libesd0-dev 
  2. libwxgtk2.6-dev squashfs-tools build-essential zip curl libncurses5-dev 
  3. zlib1g-dev sun-java6-jdk pngcrush schedtool
复制代码
64位系统在上面的基础上安装:
  1.    g++-multilib lib32z1-dev lib32ncurses5-dev lib32readline5-dev 
  2. gcc-4.3-multilib g++-4.3-multilib
复制代码
安装 repo (Google的下载源码的一个python脚本)
  1.    curl http://android.git.kernel.org/repo > ~/bin/repo
  2.    chmod a+x ~/bin/repo
复制代码
同时可以将 ~/bin 作为PATH:将下面的代码加入到 ~/.bashrc 里面
  1. export PATH=$PATH:~/bin
复制代码


二,下载源码

cm的源码在github上,github是一个使用git作为项目管理的开源项目托管网站,在上面有很多开源的软件的项目,
here is it : https://github.com/CyanogenMod
建立你源码的目录,可以随意选一个目录,在这里是 ~/android ,
只要空闲空间在10GB左右(事实上,我的cm7+cm6的代码一共编译后使用了 12.7 GB)
将 ~/android 作为github的源码存放所在地,建立 git
  1. mkdir  ~/android
  2. cd ~/android
  3. repo init -u git://github.com/CyanogenMod/android.git -b gingerbread
复制代码
然后就是同步cm7到你本地去了,需要花费很长时间,我的宿舍网速很慢,舍友也要上网啊,二十来k的,下了整整三天,一共是5.5GB。

这里的16是多少线程下载而已,推荐8+,不然速度更慢。
也许会经常中断,可以自己写一个while脚本,循环执行这个。
  1. repo sync -j16
复制代码


三,配置你的设备

在同步完成后,(我同步的时候是有234个分支)
cm7自带有许多的设备的代码,在 devices/ 里面,我们的u8500木有支持,所以只能求助强大的TomG筒子,
他建立了中兴的blade(v880)和u8220的设备库,
就是这个:https://github.com/TomGiordano/android_device_huawei_u8220
在 ~/android/system 目录里面同步他的代码:
  1. git clone git://github.com/TomGiordano/android_device_huawei_u8220.git device/huawei/u8220
复制代码
同步完成后,连接你的设备:
  1. cd device/huawei/u8220
  2. ./extract-files.sh
复制代码
执行
  1. ~/android/vendor/cyanogen/get-rommanager
复制代码


四,编译
  1. cd ~/android
  2. source build/envsetup.sh
  3. lunch
复制代码
这里会提示选择你的设备,u8220貌似不能编译,没有设备标签。。。叉。。。我问tom,不过木有回应。
你选择cm的通用设备就好
  1. cyanogen_generic-eng
复制代码
然后就是编译啦,推荐8+个进程同时编译
  1. make -j16
复制代码
中间会提示一些错误,这些错误在每个人的机器上都是不同的,也许有,也许没有,我也忘了很多,大概只记得几个:

<>提示缺少某文件
——重新同步,或者到https://github.com/CyanogenMod里面找到对应的那个分支,
比如wibkit的分支,就可以直接 git checkout -f git://XXX 来强行同步

<>提示某线程kill
——重新执行 make -j16 就好了,是因为其线程的一些访问冲突或者是你的内存不足,挤掉部分的线程了?

<>提示 某个以 @开头的错误,(这个极其无语)
——修改这个文件:~/android/system/frameworks/base/core/java/android/text/TextUtils.java1752行,
将那个
  1. * @param src
  2. * @param begin
  3. * @param end
复制代码
改成
  1. * @param src
  2. * @param start
  3. * @param end
复制代码
将1764行那个@auth神马的那行给删除

<>貌似还有一个提示什么api错误的,他会提示你的,提出两个解决的方法,选第二个,也就是运行
  1. make -j16 update-api
复制代码
<>有一个错误是提示下面这个:
  1. In file included from frameworks/base/media/libstagefright/omx/OMXNodeInstance.cpp:22:
  2. frameworks/base/media/libstagefright/omx/OMXMaster.h:28: error: expected unqualified-id before 'namespace'
  3. frameworks/base/media/libstagefright/omx/OMXMaster.h:28:
  4. error: expected constructor, destructor, or type conversion before 
  5. 'namespace'
  6. In file included from frameworks/base/media/libstagefright/omx/OMX.cpp:37:
  7. frameworks/base/media/libstagefright/omx/OMXMaster.h:28: error: expected unqualified-id before 'namespace'
  8. frameworks/base/media/libstagefright/omx/OMXMaster.h:28:
  9. error: expected constructor, destructor, or type conversion before 
  10. 'namespace'
  11. make: *** [out/target/product/generic/obj/SHARED_LIBRARIES/libstagefright_omx_intermediates/OMXNodeInstance.o] 错误 1
  12. make: *** [out/target/product/generic/obj/SHARED_LIBRARIES/libstagefright_omx_intermediates/OMX.o] 错误 1
复制代码
将 frameworks/base/include/media/stagefright/OMXPluginBase.h 内容替换成:(妹妹的,居然这论坛code代码里面会将 #include后的内容删掉,莫名奇妙。。。)


#ifndef OMX_PLUGIN_BASE_H_
#define OMX_PLUGIN_BASE_H_
#include <sys/types.h>
#include <utils/String8.h>
#include <utils/Vector.h>
#include <OMX_Component.h>

namespace android {
struct OMXComponentBase;
struct OMXPluginBase {
    OMXPluginBase() {}
    virtual ~OMXPluginBase() {}
    virtual OMX_ERRORTYPE makeComponentInstance(const char *name, const OMX_CALLBACKTYPE *callbacks,OMX_PTR appData,OMX_COMPONENTTYPE **component) = 0;
    virtual OMX_ERRORTYPE destroyComponentInstance( OMX_COMPONENTTYPE *component) = 0;
    virtual OMX_ERRORTYPE enumerateComponents(OMX_STRING name,size_t size,OMX_U32 index) = 0;
    virtual OMX_ERRORTYPE getRolesOfComponent(const char *name, Vector *roles) = 0;
private:
    OMXPluginBase(const OMXPluginBase &);
    OMXPluginBase &operator=(const OMXPluginBase &);
};

#endif

还有几个问题,不过不记得了,遇上了发邮件给我,jasy.ice@163.com 或者 jasy.ice@gmail.com

五,安装

编译成功了?恭喜你。
你到 ~/android/system/out/target/product/generic 里面就有你需要的system.img了,
到现在为止,你已经编译成功了cm7的代码,不过这个代码并不适用于u8500,
你还需要一个东西——驱动
你可以简单的将android理解为

linux内核
内核部分以上是hal虚拟层,为android提供驱动设备的接口
调用hal的是android的java虚拟机

当然,不太正确的,不过你可以这样理解

将附件里的那几个hal层覆盖到你编译出来的 system 文件夹里,
这几个hal层都是从其他的rom里面提取的,tooken辛苦了,翻找了很多的其他机型的rom来找这个,我是没时间,没精力,没能力这样干。。。

ok,运行这个
  1. ~/android/system/out/host/linux-x86/bin/mkyaffs2image ./system system_my.img
复制代码
出来的system_my.img就是你的rom啦~~
至于boot.img可以暂时用着官方的2.2,如果你想要编译自己的内核的话,可以使用u8150的内核源码编译,加上一些补丁,我懒,就不说了。
貌似niufox说过,搜一下他的帖子。。不过这个就无法解决那个光电触摸的问题,我这里有五六个pdf,是关于这个光电触摸键的设备的参数的,需要的同学找来看看。

ps : 2.6.35的难度极其大,因为貌似我找不到高通关于msm7225的2.6.35的内核模板。。。谁知道能不能。。。


**********************************************************

repo sync -j16 可以快一点同时,如果用linux下载,过程中可能因为连接不好而中断,请在repo sync之前运行:sudo sysctl -w net.ipv4.tcp_window_scaling=0

0 0
原创粉丝点击