From patchwork Fri Jan 28 16:36:33 2011 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Guilherme Salgado X-Patchwork-Id: 37 Return-Path: Delivered-To: unknown Received: from imap.gmail.com (74.125.159.109) by localhost6.localdomain6 with IMAP4-SSL; 08 Jun 2011 14:39:23 -0000 Delivered-To: patches@linaro.org Received: by 10.147.124.10 with SMTP id b10cs42680yan; Fri, 28 Jan 2011 08:36:35 -0800 (PST) Received: by 10.223.69.141 with SMTP id z13mr2594580fai.9.1296232594376; Fri, 28 Jan 2011 08:36:34 -0800 (PST) Received: from adelie.canonical.com (adelie.canonical.com [91.189.90.139]) by mx.google.com with ESMTP id r10si678297fam.0.2011.01.28.08.36.33; Fri, 28 Jan 2011 08:36:34 -0800 (PST) Received-SPF: pass (google.com: best guess record for domain of bounces@canonical.com designates 91.189.90.139 as permitted sender) client-ip=91.189.90.139; Authentication-Results: mx.google.com; spf=pass (google.com: best guess record for domain of bounces@canonical.com designates 91.189.90.139 as permitted sender) smtp.mail=bounces@canonical.com Received: from loganberry.canonical.com ([91.189.90.37]) by adelie.canonical.com with esmtp (Exim 4.71 #1 (Debian)) id 1PirJJ-0003TR-N6 for ; Fri, 28 Jan 2011 16:36:33 +0000 Received: from loganberry.canonical.com (localhost [127.0.0.1]) by loganberry.canonical.com (Postfix) with ESMTP id A9A152E8031 for ; Fri, 28 Jan 2011 16:36:33 +0000 (UTC) MIME-Version: 1.0 X-Launchpad-Project: linaro-image-tools X-Launchpad-Branch: ~linaro-maintainers/linaro-image-tools/trunk X-Launchpad-Message-Rationale: Subscriber X-Launchpad-Branch-Revision-Number: 269 X-Launchpad-Notification-Type: branch-revision To: Linaro Patch Tracker From: noreply@launchpad.net Subject: [Branch ~linaro-maintainers/linaro-image-tools/trunk] Rev 269: Change OMAP configs to use the correct serial tty depending on the kernel version that is install... Message-Id: <20110128163633.3601.12353.launchpad@loganberry.canonical.com> Date: Fri, 28 Jan 2011 16:36:33 -0000 Reply-To: noreply@launchpad.net Sender: bounces@canonical.com Errors-To: bounces@canonical.com Precedence: bulk X-Generated-By: Launchpad (canonical.com); Revision="12274"; Instance="initZopeless config overlay" X-Launchpad-Hash: 095f53cf79290eb32a191442981490c9f55ac7a7 Merge authors: Guilherme Salgado (salgado) Related merge proposals: https://code.launchpad.net/~salgado/linaro-image-tools/bug-697824/+merge/47818 proposed by: Guilherme Salgado (salgado) review: Approve - Loïc Minier (lool) ------------------------------------------------------------ revno: 269 [merge] committer: Guilherme Salgado branch nick: trunk timestamp: Fri 2011-01-28 14:34:36 -0200 message: Change OMAP configs to use the correct serial tty depending on the kernel version that is installed. A better temporary fix for bug 697824 which makes it possible to use newer versions of l-m-c to build maverick images modified: linaro_media_create/boards.py linaro_media_create/tests/test_media_create.py --- lp:linaro-image-tools https://code.launchpad.net/~linaro-maintainers/linaro-image-tools/trunk You are subscribed to branch lp:linaro-image-tools. To unsubscribe from this branch go to https://code.launchpad.net/~linaro-maintainers/linaro-image-tools/trunk/+edit-subscription === modified file 'linaro_media_create/boards.py' --- linaro_media_create/boards.py 2011-01-26 18:03:50 +0000 +++ linaro_media_create/boards.py 2011-01-28 14:25:54 +0000 @@ -8,6 +8,7 @@ import atexit import glob import os +import re import tempfile from linaro_media_create import cmd_runner @@ -30,6 +31,7 @@ load_addr = None kernel_suffix = None boot_script = None + serial_tty = None @classmethod def get_sfdisk_cmd(cls): @@ -61,7 +63,7 @@ # XXX: I think this is not needed as we have board-specific # serial options for when is_live is true. if is_live: - serial_opts += ' serialtty=ttyS2' + serial_opts += ' serialtty=%s' % cls.serial_tty serial_opts += ' %s' % cls.extra_serial_opts @@ -90,7 +92,8 @@ def make_boot_files(cls, uboot_parts_dir, is_live, is_lowmem, consoles, root_dir, rootfs_uuid, boot_dir, boot_script, boot_device_or_file): - boot_cmd = cls._get_boot_cmd(is_live, is_lowmem, consoles, rootfs_uuid) + boot_cmd = cls._get_boot_cmd( + is_live, is_lowmem, consoles, rootfs_uuid) cls._make_boot_files( uboot_parts_dir, boot_cmd, root_dir, boot_dir, boot_script, boot_device_or_file) @@ -106,11 +109,51 @@ raise NotImplementedError() +class classproperty(object): + """A descriptor that provides @property behavior on class methods.""" + def __init__(self, getter): + self.getter = getter + def __get__(self, instance, cls): + return self.getter(cls) + + class OmapConfig(BoardConfig): + # XXX: Here we define these things as dynamic properties because our + # temporary hack to fix bug 697824 relies on changing the board's + # serial_tty at run time. + _extra_serial_opts = None + _live_serial_opts = None + _serial_tty = None + + @classproperty + def live_serial_opts(cls): + return cls._live_serial_opts % cls.serial_tty + + @classproperty + def extra_serial_opts(cls): + return cls._extra_serial_opts % cls.serial_tty + + @classmethod + def set_appropriate_serial_tty(cls, chroot_dir): + """Set the appropriate serial_tty depending on the kernel used. + + If the kernel found in the chroot dir is << 2.6.36 we use tyyS2, else + we use the default value (_serial_tty). + """ + # XXX: This is also part of our temporary hack to fix bug 697824. + cls.serial_tty = cls._serial_tty + vmlinuz = _get_file_matching( + os.path.join(chroot_dir, 'boot', 'vmlinuz*')) + basename = os.path.basename(vmlinuz) + minor_version = re.match('.*2\.6\.([0-9]{2}).*', basename).group(1) + if int(minor_version) < 36: + cls.serial_tty = 'ttyS2' + @classmethod def _make_boot_files(cls, uboot_parts_dir, boot_cmd, chroot_dir, boot_dir, boot_script, boot_device_or_file): + cls.set_appropriate_serial_tty(chroot_dir) install_omap_boot_loader(chroot_dir, boot_dir) make_uImage( cls.load_addr, uboot_parts_dir, cls.kernel_suffix, boot_dir) @@ -121,8 +164,9 @@ class BeagleConfig(OmapConfig): uboot_flavor = 'omap3_beagle' - extra_serial_opts = 'console=tty0 console=ttyO2,115200n8' - live_serial_opts = 'serialtty=ttyO2' + _serial_tty = 'ttyO2' + _extra_serial_opts = 'console=tty0 console=%s,115200n8' + _live_serial_opts = 'serialtty=%s' kernel_addr = '0x80000000' initrd_addr = '0x81600000' load_addr = '0x80008000' @@ -135,7 +179,8 @@ class OveroConfig(OmapConfig): uboot_flavor = 'omap3_overo' - extra_serial_opts = 'console=tty0 console=ttyO2,115200n8' + _serial_tty = 'ttyO2' + _extra_serial_opts = 'console=tty0 console=%s,115200n8' kernel_addr = '0x80000000' initrd_addr = '0x81600000' load_addr = '0x80008000' @@ -147,8 +192,9 @@ class PandaConfig(OmapConfig): uboot_flavor = 'omap4_panda' - extra_serial_opts = 'console=tty0 console=ttyO2,115200n8' - live_serial_opts = 'serialtty=ttyO2' + _serial_tty = 'ttyO2' + _extra_serial_opts = 'console=tty0 console=%s,115200n8' + _live_serial_opts = 'serialtty=%s' kernel_addr = '0x80200000' initrd_addr = '0x81600000' load_addr = '0x80008000' @@ -173,8 +219,9 @@ class Ux500Config(BoardConfig): - extra_serial_opts = 'console=tty0 console=ttyAMA2,115200n8' - live_serial_opts = 'serialtty=ttyAMA2' + serial_tty = 'ttyAMA2' + extra_serial_opts = 'console=tty0 console=%s,115200n8' % serial_tty + live_serial_opts = 'serialtty=%s' % serial_tty kernel_addr = '0x00100000' initrd_addr = '0x08000000' load_addr = '0x00008000' @@ -197,8 +244,9 @@ class Mx51evkConfig(BoardConfig): - extra_serial_opts = 'console=tty0 console=ttymxc0,115200n8' - live_serial_opts = 'serialtty=ttymxc0' + serial_tty = 'ttymxc0' + extra_serial_opts = 'console=tty0 console=%s,115200n8' % serial_tty + live_serial_opts = 'serialtty=%s' % serial_tty kernel_addr = '0x90000000' initrd_addr = '0x90800000' load_addr = '0x90008000' @@ -229,8 +277,9 @@ class VexpressConfig(BoardConfig): uboot_flavor = 'ca9x4_ct_vxp' - extra_serial_opts = 'console=tty0 console=ttyAMA0,38400n8' - live_serial_opts = 'serialtty=ttyAMA0' + serial_tty = 'ttyAMA0' + extra_serial_opts = 'console=tty0 console=%s,38400n8' % serial_tty + live_serial_opts = 'serialtty=%s' % serial_tty kernel_addr = '0x60008000' initrd_addr = '0x81000000' load_addr = kernel_addr === modified file 'linaro_media_create/tests/test_media_create.py' --- linaro_media_create/tests/test_media_create.py 2011-01-27 18:43:55 +0000 +++ linaro_media_create/tests/test_media_create.py 2011-01-28 14:25:54 +0000 @@ -166,60 +166,86 @@ def mock_func_creator(name): return lambda *args, **kwargs: self.funcs_calls.append(name) - for name in dir(linaro_media_create.boards): - attr = getattr(linaro_media_create.boards, name) + for name in dir(boards): + attr = getattr(boards, name) if type(attr) == types.FunctionType: self.useFixture(MockSomethingFixture( - linaro_media_create.boards, name, mock_func_creator(name))) + linaro_media_create.boards, name, + mock_func_creator(name))) + + def mock_set_appropriate_serial_tty(self, config): + + def set_appropriate_serial_tty_mock(cls, chroot_dir): + cls.serial_tty = cls._serial_tty + + self.useFixture(MockSomethingFixture( + config, 'set_appropriate_serial_tty', + classmethod(set_appropriate_serial_tty_mock))) def make_boot_files(self, config): config.make_boot_files('', False, False, [], '', '', '', '', '') def test_vexpress_steps(self): - config = linaro_media_create.boards.VexpressConfig - self.make_boot_files(config) + self.make_boot_files(boards.VexpressConfig) expected = ['make_uImage', 'make_uInitrd'] self.assertEqual(expected, self.funcs_calls) def test_mx51evk_steps(self): - config = linaro_media_create.boards.Mx51evkConfig - self.make_boot_files(config) + self.make_boot_files(boards.Mx51evkConfig) expected = [ 'install_mx51evk_boot_loader', 'make_uImage', 'make_uInitrd', 'make_boot_script'] self.assertEqual(expected, self.funcs_calls) def test_ux500_steps(self): - config = linaro_media_create.boards.Ux500Config - self.make_boot_files(config) + self.make_boot_files(boards.Ux500Config) expected = ['make_uImage', 'make_uInitrd', 'make_boot_script'] self.assertEqual(expected, self.funcs_calls) def test_panda_steps(self): - config = linaro_media_create.boards.PandaConfig - self.make_boot_files(config) + self.mock_set_appropriate_serial_tty(boards.PandaConfig) + self.make_boot_files(boards.PandaConfig) expected = [ 'install_omap_boot_loader', 'make_uImage', 'make_uInitrd', 'make_boot_script', 'make_boot_ini'] self.assertEqual(expected, self.funcs_calls) def test_beagle_steps(self): - config = linaro_media_create.boards.BeagleConfig - self.make_boot_files(config) + self.mock_set_appropriate_serial_tty(boards.BeagleConfig) + self.make_boot_files(boards.BeagleConfig) expected = [ 'install_omap_boot_loader', 'make_uImage', 'make_uInitrd', 'make_boot_script', 'make_boot_ini'] self.assertEqual(expected, self.funcs_calls) def test_overo_steps(self): - config = linaro_media_create.boards.OveroConfig - self.make_boot_files(config) + self.mock_set_appropriate_serial_tty(boards.OveroConfig) + self.make_boot_files(boards.OveroConfig) expected = [ 'install_omap_boot_loader', 'make_uImage', 'make_uInitrd', 'make_boot_script', 'make_boot_ini'] self.assertEqual(expected, self.funcs_calls) +class TestFixForBug697824(TestCaseWithFixtures): + + def test_set_appropriate_serial_tty_old_kernel(self): + tempdir = self.useFixture(CreateTempDirFixture()).tempdir + boot_dir = os.path.join(tempdir, 'boot') + os.makedirs(boot_dir) + open(os.path.join(boot_dir, 'vmlinuz-2.6.35-23-foo'), 'w').close() + boards.BeagleConfig.set_appropriate_serial_tty(tempdir) + self.assertEquals('ttyS2', boards.BeagleConfig.serial_tty) + + def test_set_appropriate_serial_tty_new_kernel(self): + tempdir = self.useFixture(CreateTempDirFixture()).tempdir + boot_dir = os.path.join(tempdir, 'boot') + os.makedirs(boot_dir) + open(os.path.join(boot_dir, 'vmlinuz-2.6.36-13-foo'), 'w').close() + boards.BeagleConfig.set_appropriate_serial_tty(tempdir) + self.assertEquals('ttyO2', boards.BeagleConfig.serial_tty) + + class TestGetSfdiskCmd(TestCase): def test_default(self): @@ -284,7 +310,12 @@ self.assertEqual(expected, boot_cmd) def test_beagle(self): - boot_cmd = board_configs['beagle']._get_boot_cmd( + # XXX: To fix bug 697824 we have to change class attributes of our + # OMAP board configs, and some tests do that so to make sure they + # don't interfere with us we'll reset that before doing anything. + config = board_configs['beagle'] + config.serial_tty = config._serial_tty + boot_cmd = config._get_boot_cmd( is_live=False, is_lowmem=False, consoles=None, rootfs_uuid="deadbeef") expected = (