diff options
author | Yongqin Liu <yongqin.liu@linaro.org> | 2014-06-26 23:41:42 +0800 |
---|---|---|
committer | Yongqin Liu <yongqin.liu@linaro.org> | 2014-07-08 17:20:05 +0800 |
commit | 510a4c080545b82d16da291d78eb4820f0e8f7d8 (patch) | |
tree | 0fe964b853ab300ac5597fd2706e353261028bd4 | |
parent | 84ac5df57bee8757e897b19faf2369e2dc8c1858 (diff) |
linaro-android-media-create: add support to use img files
add support for using system.img and userdata.img generated
by android build system directly.
this is needed for the support of selinux on Android since the img files
have the selabel information persisted
Change-Id: I40ad1c94817821f6c9a12062c0fa82dd35e34ae4
Signed-off-by: Yongqin Liu <yongqin.liu@linaro.org>
-rwxr-xr-x | linaro-android-media-create | 37 | ||||
-rw-r--r-- | linaro_image_tools/media_create/__init__.py | 27 | ||||
-rw-r--r-- | linaro_image_tools/media_create/android_boards.py | 2 | ||||
-rw-r--r-- | linaro_image_tools/media_create/tests/test_media_create.py | 14 |
4 files changed, 63 insertions, 17 deletions
diff --git a/linaro-android-media-create b/linaro-android-media-create index 61140ab..30efa31 100755 --- a/linaro-android-media-create +++ b/linaro-android-media-create @@ -136,8 +136,10 @@ if __name__ == '__main__': cmd_runner.run(['mkdir', '-p', DATA_DIR]).wait() unpack_android_binary_tarball(args.boot, BOOT_DIR) - unpack_android_binary_tarball(args.system, SYSTEM_DIR) - unpack_android_binary_tarball(args.userdata, DATA_DIR) + if args.system: + unpack_android_binary_tarball(args.system, SYSTEM_DIR) + if args.userdata: + unpack_android_binary_tarball(args.userdata, DATA_DIR) board_config = get_board_config(args.dev) @@ -167,6 +169,33 @@ if __name__ == '__main__': board_config.populate_boot_script(boot_partition, BOOT_DISK, args.consoles) with partition_mounted(boot_partition, BOOT_DISK): board_config.install_boot_loader(args.device, BOOT_DISK) - populate_partition(SYSTEM_DIR + "/system", SYSTEM_DISK, system_partition) - populate_partition(DATA_DIR + "/data", DATA_DISK, data_partition) + + if args.system: + populate_partition(SYSTEM_DIR + "/system", SYSTEM_DISK, system_partition) + elif args.systemimage : + cmd_runner.run( [ 'e2label', args.systemimage, "system"], + stderr=open('/dev/null', 'w'), + as_root=True).wait() + cmd_runner.run( [ 'dd', 'if=%s' % args.systemimage, + 'of=%s' % system_partition], + stderr=open('/dev/null', 'w'), + as_root=True).wait() + else: + #should not reach here + pass + + if args.userdata: + populate_partition(DATA_DIR + "/data", DATA_DISK, data_partition) + elif args.userdataimage: + cmd_runner.run( [ 'e2label', args.userdataimage, "userdata"], + stderr=open('/dev/null', 'w'), + as_root=True).wait() + cmd_runner.run( [ 'dd', 'if=%s' % args.userdataimage, + 'of=%s' % data_partition], + stderr=open('/dev/null', 'w'), + as_root=True).wait() + else: + #should not reach here + pass + print "Done creating Linaro Android image on %s" % args.device diff --git a/linaro_image_tools/media_create/__init__.py b/linaro_image_tools/media_create/__init__.py index a69156d..0e08dda 100644 --- a/linaro_image_tools/media_create/__init__.py +++ b/linaro_image_tools/media_create/__init__.py @@ -213,12 +213,29 @@ def get_android_args_parser(): '--console', action='append', dest='consoles', default=[], help=('Add a console to kernel boot parameter; this parameter can be ' 'defined multiple times.')) + + #group for system partition content specification + group = parser.add_mutually_exclusive_group(required=True) + group.add_argument( + '--system', dest="system", + help=('The tarball containing the Android system paritition.' + 'Like system.tar.bz2')) + group.add_argument( + '--systemimage', dest="systemimage", + help=('The ext4 filesystem data file containing the Android ' + 'system paritition. Like system.img')) + + #group for userdata partition content specification + group = parser.add_mutually_exclusive_group(required=True) parser.add_argument( - '--system', default='system.tar.bz2', required=True, - help=('The tarball containing the Android system paritition')) - parser.add_argument( - '--userdata', default='userdata.tar.bz2', required=True, - help=('The tarball containing the Android data paritition')) + '--userdata', dest="userdata", + help=('The tarball containing the Android data paritition.' + 'Like userdata.tar.bz2')) + group.add_argument( + '--userdataimage', dest="userdataimage", + help=('The ext4 filesystem data containing the Android ' + 'data paritition. Like userdata.img')) + parser.add_argument( '--boot', default='boot.tar.bz2', required=True, help=('The tarball containing the Android root partition')) diff --git a/linaro_image_tools/media_create/android_boards.py b/linaro_image_tools/media_create/android_boards.py index d1dc9ed..85a2197 100644 --- a/linaro_image_tools/media_create/android_boards.py +++ b/linaro_image_tools/media_create/android_boards.py @@ -63,7 +63,7 @@ logger = logging.getLogger(DEFAULT_LOGGER_NAME) BOOT_MIN_SIZE_S = align_up(128 * 1024 * 1024, SECTOR_SIZE) / SECTOR_SIZE SYSTEM_MIN_SIZE_S = align_up(768 * 1024 * 1024, SECTOR_SIZE) / SECTOR_SIZE CACHE_MIN_SIZE_S = align_up(256 * 1024 * 1024, SECTOR_SIZE) / SECTOR_SIZE -USERDATA_MIN_SIZE_S = align_up(512 * 1024 * 1024, SECTOR_SIZE) / SECTOR_SIZE +USERDATA_MIN_SIZE_S = align_up(576 * 1024 * 1024, SECTOR_SIZE) / SECTOR_SIZE SDCARD_MIN_SIZE_S = align_up(256 * 1024 * 1024, SECTOR_SIZE) / SECTOR_SIZE LOADER_MIN_SIZE_S = align_up(1 * 1024 * 1024, SECTOR_SIZE) / SECTOR_SIZE diff --git a/linaro_image_tools/media_create/tests/test_media_create.py b/linaro_image_tools/media_create/tests/test_media_create.py index 0d21ad0..e45e489 100644 --- a/linaro_image_tools/media_create/tests/test_media_create.py +++ b/linaro_image_tools/media_create/tests/test_media_create.py @@ -1905,43 +1905,43 @@ class TestGetSfdiskCmd(TestCase): def test_panda_android(self): self.assertEqual( '63,270272,0x0C,*\n270336,1572864,L\n1843200,524288,L\n' - '2367488,-,E\n2367488,1048576,L\n3416064,,,-', + '2367488,-,E\n2367488,1179648,L\n3547136,,,-', android_boards.AndroidPandaConfig().get_sfdisk_cmd()) def test_origen_android(self): self.assertEqual( '1,8191,0xDA\n8253,270274,0x0C,*\n278528,1572864,L\n' - '1851392,-,E\n1851392,524288,L\n2375680,1048576,L\n3424256,,,-', + '1851392,-,E\n1851392,524288,L\n2375680,1179648,L\n3555328,,,-', android_boards.AndroidOrigenConfig().get_sfdisk_cmd()) def test_origen_quad_android(self): self.assertEqual( '1,8191,0xDA\n8253,270274,0x0C,*\n278528,1572864,L\n' - '1851392,-,E\n1851392,524288,L\n2375680,1048576,L\n3424256,,,-', + '1851392,-,E\n1851392,524288,L\n2375680,1179648,L\n3555328,,,-', android_boards.AndroidOrigenQuadConfig().get_sfdisk_cmd()) def test_snowball_emmc_android(self): self.assertEqual( '256,7936,0xDA\n8192,262144,0x0C,*\n270336,1572864,L\n' - '1843200,-,E\n1843200,524288,L\n2367488,1048576,L\n3416064,,,-', + '1843200,-,E\n1843200,524288,L\n2367488,1179648,L\n3547136,,,-', android_boards.AndroidSnowballEmmcConfig().get_sfdisk_cmd()) def test_vexpress_android(self): self.assertEqual( '63,270272,0x0E,*\n270336,1572864,L\n1843200,524288,L\n' - '2367488,-,E\n2367488,1048576,L\n3416064,,,-', + '2367488,-,E\n2367488,1179648,L\n3547136,,,-', android_boards.AndroidVexpressConfig().get_sfdisk_cmd()) def test_mx5_android(self): self.assertEqual( '1,8191,0xDA\n8192,262144,0x0C,*\n270336,1572864,L\n' - '1843200,-,E\n1843200,524288,L\n2367488,1048576,L\n3416064,,,-', + '1843200,-,E\n1843200,524288,L\n2367488,1179648,L\n3547136,,,-', android_boards.AndroidMx53LoCoConfig().get_sfdisk_cmd()) def test_mx6_android(self): self.assertEqual( '1,8191,0xDA\n8192,262144,0x0C,*\n270336,1572864,L\n' - '1843200,-,E\n1843200,524288,L\n2367488,1048576,L\n3416064,,,-', + '1843200,-,E\n1843200,524288,L\n2367488,1179648,L\n3547136,,,-', android_boards.AndroidMx6QSabreliteConfig().get_sfdisk_cmd()) |