aboutsummaryrefslogtreecommitdiff
path: root/linaro_image_tools/media_create
diff options
context:
space:
mode:
Diffstat (limited to 'linaro_image_tools/media_create')
-rw-r--r--linaro_image_tools/media_create/__init__.py4
-rw-r--r--linaro_image_tools/media_create/android_boards.py94
2 files changed, 94 insertions, 4 deletions
diff --git a/linaro_image_tools/media_create/__init__.py b/linaro_image_tools/media_create/__init__.py
index efbc212..c539541 100644
--- a/linaro_image_tools/media_create/__init__.py
+++ b/linaro_image_tools/media_create/__init__.py
@@ -124,6 +124,10 @@ def get_android_args_parser():
parser.add_argument(
'--boot_label', default='boot',
help='Label to use for the boot filesystem.')
+ parser.add_argument(
+ '--console', action='append', dest='consoles', default=[],
+ help=('Add a console to kernel boot parameter; this parameter can be '
+ 'defined multiple times.'))
parser.add_argument(
'--system', default='system.tar.bz2', required=True,
diff --git a/linaro_image_tools/media_create/android_boards.py b/linaro_image_tools/media_create/android_boards.py
index dd4e78b..74df5d8 100644
--- a/linaro_image_tools/media_create/android_boards.py
+++ b/linaro_image_tools/media_create/android_boards.py
@@ -20,13 +20,16 @@
"""Configuration for boards supported by linaro-android-media-create.
To add support for a new board, you need to create a subclass of
-BoardConfig, set appropriate values for its variables and add it to
+AndroidBoardConfig, set appropriate values for its variables and add it to
android_board_configs at the bottom of this file.
"""
from linaro_image_tools.media_create.partitions import SECTOR_SIZE
from linaro_image_tools.media_create.boards import BeagleConfig
from linaro_image_tools.media_create.boards import PandaConfig
+from linaro_image_tools.media_create.boards import make_boot_script
+from linaro_image_tools import cmd_runner
+import os
# align on 4 MiB
@@ -52,8 +55,41 @@ def align_partition(min_start, min_length, start_alignment, end_alignment):
length = end - start + 1
return start, end, length
+
class AndroidBoardConfig(object):
@classmethod
+ def _get_bootargs(cls, consoles):
+ """Get the bootargs for this board.
+
+ In general subclasses should not have to override this.
+ """
+ boot_args_options = 'rootwait ro'
+ if cls.extra_boot_args_options is not None:
+ boot_args_options += ' %s' % cls.extra_boot_args_options
+ serial_opts = cls._extra_serial_opts
+ for console in consoles:
+ serial_opts += ' console=%s' % console
+
+ replacements = dict(
+ serial_opts=serial_opts,
+ boot_args_options=boot_args_options)
+ return (
+ "%(serial_opts)s "
+ "%(boot_args_options)s"
+ % replacements)
+
+ @classmethod
+ def _get_boot_env(cls, consoles):
+ """Get the boot environment for this board.
+
+ In general subclasses should not have to override this.
+ """
+ boot_env = {}
+ boot_env["bootargs"] = cls._get_bootargs(consoles)
+ boot_env["bootcmd"] = cls.bootcmd
+ return boot_env
+
+ @classmethod
def get_sfdisk_cmd(cls, should_align_boot_part=False):
if cls.fat_size == 32:
partition_type = '0x0C'
@@ -96,11 +132,61 @@ class AndroidBoardConfig(object):
_userdata_len, sdcard_start)
-class AndroidBeagleConfig(AndroidBoardConfig, BeagleConfig):
+class AndroidOmapConfig(AndroidBoardConfig):
pass
-class AndroidPandaConfig(AndroidBoardConfig, PandaConfig):
- pass
+
+class AndroidBeagleConfig(AndroidOmapConfig, BeagleConfig):
+ _extra_serial_opts = 'console=tty0 console=ttyO2,115200n8'
+ extra_boot_args_options = (
+ 'init=/init androidboot.console=ttyO2 '
+ 'earlyprintk fixrtc nocompcache vram=12M '
+ 'omapfb.mode=dvi:1280x720MR-16@60')
+
+ @classmethod
+ def populate_boot_script(cls, boot_partition, boot_disk, consoles):
+ cmd_runner.run(['mkdir', '-p', boot_disk]).wait()
+ cmd_runner.run(['mount', boot_partition, boot_disk],
+ as_root=True).wait()
+
+ boot_env = cls._get_boot_env(consoles)
+
+ boot_dir = boot_disk
+ boot_script_path = os.path.join(boot_dir, cls.boot_script)
+ make_boot_script(boot_env, boot_script_path)
+
+ cmd_runner.run(['sync']).wait()
+ try:
+ cmd_runner.run(['umount', boot_disk], as_root=True).wait()
+ except cmd_runner.SubcommandNonZeroReturnValue:
+ pass
+
+
+class AndroidPandaConfig(AndroidOmapConfig, PandaConfig):
+ _extra_serial_opts = 'console=tty0 console=ttyO2,115200n8'
+ extra_boot_args_options = (
+ 'init=/init androidboot.console=ttyO2 '
+ 'earlyprintk fixrtc nocompcache vram=32M '
+ 'omapfb.vram=0:8M mem=463M@0x80000000 mem=512M@0xA0000000')
+
+ @classmethod
+ def populate_boot_script(cls, boot_partition, boot_disk, consoles):
+ cmd_runner.run(['mkdir', '-p', boot_disk]).wait()
+ cmd_runner.run(['mount', boot_partition, boot_disk],
+ as_root=True).wait()
+
+ boot_env = cls._get_boot_env(consoles)
+
+ boot_dir = boot_disk
+ boot_script_path = os.path.join(boot_dir, cls.boot_script)
+ make_boot_script(boot_env, boot_script_path)
+
+ cmd_runner.run(['sync']).wait()
+ try:
+ cmd_runner.run(['umount', boot_disk], as_root=True).wait()
+ except cmd_runner.SubcommandNonZeroReturnValue:
+ pass
+
android_board_configs = {
'beagle': AndroidBeagleConfig,