|
这个教程没写完善的,过于简陋,而且我还没有检查过,
不过我要去写作业去了,先占个位子,下次补全,
也许里面有什么错误哦,请及时指正我,毕竟我只是一个普通的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)
执行这个,加上一些源:
复制代码
32位系统安装:- git-core gnupg flex bison gperf libsdl1.2-dev libesd0-dev
- libwxgtk2.6-dev squashfs-tools build-essential zip curl libncurses5-dev
- zlib1g-dev sun-java6-jdk pngcrush schedtool
复制代码
64位系统在上面的基础上安装:- g++-multilib lib32z1-dev lib32ncurses5-dev lib32readline5-dev
- gcc-4.3-multilib g++-4.3-multilib
复制代码
安装 repo (Google的下载源码的一个python脚本)
复制代码
同时可以将 ~/bin 作为PATH:将下面的代码加入到 ~/.bashrc 里面
复制代码
二,下载源码
cm的源码在github上,github是一个使用git作为项目管理的开源项目托管网站,在上面有很多开源的软件的项目,
here is it : https://github.com/CyanogenMod
建立你源码的目录,可以随意选一个目录,在这里是 ~/android ,
只要空闲空间在10GB左右(事实上,我的cm7+cm6的代码一共编译后使用了 12.7 GB)
将 ~/android 作为github的源码存放所在地,建立 git- mkdir ~/android
- cd ~/android
- repo init -u git://github.com/CyanogenMod/android.git -b gingerbread
复制代码
然后就是同步cm7到你本地去了,需要花费很长时间,我的宿舍网速很慢,舍友也要上网啊,二十来k的,下了整整三天,一共是5.5GB。
这里的16是多少线程下载而已,推荐8+,不然速度更慢。
也许会经常中断,可以自己写一个while脚本,循环执行这个。
复制代码
三,配置你的设备
在同步完成后,(我同步的时候是有234个分支)
cm7自带有许多的设备的代码,在 devices/ 里面,我们的u8500木有支持,所以只能求助强大的TomG筒子,
他建立了中兴的blade(v880)和u8220的设备库,
就是这个:https://github.com/TomGiordano/android_device_huawei_u8220
在 ~/android/system 目录里面同步他的代码:- git clone git://github.com/TomGiordano/android_device_huawei_u8220.git device/huawei/u8220
复制代码
同步完成后,连接你的设备:- cd device/huawei/u8220
- ./extract-files.sh
复制代码
执行- ~/android/vendor/cyanogen/get-rommanager
复制代码
四,编译
- cd ~/android
- source build/envsetup.sh
- lunch
复制代码
这里会提示选择你的设备,u8220貌似不能编译,没有设备标签。。。叉。。。我问tom,不过木有回应。
你选择cm的通用设备就好
复制代码
然后就是编译啦,推荐8+个进程同时编译
复制代码
中间会提示一些错误,这些错误在每个人的机器上都是不同的,也许有,也许没有,我也忘了很多,大概只记得几个:
<>提示缺少某文件:
——重新同步,或者到https://github.com/CyanogenMod里面找到对应的那个分支,
比如wibkit的分支,就可以直接 git checkout -f git://XXX 来强行同步
<>提示某线程kill
——重新执行 make -j16 就好了,是因为其线程的一些访问冲突或者是你的内存不足,挤掉部分的线程了?
<>提示 某个以 @开头的错误,(这个极其无语)
——修改这个文件:~/android/system/frameworks/base/core/java/android/text/TextUtils.java1752行,
将那个- * @param src
- * @param begin
- * @param end
复制代码
改成- * @param src
- * @param start
- * @param end
复制代码
将1764行那个@auth神马的那行给删除
<>貌似还有一个提示什么api错误的,他会提示你的,提出两个解决的方法,选第二个,也就是运行
复制代码
<>有一个错误是提示下面这个:- In file included from frameworks/base/media/libstagefright/omx/OMXNodeInstance.cpp:22:
- frameworks/base/media/libstagefright/omx/OMXMaster.h:28: error: expected unqualified-id before 'namespace'
- frameworks/base/media/libstagefright/omx/OMXMaster.h:28:
- error: expected constructor, destructor, or type conversion before
- 'namespace'
- In file included from frameworks/base/media/libstagefright/omx/OMX.cpp:37:
- frameworks/base/media/libstagefright/omx/OMXMaster.h:28: error: expected unqualified-id before 'namespace'
- frameworks/base/media/libstagefright/omx/OMXMaster.h:28:
- error: expected constructor, destructor, or type conversion before
- 'namespace'
- make: *** [out/target/product/generic/obj/SHARED_LIBRARIES/libstagefright_omx_intermediates/OMXNodeInstance.o] 错误 1
- 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
#include
#include
#include
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,运行这个- ~/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的内核模板。。。谁知道能不能。。。
|
|