关于B2G系统低版本(v2.0-v2.5)无法下载的问题分析

1.发现、分析问题

1.1 发现master版本的nexus-5代码有问题:

当我在拿到一台nexus-5设备时,翻阅B2G官方文档发现B2G OS对nexus-5有支持,于是希望能够获取此设备的源码加以研究。

经过我写的博客(FireFox OS(B2G)源码获取与Build code ) 的一番步骤之后。发现我下载的master版本的nexus-5代码,虽然可以编译通过,但给nexus-5刷机后发现手机根本启动不起来(Nexus-5刷机后的界面无app图标且黑屏的问题分析)。

又经历了一番分析后,觉得是master版本的问题,因为最终在官方文档的某个角落里看到了一个提示“不建议刷mater版本!”的提示!

1.2 发现v2.0—v2.5下载中断问题

分析了B2G文件加中的config.sh,发现这个通过这个脚本中BRANCH变量的修改可以修改所下载的系统版本(这和Android是不同的,是Mozilla公司自己增加了几个脚本文件,来实现和Android不同的下载、编译方式,其实研究下去终究还是Android的那个套build机制)。

#!/bin/bash
 
REPO=${REPO:-./repo}
sync_flags=""
 
repo_sync() {
 rm -rf .repo/manifest* &&
 $REPO init -u $GITREPO -b $BRANCH -m $1.xml $REPO_INIT_FLAGS &&
 $REPO sync $sync_flags $REPO_SYNC_FLAGS
 ret=$?
 if [ "$GITREPO" = "$GIT_TEMP_REPO" ]; then
 rm -rf $GIT_TEMP_REPO
 fi
 if [ $ret -ne 0 ]; then
 echo Repo sync failed
 exit -1
 fi
}
 
case `uname` in
"Darwin")
 # Should also work on other BSDs
 CORE_COUNT=`sysctl -n hw.ncpu`
 ;;
"Linux")
 CORE_COUNT=`grep processor /proc/cpuinfo | wc -l`
 ;;
*)
 echo Unsupported platform: `uname`
 exit -1
esac
 
GITREPO=${GITREPO:-"git://github.com/mozilla-b2g/b2g-manifest"}
BRANCH=${BRANCH:-v2.6}
 
while [ $# -ge 1 ]; do
 case $1 in
 -d|-l|-f|-n|-c|-q|--force-sync|-j*)
 sync_flags="$sync_flags $1"
 if [ $1 = "-j" ]; then
 shift
 sync_flags+=" $1"
 fi
 shift
 ;;
 --help|-h)
 # The main case statement will give a usage message.
 break
 ;;
 -*)
 echo "$0: unrecognized option $1" >&2
 exit 1
 ;;
 *)
 break
 ;;
 esac
done
 
GIT_TEMP_REPO="tmp_manifest_repo"
if [ -n "$2" ]; then
 GITREPO=$GIT_TEMP_REPO
 rm -rf $GITREPO &&
 git init $GITREPO &&
 cp $2 $GITREPO/$1.xml &&
 cd $GITREPO &&
 git add $1.xml &&
 git commit -m "manifest" &&
 git branch -m $BRANCH &&
 cd ..
fi
 
echo MAKE_FLAGS=-j$((CORE_COUNT + 2)) > .tmp-config
echo GECKO_OBJDIR=$PWD/objdir-gecko >> .tmp-config
echo DEVICE_NAME=$1 >> .tmp-config
 
case "$1" in
"galaxy-s2")
 echo DEVICE=galaxys2 >> .tmp-config &&
 repo_sync $1
 ;;
 
"galaxy-nexus")
 echo DEVICE=maguro >> .tmp-config &&
 repo_sync $1
 ;;
 
"nexus-4")
 echo DEVICE=mako >> .tmp-config &&
 repo_sync nexus-4
 ;;
 
"nexus-4-kk")
 echo DEVICE=mako >> .tmp-config &&
 repo_sync nexus-4-kk
 ;;
 
"nexus-5")
 echo DEVICE=hammerhead >> .tmp-config &&
 repo_sync nexus-5
 ;;
 
"nexus-5-l")
 echo DEVICE=hammerhead >> .tmp-config &&
 repo_sync nexus-5-l
 ;;
 
"nexus-6-l")
 echo DEVICE=shamu >> .tmp-config &&
 echo PRODUCT_NAME=aosp_shamu >> .tmp-config &&
 repo_sync nexus-6-l
 ;;
 
"nexusplayer-l")
 echo DEVICE=fugu >> .tmp-config &&
 echo PRODUCT_NAME=aosp_fugu >> .tmp-config &&
 repo_sync nexusplayer-l
 ;;
 
"nexus-s")
 echo DEVICE=crespo >> .tmp-config &&
 repo_sync $1
 ;;
 
"nexus-s-4g")
 echo DEVICE=crespo4g >> .tmp-config &&
 repo_sync $1
 ;;
 
"otoro"|"unagi"|"keon"|"inari"|"hamachi"|"peak"|"helix"|"wasabi"|"flatfish")
 echo DEVICE=$1 >> .tmp-config &&
 repo_sync $1
 ;;
 
"flame"|"flame-kk"|"flame-l")
 echo PRODUCT_NAME=flame >> .tmp-config &&
 repo_sync $1
 ;;
 
"tarako")
 echo DEVICE=sp6821a_gonk >> .tmp-config &&
 echo PRODUCT_NAME=sp6821a_gonk >> .tmp-config &&
 repo_sync $1
 ;;
 
"dolphin")
 echo DEVICE=scx15_sp7715ga >> .tmp-config &&
 echo PRODUCT_NAME=scx15_sp7715gaplus >> .tmp-config &&
 repo_sync $1
 ;;
 
"dolphin-512")
 echo DEVICE=scx15_sp7715ea >> .tmp-config &&
 echo PRODUCT_NAME=scx15_sp7715eaplus >> .tmp-config &&
 repo_sync $1
 ;;
 
"pandaboard")
 echo DEVICE=panda >> .tmp-config &&
 repo_sync $1
 ;;
 
"vixen")
 echo DEVICE=vixen >> .tmp-config &&
 echo PRODUCT_NAME=vixen >> .tmp-config &&
 repo_sync $1
 ;;
 
"emulator"|"emulator-jb"|"emulator-kk"|"emulator-l")
 echo DEVICE=generic >> .tmp-config &&
 echo LUNCH=full-eng >> .tmp-config &&
 repo_sync $1
 ;;
 
"emulator-x86"|"emulator-x86-jb"|"emulator-x86-kk"|"emulator-x86-l")
 echo DEVICE=generic_x86 >> .tmp-config &&
 echo LUNCH=full_x86-eng >> .tmp-config &&
 repo_sync $1
 ;;
 
"flo")
 echo DEVICE=flo >> .tmp-config &&
 repo_sync $1
 ;;
 
"rpi")
 echo PRODUCT_NAME=rpi >> .tmp-config &&
 repo_sync $1
 ;;
 
"rpi2b-l")
 echo PRODUCT_NAME=rpi2b >> .tmp-config &&
 repo_sync $1
 ;;
 
"leo-kk")
 echo PRODUCT_NAME=leo >> .tmp-config &&
 repo_sync $1
 ;;
 
# We need aries-l with repo_sync $1 for using manifest symlink for releng stuff
"aries"|"aries-l")
 echo PRODUCT_NAME=aries >> .tmp-config &&
 repo_sync $1
 ;;
 
"fairphone2")
 echo PRODUCT_NAME=FP2 >> .tmp-config &&
 repo_sync $1
 ;;
 
"openc-fr")
 echo DEVICE=zte_p821a10 >> .tmp-config &&
 echo PRODUCT_NAME=zte_openc_fr >> .tmp-config &&
 repo_sync $1
 ;;
 
"openc-ebay")
 echo DEVICE=zte_p821a10 >> .tmp-config &&
 echo PRODUCT_NAME=zte_openc_eu >> .tmp-config &&
 repo_sync $1
 ;;
 
"leo-l"|"scorpion-l"|"sirius-l"|"castor-l"|"castor_windy-l"|"honami-l"|"amami-l"|"tianchi-l"|"flamingo-l"|"eagle-l"|"seagull-l")
 echo PRODUCT_NAME=$1 | sed 's/..$//' >> .tmp-config &&
 repo_sync sony-aosp-l
 ;;
 
"project-tablet")
 echo PRODUCT_NAME=castor_windy >> .tmp-config &&
 repo_sync project-tablet
 ;;
 
"project-tablet-lte")
 echo PRODUCT_NAME=castor >> .tmp-config &&
 repo_sync project-tablet
 ;;
 
*)
 echo "Usage: $0 [-cdflnq] [-j <jobs>] [--force-sync] (device name)"
 echo "Flags are passed through to |./repo sync|."
 echo
 echo Valid devices to configure are:
 echo - galaxy-s2
 echo - galaxy-nexus
 echo - nexus-4
 echo - nexus-4-kk
 echo - nexus-5
 echo - nexus-5-l
 echo - nexus-6-l
 echo - nexusplayer-l
 echo - nexus-s
 echo - nexus-s-4g
 echo - flo "(Nexus 7 2013)"
 echo - otoro
 echo - unagi
 echo - inari
 echo - keon
 echo - peak
 echo - hamachi
 echo - helix
 echo - tarako
 echo - dolphin
 echo - dolphin-512
 echo - pandaboard
 echo - vixen
 echo - fairphone2
 echo - flatfish
 echo - flame
 echo - flame-kk
 echo - flame-l
 echo - openc-fr
 echo - openc-ebay
 echo - "> Raspberry Pi boards"
 echo - rpi "(Revision B)"
 echo - rpi2b-l
 echo - emulator
 echo - emulator-jb
 echo - emulator-kk
 echo - emulator-l
 echo - emulator-x86
 echo - emulator-x86-jb
 echo - emulator-x86-kk
 echo - emulator-x86-l
 echo "> Sony Xperia devices"
 echo - aries "(Z3 Compact KK)"
 echo - aries-l "(Z3 Compact L)"
 echo - leo-kk "(Z3 KK)"
 echo - leo-l "(Z3 L)"
 echo - scorpion-l "(Z3 Tablet Compact L)"
 echo - sirius-l "(Z2 L)"
 echo - castor-l "(Z2 L Tablet LTE/WiFi)"
 echo - castor_windy-l "(Z2 L Tablet WiFi only)"
 echo - honami-l "(Z1 L)"
 echo - amami-l "(Z1 Compact L)"
 echo - tianchi-l "(T2U L)"
 echo - flamingo-l "(E3 L)"
 echo - eagle-l "(M2 L)"
 echo - seagull-l "(T3 L)"
 exit -1
 ;;
esac
 
if [ $? -ne 0 ]; then
 echo Configuration failed
 exit -1
fi
 
mv .tmp-config .config
 
echo Run \|./build.sh\| to start building

所以,开始修改脚本中的BRANCH值为v2.5,准备下载v2.5版本的nexus-5系统。

在下载v2.5版本时发现git在 fetch gaia和gecko时会提示在某个网址上下载不到gaia.git和gecko.git,这个网址的名字我忘了,但是它是Mozilla公司的一个开发者论坛类似的网站(我翻墙尝试网页打开这个网址提示404)。

其实,我还尝试下载了v2.0版本,依然会提示下载不到gaia和gecko,所以断定v2.0—v2.5版本的系统都是会出问题的!!下载不到gaia和Gecko还怎么玩?

1.3分析v2.0—v2.5下载中断问题

我猜测是因为由于B2G系统于2016年左右停止维护了,所以这个网站的这部分可能没人管理了。为了印证我得猜测特地去查看了v2.5的https://github.com/mozilla-b2g/b2g-manifest/tree/v2.5,发现nexus-5.xml注释是:

在查看v2.6的https://github.com/mozilla-b2g/b2g-manifest/tree/v2.6,发现nexus-5.xml注释是:change gaia/gecko repo to github; 也就是说v2.5之前的版本它们的gaia和gecko代码不是保存在github上,而是在开发中社区,社区这部分停止维护后出了问题,现在下载v2.5以前的版本就会出现找不到gaia和gecko的问题。

于是,我就断定v2.6是支持是nexus-5的唯一能够下载的可运行版本了,于是配置好config.sh后开始了漫长的下载过程,期间出现几kb的下载速度,而且中间可能会因为网速太慢而中断,只要坚持./repo sync重新下载最终就能够下完这套系统!!

我在下载v2.6版本nexus-5系统时整整花了5天时间!!

 

最后下载完毕后,编译顺利通过,刷入nexus-5后,果然可以完美运行。如图:

2.总结

遇到问题,正确的分析很重要,即便分析的正确,但处理这个问题却花了一周时间。

猜你喜欢

转载自blog.csdn.net/xiaoma_pedro/article/details/81030784
今日推荐