← Back to team overview

ubuntu-phone team mailing list archive

[Development] I need help with porting ubuntu-touch to new phone

 

I'm building ubuntu-touch for my device after building it and installing it with rootstock-touch-install (I've edited the script a little bit ) it stuck at bootlogo and I can't use adb (the device is offline and need to be authenticated ) so is there anything I can do ? I've attached the script I use to install ubuntu-phone to my device ... PS : I've copied ubuntu.img to /data and made a symbolic link of it at /data/system.img
the preinstalled ubuntu-touch : zesty-preinstalled-touch-armhf.tar.gz
is there anything should I attach too ?
#!/bin/sh -x
#
#  Copyright (c) 2014 Canonical
#
#  Author: Oliver Grawert <ogra@xxxxxxxxxxxxx>
#
#  This program is free software; you can redistribute it and/or
#  modify it under the terms of the GNU General Public License as
#  published by the Free Software Foundation; either version 2 of the
#  License, or (at your option) any later version.
#
#  This program is distributed in the hope that it will be useful,
#  but WITHOUT ANY WARRANTY; without even the implied warranty of
#  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
#  GNU General Public License for more details.
#
#  You should have received a copy of the GNU General Public License
#  along with this program; if not, write to the Free Software
#  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
#  USA
#

set -e

TARPATH=$1
SYSIMG=$2

check_prereq()
{
	if [ ! $(which make_ext4fs) ] || [ ! -x $(which simg2img) ] || \
		[ ! -x $(which adb) ]; then
		echo "please install the android-tools-fsutils and android-tools-adb packages" && exit 1
	fi
}

do_shell()
{
	adb shell "$@"
}

convert_android_img()
{
	if file $SYSIMG | grep -v ": Linux rev 1.0 ext4" >/dev/null; then
		simg2img $SYSIMG $WORKDIR/system.img.raw
		mkdir $TMPMOUNT
		mount -t ext4 -o loop $WORKDIR/system.img.raw $TMPMOUNT
		make_ext4fs -l 120M $WORKDIR/system.img $TMPMOUNT >/dev/null 2>&1
		SYSIMAGE=$WORKDIR/system.img
	else
		SYSIMAGE=$SYSIMG
	fi
}

check_mounts(){
	MOUNTS=$(do_shell "cat /proc/mounts")
	if ! grep -qs '/cache' $MOUNTS; then
		do_shell "mount /cache"
	fi
	if ! grep -qs '/data' $MOUNTS; then
		do_shell "mount /data"
	fi
	if ! grep -qs '/system' $MOUNTS; then
		do_shell "mount /system"
	fi

}


prepare_ubuntu_system()
{
	do_shell "rm -f /data/ubuntu.img"
	for data in system android; do
		do_shell "rm -rf /data/$data-data"
	done
	if [ -z "$KEEP" ]; then
		do_shell "rm -rf /data/user-data"
	else
		echo -n "keep option set, keeping user data ... "
	fi

	do_shell "dd if=/dev/zero of=/external_sd/ubuntu.img seek=500K bs=4096 count=0 >/dev/null 2>&1"
	#do_shell "mkfs.ext2 -F /external_sd/ubuntu.img >/dev/null 2>&1"
	do_shell "make_ext4fs -l 1500M /external_sd/ubuntu.img >/dev/null 2>&1"
	do_shell "mkdir -p /external_sd/system"
	do_shell "mount -o loop /external_sd/ubuntu.img /external_sd/system/"

	# system.img is the deprecated name, but we make link to ubuntu.img
	do_shell "ln -s /external_sd/ubuntu.img /external_sd/system.img"
}

cleanup()
{
	mount | grep -q $TMPMOUNT 2>/dev/null && umount $TMPMOUNT
	cleanup_device
	rm -rf $WORKDIR
	echo
}

cleanup_device()
{
	[ -e $WORKDIR/device-clean ] && return
	do_shell "umount /external_sd/system/ 2>/dev/null && rm -rf /external_sd/system 2>/dev/null"
	do_shell "rm -f /cache/$TARBALL"
	[ -e $WORKDIR ] && touch $WORKDIR/device-clean 2>/dev/null || true
}

trap cleanup 0 1 2 3 9 15

usage()
{
	echo "usage: $(basename $0) <path to rootfs tarball> <path to android system.img> [options]\n
	options:
	-h|--help		this message
	-c|--custom		path to customization tarball (needs to be tar.xz)
	-k|--keep-userdata	do not wipe user data on device
	-w|--wipe-file		absolute path of a file inside the image to wipe (empty)\n"
	exit 1
}

SUDOARGS="$@"

while [ $# -gt 0 ]; do
	case "$1" in
		-h|--help)
			usage
			;;
		-c|--custom)
			[ -n "$2" ] && CUST_TARPATH=$2 shift || usage
			;;
		-k|--keep-userdata)
			KEEP=1
			;;
		-w|--wipe-file)
			[ -n "$2" ] && WIPE_PATH=$2 shift || usage
			;;
	esac
	shift
done

TARBALL=$(basename $TARPATH)

if [ -z "$TARBALL" ]; then
    echo "need valid rootfs tarball path"
    usage
fi

TARTYPE=$(file --mime-type $TARPATH|sed 's/^.* //')
case ${TARTYPE#application\/} in
    gzip|x-gzip)
	;;
    *)
	echo "Need valid rootfs tarball gzip type"
	usage
	;;
esac

if [ -z "$SYSIMG" ] || \
	[ "$(file --mime-type $SYSIMG|sed 's/^.* //')" != "application/octet-stream" ]; then
	echo "need valid system.img path and type application/octet-stream"
	usage
fi

if [ ! -z "$CUST_TARPATH" ] && \
	[  "$(file --mime-type $CUST_TARPATH|sed 's/^.* //')" != "application/x-xz" ]; then
	echo "Custom tarball needs to be valid path and type .tar.xz"
	usage
fi

[ $(id -u) -ne 0 ] && exec sudo $0 $SUDOARGS

check_prereq

if ! adb devices | grep -q recovery; then
	echo "please make sure the device is attched via USB in recovery mode"
	exit 1
fi

check_mounts

WORKDIR=$(mktemp -d /tmp/rootstock-touch-install.XXXXX)
TMPMOUNT="$WORKDIR/tmpmount"

echo -n "transfering rootfs tarball ... "
adb push $TARPATH /cache/ >/dev/null 2>&1
echo "[done]"

if [ ! -z "$CUST_TARPATH" ]; then
	CUST_TARBALL=$(basename $CUST_TARPATH)
	echo  -n "transferring custom tarball"
	adb push $CUST_TARPATH /cache/ >/dev/null 2>&1
	echo "[done]"
fi

echo -n "preparing system-image on device ... "
prepare_ubuntu_system
echo "[done]"

echo -n "unpacking rootfs tarball to system-image ... "
do_shell "cd /external_sd/system && zcat /cache/$TARBALL | tar xf -"
do_shell "mkdir -p /external_sd/system/android/firmware"
do_shell "mkdir -p /external_sd/system/android/persist"
do_shell "mkdir -p /external_sd/system/userdata"
do_shell "[ -e /external_sd/system/SWAP.swap ] && mv /cache/system/SWAP.swap /external_sd/SWAP.img"
for link in cache data factory firmware persist system; do
	do_shell "cd /external_sd/system && ln -s /android/$link $link"
done
do_shell "cd /external_sd/system/lib && ln -s /system/lib/modules modules"
do_shell "cd /external_sd/system && ln -s /android/system/vendor vendor"
do_shell "[ -e /external_sd/system/etc/mtab ] && rm /external_sd/system/etc/mtab"
do_shell "cd /external_sd/system/etc && ln -s /proc/mounts mtab"
if [ ! -z "$WIPE_PATH" ]; then
	do_shell "echo ' ' >/external_sd/system/$WIPE_PATH || true"
fi
echo "[done]"

if [ ! -z "$CUST_TARPATH" ];then
	echo -n "unpacking custom tarball"
	do_shell "mkdir -p /cache/system/custom"
	do_shell "cd /cache && xzcat /recovery/$CUST_TARBALL | tar xf -"
	echo "[done]"
fi

echo -n "adding android system image to installation ... "
convert_android_img
ANDROID_DIR="/external_sd/system/var/lib/lxc/android/"
adb push $SYSIMAGE $ANDROID_DIR >/dev/null 2>&1
echo "[done]"

echo -n "enabling Mir ... "
do_shell "touch /external_sd/system/home/phablet/.display-mir"
echo "[done]"

echo -n "cleaning up on device ... "
cleanup_device
echo "[done]"

echo "rebooting device"
echo "DONE !!!!!"
#adb reboot