CyanogenMod z71的Android源代码编译。完成90%,可以正常编译,但还剩一个问题。

时间:2022-07-15 05:37:58

自己用的是Z71的手机,另称Moto xt502或首派A60,不久前在http://wiki.cyanogenmod.com/wiki/Commtiva_Z71:_Compile_CyanogenMod_(Linux)

居然找到了Z71源代码的下载和编译说明,然后就开是漫长的下载过程。

repo sync了多次,经常会中途停掉,完全不能进行下去。使用代理服务器也不行。

这几天忍不住又试了一次,居然同步完成了。起先是用VMware在ubuntu下进行下一步的操作,要求连接手机,虽然已经链接,但调用./extract-files.sh时总是提示insufficient permissions error。

起初没有在意,以为是VMWare下无法链接手机,只好把所有源码转移到真机下。中间本想使用压缩的,虚拟机硬盘不够用了,搞了好久后只好用划了10g空间并把源码添加到一个ISO里,最终拷贝了出来。(直接把源码从虚拟机拷到windows会报很多命名规则错误,不知道linux和windows的vmware镜像是否可通用,有空试一下)。


真是费了很大劲才把源码统统拷贝到ubuntu实机中,接着,出现几个问题:

1,在源码文件夹下使用多数命令都会报权限错误,虽然也使用了chmod为文件夹增加777权限,但其实我不知道只用chmod就只能给指定文件夹加权限,而子文件夹不受影响,所以后来改为chmod -r 777 yourfolder,问题解决。

2,还是在虚拟机里遇到的insufficient permissions error,感觉前面的时间全浪费了。

解决办法

  1. sudo -s  
  2. ./adb kill-server  
  3. ./adb devices  

早知道这么简单,就不用费那么大劲四处转移代码了。重启了很多次电脑。







由于在32bit ubuntu下遇到问题实在解决不了,只好重新装了ubuntu64,这几日,悲催2字总是萦绕我的心头。真的很悲催。
1
我安装了android的sdk,主要需要里面的adb,我在adb所在的目录下眼睁睁的看着中断报No such file or directory的错误。不管怎么修改权限,换文件夹路径,都逃不过这个提示,最后才在一个国外的论坛上找到问题的解决办法,需要在64bit系统下安装一个32bit兼容工具,也就是sudo apt-get install ia32-libs。我去,这种事情,你系统不能集成一下吗?

2
64bit Linux下error: gnu/stubs-32.h: No such file or directory错误解决办法
You need to install the glibc-devel package. It contains the object files necessary for developing programs which use the standard C libraries (which are used by nearly all programs). If you are developing programs which will use the standard C libraries, your system needs to have these standard object files available in order to create the executables.
Install glibc-devel if you are going to develop programs which will use the standard C libraries.
# apt-get install g++-multilib。

3
/usr/bin/ld: cannot find -lz
collect2: ld returned 1 exit status

apt-get install lib32z1-dev



吐槽一下,仍然很讨厌Linux,虽然经常要用,实际上并不是工作需要。做一件什么事情,总是会有各种各样莫名其妙的错误,不得不一次又一次查互联网,一次又一次出现莫名其妙的问题,有的问题搜索到最后无果。
虽然没有任何资格,但仍强烈鄙视git,拜托出个图形界面吧,拜托那个目录树能不能小一点?我下载9个g的东西,5个g是目录树,我只是想下个源代码编译一下,搞得好复杂,我4M带宽要不停下载好几个小时,有时候下着下着不动了,有时候*也不行。最后下载下来的东西,我只需要不到一半用来编译。
我很累了,年轻的时候觉得这样可以学到东西,现在虽然还年轻,但已经不想总把时间浪费在无谓的地方。


08月26日
持续多日为了编译z71熬夜到凌晨一两点,又遇到新的问题,
make: *** No rule to make target `vendor/commtiva/z71/proprietary/bin/hostapd', needed by `out/target/product/z71/system/bin/hostapd'. Stop.
make: *** Waiting for unfinished jobs....
Copy: out/target/product/z71/system/etc/wifi/hostapd.conf

hostapd 是一个用户态用于AP和认证服务器的守护进程。它实现了IEEE 802.11相关的接入管理,IEEE 802.1X/WPA/WPA2/EAP 认证, RADIUS客户端,EAP服务器和RADIUS 认证服务器。Linux下支持的驱动有:Host AP,madwifi,基于mac80211的驱动。

几个小时无果,只好偷懒一下:
删除~/android/system/device/commtiva/z71/device_z71.mk下可搜索到的hostapd的两行。重新开始编译,虽然最终还会有问题是一定的。但暂时可以继续编译下去了。
凌晨12点,今天早点睡吧。



08.28 凌晨
又是12点,又是新的错误:
prebuilt/linux-x86/toolchain/arm-eabi-4.4.3/bin/../lib/gcc/arm-eabi/4.4.3/../../../../arm-eabi/bin/ld: out/target/product/z71/obj/STATIC_LIBRARIES/libwebcore_intermediates/libwebcore.a(ImageDocument.o): in function WebCore::ImageDocument::resizeImageToFit():external/webkit/WebCore/loader/ImageDocument.cpp:244: error: undefined reference to 'WebCore::CSSStyleDeclaration::setProperty(WebCore::String const&, WebCore::String const&, int&)'
prebuilt/linux-x86/toolchain/arm-eabi-4.4.3/bin/../lib/gcc/arm-eabi/4.4.3/../../../../arm-eabi/bin/ld: out/target/product/z71/obj/STATIC_LIBRARIES/libwebcore_intermediates/libwebcore.a(ImageDocument.o): in function WebCore::ImageDocument::windowSizeChanged():external/webkit/WebCore/loader/ImageDocument.cpp:329: error: undefined reference to 'WebCore::CSSStyleDeclaration::removeProperty(WebCore::String const&, int&)'
prebuilt/linux-x86/toolchain/arm-eabi-4.4.3/bin/../lib/gcc/arm-eabi/4.4.3/../../../../arm-eabi/bin/ld: out/target/product/z71/obj/STATIC_LIBRARIES/libwebcore_intermediates/libwebcore.a(ImageDocument.o): in function WebCore::ImageDocument::windowSizeChanged():external/webkit/WebCore/loader/ImageDocument.cpp:331: error: undefined reference to 'WebCore::CSSStyleDeclaration::setProperty(WebCore::String const&, WebCore::String const&, int&)'
collect2: ld returned 1 exit status
make: *** [out/target/product/z71/obj/SHARED_LIBRARIES/libwebcore_intermediates/LINKED/libwebcore.so] Error 1




08.28 8点
最令我崩溃的事情又发生了。又。。。。。。。。。。。。。。。。。。
同样的代码,在我的32位 ubuntu 11.04实机下,顺利编译完成。
之前遇到hostapd的问题,我还是删除~/android/system/device/commtiva/z71/device_z71.mk下可搜索到的hostapd的两行。居然还是完整的编译完成了。
我为了编译这个代码,在虚拟机上删掉32位系统,重装64位,不停的需找解决方案,不停的读相关代码,不停的熬夜,都变得没有意义。。。。。。。。。。。。
我恨Linux。。。。。。。。。。。。。。。



剩下的最后一件事情,在Windows7 下重建32位 ubuntu。
重新编译一次。
之前找webcore解决方案时,有人提到过可能是交换分区太小,内存太小,导致。我试过申请2g的swap空间,编译仍然出错,改用4g swap再试一次也好。
贴出可能的解决办法:
产生swap文件 
要创建swap文件,执行dd命令,新增一个256MB的swap文件: 
# dd if=/dev/zero of=/tmp/myswap bs=32k count=8192 
(bs=32k指定每个扇区占用32kb,读入了8192+0个区段,输出了8192+0个区段) 
注意:bs参数的目的在于指定每次读取及输入多少个bytes;由于磁盘存取的最小单位为扇区,因此设置bs也等于设置每个扇区的大小;而count的目的则在指定可以使用多少个扇区.因此,可以使用的硬盘空间就等于bs*count.以上范例为例,可以使用的硬盘空间等于32*8192=262144(KB),亦等于256MB. 
执行上述命令后,会在/tmp目录中创建一个256MB的myswap文件 
格式华及启动swap文件 
接下来执行mkswap命令,将myswap文件格式化成s文件系统,系统才能使用,切换到/tmp目录,并执行以下命令: 
# mkswap myswap (#将文件格式化为swap文件格式) 
setting up swapspace version 1 , size = 262144 KB 
# swapon /tmp/myswap (#启动swap分区) 
要停止使用新创建的swap文件,只要执行 swapoff /tmp/myswap命令即可. 
开机时自动启动新添加的swap分区 
如果每次开机后都要执行swapon命令启动swap分区或者文件,这太麻烦了.这时可以利用文字编辑器在/etc/fstab文件加一行,好让开机时自动启动swap分区及文件: 
/dec/hdb5 swap swap defaults 0 0 (开机时启动此swap分区) 
/tmp/myswap swap swap defaults 0 0 (开机时启动此swap文件)




08月30日:
从手机中把hostapd铐出来重新编译就OK了
我就这么编译通过的
执行命令
adb pull /system/bin/hostapd vendor/commtiva/z71/proprietary/bin/


非常感谢h_anying,这个问题算是解决了,虽然很多人回复,我还是决定把分全部给你。
不过hostapd应该是可以正常生成的,我在zte/blade的文件夹下找到一个hostapd的可执行文件,而这个文件在其他任何文件夹里都是没有的。我在怀疑某个配置文件错误的把z71的hostapd指向了zte,很可能是笔误。

这个有空再搞了,暂时先用楼上的办法搞一个版本出来。