All of lore.kernel.org
 help / color / mirror / Atom feed
From: Alexandre Belloni <alexandre.belloni@free-electrons.com>
To: Tom Zanussi <tom.zanussi@linux.intel.com>
Cc: openembedded-core@lists.openembedded.org
Subject: Re: [PATCH] wic: allow creation of partitions not in table
Date: Thu, 5 Feb 2015 18:39:24 +0100	[thread overview]
Message-ID: <20150205173924.GF4443@piout.net> (raw)
In-Reply-To: <1423090996-14918-1-git-send-email-alexandre.belloni@free-electrons.com>

Hi,

I found one remaining bug in that patch, I'll send v2 soon.

On 05/02/2015 at 00:03:16 +0100, Alexandre Belloni wrote :
> For some architectures it is necessary to reserve space on disk without
> it being present in the partition table.
> 
> For example, u-boot on i.mx is placed at an offset of 1kB on the sdcard.
> While it would be possible to create a partition at that offset and
> place u-boot there, it would then be necessary to update the default
> u-boot environment to use partition 2 on the mmc instead of partition 1.
> 
> Signed-off-by: Alexandre Belloni <alexandre.belloni@free-electrons.com>
> ---
>  scripts/lib/image/help.py                            |  6 ++++++
>  scripts/lib/wic/imager/direct.py                     |  1 +
>  .../lib/wic/kickstart/custom_commands/partition.py   |  6 ++++++
>  scripts/lib/wic/utils/partitionedfs.py               | 20 +++++++++++++++-----
>  4 files changed, 28 insertions(+), 5 deletions(-)
> 
> diff --git a/scripts/lib/image/help.py b/scripts/lib/image/help.py
> index 0d8a6adfaa71..aab0b609afd5 100644
> --- a/scripts/lib/image/help.py
> +++ b/scripts/lib/image/help.py
> @@ -737,6 +737,12 @@ DESCRIPTION
>                                to start a partition on an x KBytes
>                                boundary.
>  
> +         --no-table: This option is specific to wic. Space will be
> +                     reserved for the partition and it will be
> +                     populated but it will not be added to the
> +                     partition table. It may be useful for
> +                     bootloaders.
> +
>      * bootloader
>  
>        This command allows the user to specify various bootloader
> diff --git a/scripts/lib/wic/imager/direct.py b/scripts/lib/wic/imager/direct.py
> index b1dc3e96f456..c39405feb74a 100644
> --- a/scripts/lib/wic/imager/direct.py
> +++ b/scripts/lib/wic/imager/direct.py
> @@ -262,6 +262,7 @@ class DirectImageCreator(BaseImageCreator):
>                                         fsopts = p.fsopts,
>                                         boot = p.active,
>                                         align = p.align,
> +                                       no_table = p.no_table,
>                                         part_type = p.part_type)
>  
>          self.__image.layout_partitions(self._ptable_format)
> diff --git a/scripts/lib/wic/kickstart/custom_commands/partition.py b/scripts/lib/wic/kickstart/custom_commands/partition.py
> index 7a307065f289..9be6b0457b48 100644
> --- a/scripts/lib/wic/kickstart/custom_commands/partition.py
> +++ b/scripts/lib/wic/kickstart/custom_commands/partition.py
> @@ -49,6 +49,7 @@ class Wic_PartData(Mic_PartData):
>          self.source = kwargs.get("source", None)
>          self.sourceparams = kwargs.get("sourceparams", None)
>          self.rootfs = kwargs.get("rootfs-dir", None)
> +        self.no_table = kwargs.get("no-table", False)
>          self.source_file = ""
>          self.size = 0
>  
> @@ -61,6 +62,8 @@ class Wic_PartData(Mic_PartData):
>                  retval += " --sourceparams=%s" % self.sourceparams
>              if self.rootfs:
>                  retval += " --rootfs-dir=%s" % self.rootfs
> +        if self.no_table:
> +            retval += " --no-table"
>  
>          return retval
>  
> @@ -521,4 +524,7 @@ class Wic_Partition(Mic_Partition):
>          # use specified rootfs path to fill the partition
>          op.add_option("--rootfs-dir", type="string", action="store",
>                        dest="rootfs", default=None)
> +        # wether to add the partition in the partition table
> +        op.add_option("--no-table", dest="no_table", action="store_true",
> +                      default=False)
>          return op
> diff --git a/scripts/lib/wic/utils/partitionedfs.py b/scripts/lib/wic/utils/partitionedfs.py
> index f109e2c227c5..745558b090cb 100644
> --- a/scripts/lib/wic/utils/partitionedfs.py
> +++ b/scripts/lib/wic/utils/partitionedfs.py
> @@ -61,6 +61,7 @@ class Image:
>          self.disks[disk_name] = \
>                  { 'disk': None,     # Disk object
>                    'numpart': 0,     # Number of allocate partitions
> +                  'realpart': 0,    # Number of partitions in the partition table
>                    'partitions': [], # Indexes to self.partitions
>                    'offset': 0,      # Offset of next partition (in sectors)
>                    # Minimum required disk size to fit all partitions (in bytes)
> @@ -85,7 +86,7 @@ class Image:
>          self.__add_disk(part['disk_name'])
>  
>      def add_partition(self, size, disk_name, mountpoint, source_file = None, fstype = None,
> -                      label=None, fsopts = None, boot = False, align = None,
> +                      label=None, fsopts = None, boot = False, align = None, no_table=False,
>                        part_type = None):
>          """ Add the next partition. Prtitions have to be added in the
>          first-to-last order. """
> @@ -109,6 +110,7 @@ class Image:
>                       'num': None, # Partition number
>                       'boot': boot, # Bootable flag
>                       'align': align, # Partition alignment
> +                     'no_table' : no_table, # Partition does not appear in partition table
>                       'part_type' : part_type } # Partition type
>  
>              self.__add_partition(part)
> @@ -147,6 +149,8 @@ class Image:
>              # Get the disk where the partition is located
>              d = self.disks[p['disk_name']]
>              d['numpart'] += 1
> +            if not p['no_table']:
> +                d['realpart'] += 1
>              d['ptable_format'] = ptable_format
>  
>              if d['numpart'] == 1:
> @@ -182,10 +186,13 @@ class Image:
>              d['offset'] += p['size']
>  
>              p['type'] = 'primary'
> -            p['num'] = d['numpart']
> +            if not p['no_table']:
> +                p['num'] = d['realpart']
> +            else:
> +                p['num'] = 0
>  
>              if d['ptable_format'] == "msdos":
> -                if d['numpart'] > 2:
> +                if d['realpart'] > 2:
>                      # Every logical partition requires an additional sector for
>                      # the EBR, so steal the last sector from the end of each
>                      # partition starting from the 3rd one for the EBR. This
> @@ -193,9 +200,9 @@ class Image:
>                      # correctly.
>                      p['size'] -= 1
>  
> -                if d['numpart'] > 3:
> +                if d['realpart'] > 3:
>                      p['type'] = 'logical'
> -                    p['num'] = d['numpart'] + 1
> +                    p['num'] = d['realpart'] + 1
>  
>              d['partitions'].append(n)
>              msger.debug("Assigned %s to %s%d, sectors range %d-%d size %d "
> @@ -257,6 +264,9 @@ class Image:
>          msger.debug("Creating partitions")
>  
>          for p in self.partitions:
> +            if p['num'] == 0:
> +                continue
> +
>              d = self.disks[p['disk_name']]
>              if d['ptable_format'] == "msdos" and p['num'] == 5:
>                  # The last sector of the 3rd partition was reserved for the EBR
> -- 
> 2.1.0
> 

-- 
Alexandre Belloni, Free Electrons
Embedded Linux, Kernel and Android engineering
http://free-electrons.com


      parent reply	other threads:[~2015-02-05 17:39 UTC|newest]

Thread overview: 5+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-02-04 23:03 [PATCH] wic: allow creation of partitions not in table Alexandre Belloni
2015-02-05  9:02 ` Maciej Borzecki
2015-02-05 10:27   ` Alexandre Belloni
2015-02-05 11:18     ` Maciej Borzecki
2015-02-05 17:39 ` Alexandre Belloni [this message]

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20150205173924.GF4443@piout.net \
    --to=alexandre.belloni@free-electrons.com \
    --cc=openembedded-core@lists.openembedded.org \
    --cc=tom.zanussi@linux.intel.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.