主题 : CyanogenMod7.2(CM7) for Mini210s ROM + 源代码 复制链接 | 浏览器收藏 | 打印
级别: 骑士
UID: 29604
精华: 9
发帖: 171
金钱: 1830 两
威望: 366 点
贡献值: 9 点
综合积分: 522 分
注册时间: 2010-10-01
最后登录: 2016-04-13
楼主  发表于: 2012-10-06 23:04

 CyanogenMod7.2(CM7) for Mini210s ROM + 源代码

管理提醒: 本帖被 xoom 执行加亮操作(2012-10-07)
一楼介绍及下载,二楼移植过程,三楼源代码编译说明。
基本特性:
1. 基于CM7.2(Android 2.3.7 gingerbread)源代码编译
2. 内核仍然使用友善官方android内核
3. 目前只在Mini210s上测试,也只有Mini210s可以测试,其它的210可以试试,但肯定不支持6410。
4. 和友善的android一样,加入了按键旋转屏幕功能,按住K3(menu键)一会儿,可以旋转横屏或竖屏。
5. 打开了CM的平板选项,可选设置状态栏虚拟按键。
6. 移植了android-x86的ethernet框架,可以使用有线网络。
7. Miniusb线连接后,可作为U盘使用
8. 高清播放和3D加速可用。
9. 已ROOT,自带busybox。
10. 设置了一些默认值,比如永不关屏,默认启动中文,允许未知来源软件。
11. 可以选择将软件安装到内置存储或SD卡中,不过安装速度有点慢。


Logcat启动信息


主界面

    

设置界面
  

CM设置界面

  
  

Miniusb线连接后可作为U盘使用



一些基本的测试:
1. 串口驱动,应该是ok的,至少COM0没问题。
2. 4个用户LED控制,OK
3. PWM蜂鸣器控制,OK
4. A/D转换,OK
5. 声音播放,OK
6. 录音,OK
7. IIC/EEPROM,OK
8. 开机换屏,OK(测试了一下从4.3寸屏换成7寸屏,是OK的)
9. 屏幕亮度控制,OK
10. 按键,OK
11. 时间设置,OK
12. 高清播放,OK
13. 3D加速,OK
14. 有线网络,OK
15. U盘,自动挂载OK,无法手动卸载(相关服务没有移植)
16. wifi,USBWifi无法使用,SDWIFI应该也不能用
17. 摄像头,没有设备可以测试,应该是不能用
18. HDMI,无法使用,相关代码没有移植
19. 3G相关,无法使用,友善的fa-network-service没有开源,运行的时候fa-network-service启动失败,原因不明,难道不是静态编译的? 还是android2.3.3与2.3.7cm版差异太大导致的?
20. CM特色CPU设置,不可用,点进去程序会出错关闭,因为内核没有相关支持。
21. 蓝牙,没有测试,虽然有相关服务,但应该是不能用的
22. GPS,没有测试,虽然有相关服务,但应该是不能用的

其它:
1. 虚拟机内存大小设置:设置,CM设置,性能,虚拟机内存大小,默认值48m
2. 屏幕亮度:设置,显示,亮度
3. 屏幕超时:设置,显示,屏幕超时
4. 程序安装位置选择:设置,CM设置,应用程序,允许移动应用程序并选择安装位置
5. 状态栏虚拟按键:设置,CM设置,平板优化。
6. 开机的串口信息输出了一大堆东西,怎么回事?
别慌,那是我把init.rc的loglevel调到了9(为了看详细的调试信息),你可以改成loglevel 3就好了。
7. 串口和logcat输出了一些错误信息,怎么办?
没办法,这是刚移植好的初版,也就是千苍百孔版,bug多在所难免。。。而且可能不会有后续版本,毕竟友善在源码里加入了许多自己的东西,一个人无法做到那么多。

刷机用img下载链接:
本部分内容设定了隐藏,需要回复后才能看到


rootfs下载链接:
本部分内容设定了隐藏,需要回复后才能看到


源代码下载链接:
本部分内容设定了隐藏,需要回复后才能看到
[ 此帖被benjaminwan在2012-10-09 00:45重新编辑 ]
级别: 骑士
UID: 29604
精华: 9
发帖: 171
金钱: 1830 两
威望: 366 点
贡献值: 9 点
综合积分: 522 分
注册时间: 2010-10-01
最后登录: 2016-04-13
1楼  发表于: 2012-10-06 23:04
自己沙发。。。。。。。。。。。。。。。。。。。。
二楼是移植过程碰到的问题

友善的ROM和一般的安卓设备不一样的是,先启动linuxrc这个程序,再启动init。而linuxrc貌似也没有开源吧。所以有些init步骤就直接没有了,比如文件系统的挂载和触摸屏校准,感觉是由linuxrc完成的。因为相关的文档或说明都没有,所以移植起来有点迷茫。

最早着手开始移植的时候,直接拿了cm的源代码,放入了友善的device和vendor就开始编译,结果发现编译有很多error,都是源码system下的文件发生的,于是替换了很多system下的代码,当然相关的framework和bootloader代码也替换了一些,终于编译可以过啦,真的很高兴,但是和真正的cm编译对比了一下,缺少了很多cm特有的包,鞋特,后来才发现,原来如果不配置cm相关的编译脚本,编译出来的其实是官方版本的android,也就是android2.3.7,根本不是CM。

接下来,重头开始,试着模仿其它的配置文件,新建了vendor/cyanogenmod下的配置文件,其它什么都没改,开始编译,结果又碰到了许多错误,还是system相关的,只好又改回来,看来cm的代码和官方的代码差异还是挺大。折腾了很久,过程就不提了,十分纠结,而且是白折腾了,因为编译出来的虽然有了cm的包,但仍然缺胳膊少腿,比如少了dexopt这个文件,直接启动不了,拿了其它编译的dexop放进去,发现还有更多错误,还是启动不了,囧,看来此路不通。郁闷啊。

看来只剩下自己写device和vendor这条路了,不过总不能凭空开始写吧,得参考一下其它已经现成的范例。但是cm自带的都是需要从手机里提取prebuilt,手头上也没有手机可以试验提取,而且不做这个步骤,都不能开始编译,最关键的是,手机的平台和mini210差异太大了。上百度谷歌大神找了一下,求证了一下s5pv210和s5pc110其实是同样的芯片,只是封装不同而已。好吧,采用s5pc110的三星机子还是挺多的,比如i9000,可惜的是,手头没有i9000,所以也没办法提取文件尝试编译。

转折点是找到了这个https://github.com/cm7sgt,samsung的galaxytab使用的正好是s5pc110平台,而且更好的是这位提供全了prebuilt,不用再自己提取了,good。下载下来,啥都不用改,编译,顺畅,一个错误都没有。
OK,开始修改,过程中碰到了许多问题,初次做移植对代码又不熟悉,十分纠结。
有一些问题总结如下:
1. Kernel panic - not syncing: Attempted to kill init!
Backtrace:                                                      
[<c0172efc>] (dump_backtrace+0x0/0x110) from [<c057a1b0>] (dump)
r6:cfc24000 r5:c07805c0 r4:c077ee1c r3:00000000                
[<c057a198>] (dump_stack+0x0/0x1c) from [<c057a228>] (panic+0x7)
[<c057a1b4>] (panic+0x0/0xf0) from [<c0195a18>] (do_exit+0x74/0)
r3:c07805c0 r2:00000000 r1:00000024 r0:c06e3525                
[<c01959a4>] (do_exit+0x0/0x5f4) from [<c019627c>] (do_group_ex)
r7:cfc02200                                                    
[<c01961e4>] (do_group_exit+0x0/0xc8) from [<c01a0d7c>] (get_si)
r7:cfc02200 r6:cfc27ec8 r5:00106001 r4:cfc26000                
[<c01a0a24>] (get_signal_to_deliver+0x0/0x394) from [<c0171cd8>)
[<c0171c68>] (do_signal+0x0/0x688) from [<c01728e4>] (do_notify)
[<c01728c4>] (do_notify_resume+0x0/0x50) from [<c016f010>] (wor)
r4:ffffffff r3:00000000                                        
Rebooting in 5 seconds
为了这个问题找了大神多次,有不同的答案,有的说因为ROM的相关可执行脚本或文件没有赋予权限,导致init不能执行出错,后来直接来狠的chmod 777 -R rootfs_dir,还是不行啊,有的说是文件系统mount成了只读导致的,可惜友善的init.rc根本没有这方面的内容。
后来对比了代码,改了system/core/init/init.c,增加了
+    if (!cur_command->func)
+        return;
因为友善的内核启动后,先启动的是linuxrc,再启动init,和别人不同,问题解决,但原因不明。

2. Unable to extract+optimize DEX from '/system/framework/android.policy.jar'
这个问题真的是不知如何形容啊,为了这个问题麻烦了大神更多次,但大家都说权限问题或挂载读写问题,和上面一样。如果没有logcat信息,那就可以放弃了,幸好此时已经可以看logcat了。
CM系统比较诡异的是不止有/data/dalvik-cache,还需要/cache/dalvik-cache,这点和官方系统2.3.3不同,不知道官方的2.3.7是不是也是这样。因为没有创建/cache/dalvik-cache,所以当然会出错啦,在init.rc里加入相关动作,这个问题解决。

3. FramebufferNativeWindow( 215): couldn't open framebuffer HAL (No such device
这个问题也是众说纷纭呀,普遍的说法有2种,1种是说内核中相应的board信息和android源码中的device配置文件board信息不一致导致无法引导系统。查了一下友善的内核源代码mach-s5pv110里面好像,定义的信息是SMDKV210,而我自己的device定义的是PRODUCT_BOARD := smdkv210,是对的呀,看来不是这个问题。
另一种说法是3D显示驱动有问题导致,这个时候我使用的是galaxytab的PowerVR SGX540驱动,和mini210的型号是一样的,因为怕新的系统可能会需要配合新的驱动,就保留了galaxytab的驱动,既然不成,就换回mini210自带的驱动,放置目录结构仍然不按照友善提供的文件夹位置,不然会找不到文件,果然。。。。。。出现的问题不一样了,这次是说gralloc.s5pc110.so里找不到某某函数,看来还是和系统版本有关系啊,这时又上大神那里找了找有没有地方下载驱动,结果没有找到。。。。。。卡壳了很久,试了一下用galaxytab的gralloc.s5pc110.so替换掉友善的gralloc.s5pc110.so,结果竟然可以了,真是狗屎运啊。
至此,系统已经可以启动啦。

4. setreuid() failed. errno: 2
这个问题信息太少,也不知怎么解决,至今无解。放着不管,系统也能正常使用,只是不知道会不会有什么影响。

5.nand ECC error
开机一段时间才会冒出来,无解。

6.E/MetadataRetrieverClient(269): failed to extract an album art
好像是媒体服务提取专辑封面?无关紧要把。。。

7. 编译的时候出现android build target Dex Term Could not reserve enough space for object heap
target Dex: xxxxx
Error occurred during initialization of VM
Could not reserve enough space for object heap
Could not create the Java virtual machine.
说明你和我一样,编译开了多线程,电脑内存又小。
改build/core/definitions.mk修改防止内存不足
$(if $(findstring windows,$(HOST_OS)),,-JXms16M -JXmx1536M) \改成如下或更小
$(if $(findstring windows,$(HOST_OS)),,-JXms16M -JXmx1024M) \

8.编译指定cpu优化参数,主要是优化浮点运算,有3种情况
A.不指定
B.TARGET_GLOBAL_CFLAGS += -mtune=cortex-a8 -mfpu=vfpv3-d16 -mfloat-abi=softfp
TARGET_GLOBAL_CPPFLAGS += -mtune=cortex-a8 -mfpu=vfpv3-d16 -mfloat-abi=softfp
C.TARGET_GLOBAL_CFLAGS += -mtune=cortex-a8 -mfpu=neon -mfloat-abi=softfp
TARGET_GLOBAL_CPPFLAGS += -mtune=cortex-a8 -mfpu=neon -mfloat-abi=softfp
首先,使用B方案,编译通不过,而使用A方案和使用B方案,编译出来的系统,用安兔兔跑分测试了一下,基本没啥区别,所以最终A.不指定。

9.关于use samsung color format
友善的源码里添加了许多这些相关的代码,但在官方系统或Cm系统源码里都没有。
曾经使用了这个选项,而且也没在cm源码里添加相关内容,结果编译出的omx解码库在播放高清音频时会出错,后来一直寻找问题,找了好久,人都快崩溃了,才找到,后来去掉这个选项,就一切ok了,不知何故,问了大神,也没有相关内容。
[ 此帖被benjaminwan在2012-10-08 12:44重新编辑 ]
级别: 骑士
UID: 29604
精华: 9
发帖: 171
金钱: 1830 两
威望: 366 点
贡献值: 9 点
综合积分: 522 分
注册时间: 2010-10-01
最后登录: 2016-04-13
2楼  发表于: 2012-10-06 23:05
自己板凳。。。。。。。。。。。。。。。。。。。。   
编译说明
1.系统要求:fedora14以上,本人是使用fedora17真机编译的。
虚拟机编译也行,只是虚拟机往往会分配较少的内存,编译过程中有可能会出现内存不足的问题,请参考后面的解决方法。

以下许多命令都需要root权限,为了简洁就不再加su了,有条件的话最好用root用户登录,此点很重要,切记
2.安装系统必需
shell执行
yum install git-core gnupg flex bison gperf libsdl1.2-dev libesd0-dev libwxgtk2.6-dev squashfs-tools build-essential zip curl libncurses5-dev zlib1g-dev pngcrush schedtool

如果是64位系统,还得再安装如下开发包(32位系统此行略过)
yum install g++-multilib lib32z1-dev lib32ncurses5-dev lib32readline5-dev gcc-4.3-multilib g++-4.3-multilib

如果是fedora14,最好检查一下make有没有升级
yum update make

还有一个sun-java6-jdk没有安装,因为一般系统自带openjdk6,其实和sunjdk6是一样的,但为了防止出错,还是去官方网站下载rpm包来安装
http://www.oracle.com/technetwork/java/javase/downloads/index.html
我下载的是最新的Java SE 6 Update 35,下载下来的文件是jdk-6u35-linux-i586-rpm.bin,接下来开始安装jdk
#给运行权限
chmod a+x jdk-6u35-linux-i586-rpm.bin
#开始安装,可能会有一些声明什么的,按照其步骤做完就是了
./jdk-6u35-linux-i586-rpm.bin
#然后注意路径名称,如果你下载的版本与我不同,请自行更改下面命令的路径
## java ##
alternatives --install /usr/bin/java java /usr/java/jdk1.6.0_35/jre/bin/java 20000
## javaws (32-bit only) ##
alternatives --install /usr/bin/javaws javaws /usr/java/jdk1.6.0_35/jre/bin/javaws 20000
## Firefox浏览器插件32位(64位系统就没必要执行了)
alternatives --install /usr/lib/mozilla/plugins/libjavaplugin.so libjavaplugin.so /usr/java/jdk1.6.0_35/jre/lib/i386/libnpjp2.so 20000
## Firefox浏览器插件64位(32位系统就没必要执行了)
alternatives --install /usr/lib64/mozilla/plugins/libjavaplugin.so libjavaplugin.so.x86_64 /usr/java/jdk1.6.0_35/jre/lib/amd64/libnpjp2.so 20000
## 安装javac
alternatives --install /usr/bin/javac javac /usr/java/jdk1.6.0_35/bin/javac 20000
## 安装jar
alternatives --install /usr/bin/jar jar /usr/java/jdk1.6.0_35/bin/jar 20000
## 安装javah
alternatives --install /usr/bin/javah javah /usr/java/jdk1.6.0_35/bin/javah 20000
## 安装javadoc
alternatives --install /usr/bin/javadoc javadoc /usr/java/jdk1.6.0_35/bin/javadoc 20000
#切换默认Java # 运行下面的命令,输入数字选择刚刚安装的Sun JDK,一般是最后一个
alternatives --config java
#查看现在的Java版本,看看是否切换成功
[root@localhost ~]# java -version
java version "1.6.0_35"
Java(TM) SE Runtime Environment (build 1.6.0_35-b10)
Java HotSpot(TM) Server VM (build 20.10-b01, mixed mode)
成功的话,下载的jdk和过程中解压的文件都可以删除了

3.开始编译
cm_gingerbread目录下有3个脚本
build_cm7.sh是编译脚本,用来启动编译,双核CPU的电脑需要约1小时的时间才能完成编译
genrootfs.sh用来制作文件系统
genimage.sh用来制作烧写镜像
请依次执行这3个脚本

4.内存不足问题
android build target Dex Term Could not reserve enough space for object heap
target Dex: xxxxx
Error occurred during initialization of VM
Could not reserve enough space for object heap
Could not create the Java virtual machine.
双核电脑至少得有2G内存比较保险,不然容易出现这个问题,出现了的话也不要紧
可以改build/core/definitions.mk防止内存不足
$(if $(findstring windows,$(HOST_OS)),,-JXms16M -JXmx1536M) \改成如下或更小
$(if $(findstring windows,$(HOST_OS)),,-JXms16M -JXmx1024M) \

最后:
如果你想在OS X上编译,请参考:http://wiki.cyanogenmod.com/wiki/Samsung_Galaxy_S:_Compile_CyanogenMod_(OS_X)
这是官方的linux编译指导,稍有不同,仅供参考:http://wiki.cyanogenmod.com/wiki/Samsung_Galaxy_S:_Compile_CyanogenMod_(Linux)
[ 此帖被benjaminwan在2012-10-08 13:32重新编辑 ]
级别: 风云使者
UID: 36096
精华: 3
发帖: 2513
金钱: 14075 两
威望: 2815 点
贡献值: 3 点
综合积分: 5086 分
注册时间: 2011-01-11
最后登录: 2015-11-15
3楼  发表于: 2012-10-07 09:00
楼主神啊……期待miui for 210!!
极度缺钱,求捐赠……支付宝兼邮箱:huming2207@qq.com
级别: 风云使者
UID: 36096
精华: 3
发帖: 2513
金钱: 14075 两
威望: 2815 点
贡献值: 3 点
综合积分: 5086 分
注册时间: 2011-01-11
最后登录: 2015-11-15
4楼  发表于: 2012-10-07 09:08
暑假那会儿玩了下移植cm9 for tiny210,直接卡第一屏,友善kernel的init很奇怪(不知他们这么弄的目的是干啥),不过由于时间关系还没深入研究,这回看看楼主的……另外说一句,友善内核貌似不支持cpu超频降频,还有一些细节对于跑cm固件来说不是很给力。
极度缺钱,求捐赠……支付宝兼邮箱:huming2207@qq.com
自由,自强,共享,共创。
级别: 论坛版主
UID: 12573
精华: 27
发帖: 8838
金钱: 46490 两
威望: 9298 点
贡献值: 27 点
综合积分: 18216 分
注册时间: 2010-01-09
最后登录: 2019-07-16
5楼  发表于: 2012-10-07 09:12
多谢分享,十分不错
新手如何向我们反馈有效的信息,以便解决问题,见此贴:
http://www.arm9home.net/read.php?tid-14431.html

[注]: 此处签名链接仅为指引方向,而非解答问题本身.
级别: 风云使者
UID: 36096
精华: 3
发帖: 2513
金钱: 14075 两
威望: 2815 点
贡献值: 3 点
综合积分: 5086 分
注册时间: 2011-01-11
最后登录: 2015-11-15
6楼  发表于: 2012-10-07 09:17
希望楼主能开源,有空我去看看,搞搞3g和wifi的bug
极度缺钱,求捐赠……支付宝兼邮箱:huming2207@qq.com
级别: 骑士
UID: 29604
精华: 9
发帖: 171
金钱: 1830 两
威望: 366 点
贡献值: 9 点
综合积分: 522 分
注册时间: 2010-10-01
最后登录: 2016-04-13
7楼  发表于: 2012-10-07 10:03
引用第6楼huhu2207于2012-10-07 09:17发表的  :
希望楼主能开源,有空我去看看,搞搞3g和wifi的bug

源代码会提供的,只是网速不给力。
正在往另外的几个网盘再上传rom,只有80k速度,得再等等。
级别: 风云使者
UID: 36096
精华: 3
发帖: 2513
金钱: 14075 两
威望: 2815 点
贡献值: 3 点
综合积分: 5086 分
注册时间: 2011-01-11
最后登录: 2015-11-15
8楼  发表于: 2012-10-07 12:02
引用第7楼benjaminwan于2012-10-07 10:03发表的  :源代码会提供的,只是网速不给力。正在往另外的几个网盘再上传rom,只有80k速度,得再等等。
好嘞,据说网上已经有开源了的安卓4.0 for 其他210的代码(不是cm团队搞的),我打算参考他们的和楼主的代码做cm9 for 友善210甚至cm10 for 友善210(声明,这个计划纯属“民间”爱好非商业用途,与友善官方之间没有任何关系,某些人不喜勿喷)
[ 此帖被huhu2207在2012-10-07 12:07重新编辑 ]
极度缺钱,求捐赠……支付宝兼邮箱:huming2207@qq.com
级别: 风云使者
UID: 36096
精华: 3
发帖: 2513
金钱: 14075 两
威望: 2815 点
贡献值: 3 点
综合积分: 5086 分
注册时间: 2011-01-11
最后登录: 2015-11-15
9楼  发表于: 2012-10-07 15:06
另外,关于那些无线设备的的bug还有友善3g拨号工具的问题,楼主你把友善自己的那些闭源的库放进去试试?
极度缺钱,求捐赠……支付宝兼邮箱:huming2207@qq.com