Join device and partition number for x86 and ARM.

ARM partition naming is different from x86. It is something like /dev/mmcblk0p2.
An additional 'p' is required.

BUG=chromium-os:22712
TEST=manual run on Kaen
$ run_remote_tests.sh --remote=$REMOTE_IP -a \
      "servo_vid=0x18d1 servo_pid=0x5001" firmware_CorruptKernelA
$ run_remote_tests.sh --remote=$REMOTE_IP -a \
      "servo_vid=0x18d1 servo_pid=0x5001" firmware_CorruptKernelB

Change-Id: I7207101a92addb317252a9ee9798d64a1c88150d
Reviewed-on: https://gerrit.chromium.org/gerrit/11437
Commit-Ready: Tom Wai-Hong Tam <waihong@chromium.org>
Reviewed-by: Tom Wai-Hong Tam <waihong@chromium.org>
Tested-by: Tom Wai-Hong Tam <waihong@chromium.org>
diff --git a/server/cros/faftsequence.py b/server/cros/faftsequence.py
index f19317f..5c01a6b 100644
--- a/server/cros/faftsequence.py
+++ b/server/cros/faftsequence.py
@@ -218,20 +218,46 @@
         return self.ROOTFS_MAP[expected_part] == part[-1]
 
 
+    def _join_part(self, dev, part):
+        """Return a concatenated string of device and partition number.
+
+        Args:
+          dev: A string of device, e.g.'/dev/sda'.
+          part: A string of partition number, e.g.'3'.
+
+        Returns:
+          A concatenated string of device and partition number, e.g.'/dev/sda3'.
+
+        >>> seq = FAFTSequence()
+        >>> seq._join_part('/dev/sda', '3')
+        '/dev/sda3'
+        >>> seq._join_part('/dev/mmcblk0', '2')
+        '/dev/mmcblk0p2'
+        """
+        if 'mmcblk' in dev:
+            return dev + 'p' + part
+        else:
+            return dev + part
+
+
     def copy_kernel_and_rootfs(self, from_part, to_part):
         """Copy kernel and rootfs from from_part to to_part.
 
         Args:
           from_part: A string of partition number to be copied from.
-          to_part: A string of partition number to be copied to
+          to_part: A string of partition number to be copied to.
         """
         root_dev = self.faft_client.get_root_dev()
+        logging.info('Copying kernel from %s to %s. Please wait...' %
+                     (from_part, to_part))
         self.faft_client.run_shell_command('dd if=%s of=%s bs=4M' %
-                (root_dev + self.KERNEL_MAP[from_part],
-                 root_dev + self.KERNEL_MAP[to_part]))
+                (self._join_part(root_dev, self.KERNEL_MAP[from_part]),
+                 self._join_part(root_dev, self.KERNEL_MAP[to_part])))
+        logging.info('Copying rootfs from %s to %s. Please wait...' %
+                     (from_part, to_part))
         self.faft_client.run_shell_command('dd if=%s of=%s bs=4M' %
-                (root_dev + self.ROOTFS_MAP[from_part],
-                 root_dev + self.ROOTFS_MAP[to_part]))
+                (self._join_part(root_dev, self.ROOTFS_MAP[from_part]),
+                 self._join_part(root_dev, self.ROOTFS_MAP[to_part])))
 
 
     def ensure_kernel_boot(self, part):