Index: factory_install.sh |
diff --git a/factory_install.sh b/factory_install.sh |
index 9d88e6caa6db4ab855cf369e8a305d2120f6a6a0..6791f36716efe00260e00f819f224bce3ee621ef 100644 |
--- a/factory_install.sh |
+++ b/factory_install.sh |
@@ -70,6 +70,16 @@ set_time() { |
return 1 |
} |
+list_ethernet_interface() { |
+ local candidates=$(ifconfig | grep 'Link encap:Ethernet' | cut -d ' ' -f 1) |
Hung-Te
2011/03/30 09:17:53
Please quote the $() to "$()", if you use "local".
Che-Liang Chiou
2011/03/30 09:54:38
Done. Just for curious: why local needs quote? (do
Hung-Te
2011/03/30 10:34:40
bash and dash interpret "local" and $() in differe
|
+ for candidate in $candidates; do |
+ # output if it is not a wifi interface |
+ if ! iw $candidate info > /dev/null 2>&1; then |
Hung-Te
2011/03/30 09:17:53
>/dev/null, no need for the space.
Che-Liang Chiou
2011/03/30 09:54:38
Done.
|
+ echo $candidate |
+ fi |
+ done |
+} |
+ |
log "Starting Factory Installer." |
log "Checking for Firmware Write Protect" |
@@ -87,9 +97,33 @@ if crossystem hwid >/dev/null; then |
fi |
fi |
+# |
+# factory_install.sh implements two operations for assembly line |
+# operators: install (obviously) and reset. |
+# |
+# Somehow the way that operators switch between the two operations |
+# is by plugging in a ethernet cable. |
Nick Sanders
2011/03/30 09:45:33
Thanks for adding the comment here:
Note that the
|
+# |
+# So we have to detect a possible ethernet connection here. |
+# |
+ |
+ETHERNET_INTERFACES=$(list_ethernet_interface) |
Hung-Te
2011/03/30 09:17:53
Please do this inside the while-loop, because oper
|
+ |
log "Waiting for ethernet connectivity to install" |
log "Or disable developer mode to factory reset." |
-while ! ifconfig eth0 | grep -q "inet addr"; do |
+while true; do |
+ connected=0 |
+ for ethernet_interface in $ETHERNET_INTERFACES; do |
+ if ifconfig $ethernet_interface | grep -q "inet addr"; then |
+ log "$(ifconfig $ethernet_interface | grep 'inet addr')" |
+ connected=1 |
+ break |
+ fi |
+ done |
+ if [ $connected -eq 1 ]; then |
+ break |
+ fi |
+ |
# If developer switch is flipped, go to "reset mode" instead of |
# network install mode. Make sure gpio can be read (gpio_setup may |
# fail if the device is not ready). |
@@ -105,13 +139,26 @@ while ! ifconfig eth0 | grep -q "inet addr"; do |
fi |
sleep 1 |
done |
-log "$(ifconfig eth0 | grep 'inet addr')" |
set_time || exit 1 |
-# TODO(adlr): pick an install device in a matter that works on x86 and ARM. |
-# This works on x86 only, afaik. |
-DST_DRIVE=/dev/sda |
+# TODO(crosbug:10680): replace arch detection with crossystem? |
+if uname -m | grep -q "^i.86\$"; then |
+ ARCH="INTEL" |
+elif [ $(uname -m ) = "x86_64" ]; then |
+ ARCH="INTEL" |
+elif [ $(uname -m ) = "armv7l" ]; then |
+ ARCH="ARM" |
+else |
+ log "Error: Failed to auto detect architecture" |
+ exit 1 |
+fi |
+ |
+if [ "$ARCH" = "INTEL" ]; then |
+ DST_DRIVE=/dev/sda |
+else |
+ DST_DRIVE=/dev/mmcblk0 |
+fi |
DST_FACTORY_PART=3 |
DST_RELEASE_PART=5 |
DST_OEM_PART=8 |
@@ -121,7 +168,7 @@ DST_FIRMWARE=/tmp/firmware.sh |
# Light up screen in case you can't see our splash image. |
LIGHTUP_SCREEN="/usr/sbin/lightup_screen" |
-if [ -x /usr/sbin/lightup_screen ]; then |
+if [ -x "${LIGHTUP_SCREEN}" ]; then |
${LIGHTUP_SCREEN} |
else |
log "${LIGHTUP_SCREEN} does not exist or not executable" |
@@ -155,6 +202,7 @@ fi |
sync |
echo 3 > /proc/sys/vm/drop_caches |
/sbin/sfdisk -R "$DST_DRIVE" |
+partprobe # inform the OS of partition table changes |
log "Done preparing disk" |
@@ -171,7 +219,7 @@ for i in EFI OEM STATE RELEASE FACTORY FIRMWARE; do |
DST="${DST_FIRMWARE}" |
else |
PART=$(eval "echo \$DST_${i}_PART") |
- DST="${DST_DRIVE}${PART}" |
+ DST="$(make_partition_dev ${DST_DRIVE} ${PART})" |
fi |
log "Factory Install: Installing $i image to $DST" |
@@ -216,8 +264,10 @@ done |
if ! cgpt add -i $((${DST_RELEASE_PART} - 1)) -P 0 -T 0 -S 0 ${DST_DRIVE}; then |
log "Factory Install: failed to lock release image. Destroy all kernels." |
# Destroy kernels otherwise the system is still bootable. |
- dd if=/dev/zero of=${DST_DRIVE}$((${DST_RELEASE_PART} - 1)) |
- dd if=/dev/zero of=${DST_DRIVE}$((${DST_FACTORY_PART} - 1)) |
+ DST_RELEASE=$(make_partition_dev ${DST_DRIVE} $((${DST_RELEASE_PART} - 1))) |
+ DST_FACTORY=$(make_partition_dev ${DST_DRIVE} $((${DST_FACTORY_PART} - 1))) |
+ dd if=/dev/zero of=$DST_RELEASE |
+ dd if=/dev/zero of=$DST_FACTORY |
exit 1 |
fi |