* [OE-Core][PATCH 0/1] wic: extend empty plugin with options to write zeros to partiton
@ 2023-11-14 8:13 lukas.funke-oss
2023-11-14 8:13 ` [OE-Core][PATCH 1/1] " lukas.funke-oss
0 siblings, 1 reply; 3+ messages in thread
From: lukas.funke-oss @ 2023-11-14 8:13 UTC (permalink / raw)
To: openembedded-core; +Cc: Lukas Funke
From: Lukas Funke <lukas.funke@weidmueller.com>
Adds features to explicitly write zeros to the start of the
partition. This is useful to overwrite old content like
filesystem signatures which may be re-recognized otherwise.
The new features can be enabled with
'--soucreparams="[fill|size=<N>[S|s|K|k|M|G]][,][bs=<N>[S|s|K|k|M|G]]"'
Conflicting or missing options throw errors.
The features are:
- fill
Fill the entire partition with zeros. Requires '--fixed-size' option
to be set.
- size=<N>[S|s|K|k|M|G]
Set the first N bytes of the partition to zero. Default unit is 'K'.
- bs=<N>[S|s|K|k|M|G]
Write at most N bytes at a time during source file creation.
Defaults to '1M'. Default unit is 'K'.
Malte Schmidt (1):
wic: extend empty plugin with options to write zeros to partiton
scripts/lib/wic/plugins/source/empty.py | 57 ++++++++++++++++++++++++-
1 file changed, 56 insertions(+), 1 deletion(-)
--
2.30.2
^ permalink raw reply [flat|nested] 3+ messages in thread
* [OE-Core][PATCH 1/1] wic: extend empty plugin with options to write zeros to partiton
2023-11-14 8:13 [OE-Core][PATCH 0/1] wic: extend empty plugin with options to write zeros to partiton lukas.funke-oss
@ 2023-11-14 8:13 ` lukas.funke-oss
2023-11-14 11:03 ` Alexandre Belloni
0 siblings, 1 reply; 3+ messages in thread
From: lukas.funke-oss @ 2023-11-14 8:13 UTC (permalink / raw)
To: openembedded-core; +Cc: Malte Schmidt
From: Malte Schmidt <malte.schmidt@weidmueller.com>
Adds features to explicitly write zeros to the start of the
partition. This is useful to overwrite old content like
filesystem signatures which may be re-recognized otherwise.
The new features can be enabled with
'--soucreparams="[fill|size=<N>[S|s|K|k|M|G]][,][bs=<N>[S|s|K|k|M|G]]"'
Conflicting or missing options throw errors.
The features are:
- fill
Fill the entire partition with zeros. Requires '--fixed-size' option
to be set.
- size=<N>[S|s|K|k|M|G]
Set the first N bytes of the partition to zero. Default unit is 'K'.
- bs=<N>[S|s|K|k|M|G]
Write at most N bytes at a time during source file creation.
Defaults to '1M'. Default unit is 'K'.
Signed-off-by: Malte Schmidt <malte.schmidt@weidmueller.com>
---
scripts/lib/wic/plugins/source/empty.py | 57 ++++++++++++++++++++++++-
1 file changed, 56 insertions(+), 1 deletion(-)
diff --git a/scripts/lib/wic/plugins/source/empty.py b/scripts/lib/wic/plugins/source/empty.py
index 041617d648..f7581a0298 100644
--- a/scripts/lib/wic/plugins/source/empty.py
+++ b/scripts/lib/wic/plugins/source/empty.py
@@ -7,9 +7,19 @@
# To use it you must pass "empty" as argument for the "--source" parameter in
# the wks file. For example:
# part foo --source empty --ondisk sda --size="1024" --align 1024
+#
+# The plugin supports writing zeros to the start of the
+# partition. This is useful to overwrite old content like
+# filesystem signatures which may be re-recognized otherwise.
+# This feature can be enabled with
+# '--soucreparams="[fill|size=<N>[S|s|K|k|M|G]][,][bs=<N>[S|s|K|k|M|G]]"'
+# Conflicting or missing options throw errors.
import logging
+import os
+from wic import WicError
+from wic.ksparser import sizetype
from wic.pluginbase import SourcePlugin
logger = logging.getLogger('wic')
@@ -17,6 +27,16 @@ logger = logging.getLogger('wic')
class EmptyPartitionPlugin(SourcePlugin):
"""
Populate unformatted empty partition.
+
+ The following sourceparams are supported:
+ - fill
+ Fill the entire partition with zeros. Requires '--fixed-size' option
+ to be set.
+ - size=<N>[S|s|K|k|M|G]
+ Set the first N bytes of the partition to zero. Default unit is 'K'.
+ - bs=<N>[S|s|K|k|M|G]
+ Write at most N bytes at a time during source file creation.
+ Defaults to '1M'. Default unit is 'K'.
"""
name = 'empty'
@@ -29,4 +49,39 @@ class EmptyPartitionPlugin(SourcePlugin):
Called to do the actual content population for a partition i.e. it
'prepares' the partition to be incorporated into the image.
"""
- return
+ get_byte_count = sizetype('K', True)
+ size = 0
+
+ if 'fill' in source_params and 'size' in source_params:
+ raise WicError("Conflicting source parameters 'fill' and 'size' specified, exiting.")
+
+ # Set the size of the zeros to be written to the partition
+ if 'fill' in source_params:
+ if part.fixed_size == 0:
+ raise WicError("Source parameter 'fill' only works with the '--fixed-size' option, exiting.")
+ size = part.fixed_size
+ elif 'size' in source_params:
+ size = get_byte_count(source_params['size'])
+
+ if size == 0:
+ # Nothing to do, create empty partition
+ return
+
+ if 'bs' in source_params:
+ bs = get_byte_count(source_params['bs'])
+ else:
+ bs = get_byte_count('1M')
+
+ # Create a binary file of the requested size filled with zeros
+ source_file = os.path.join(cr_workdir, 'empty-plugin-zeros%s.bin' % part.lineno)
+ if not os.path.exists(os.path.dirname(source_file)):
+ os.makedirs(os.path.dirname(source_file))
+
+ quotient, remainder = divmod(size, bs)
+ with open(source_file, 'wb') as file:
+ for _ in range(quotient):
+ file.write(bytearray(bs))
+ file.write(bytearray(remainder))
+
+ part.size = (size + 1024 - 1) // 1024 # size in KB rounded up
+ part.source_file = source_file
--
2.30.2
^ permalink raw reply related [flat|nested] 3+ messages in thread
* Re: [OE-Core][PATCH 1/1] wic: extend empty plugin with options to write zeros to partiton
2023-11-14 8:13 ` [OE-Core][PATCH 1/1] " lukas.funke-oss
@ 2023-11-14 11:03 ` Alexandre Belloni
0 siblings, 0 replies; 3+ messages in thread
From: Alexandre Belloni @ 2023-11-14 11:03 UTC (permalink / raw)
To: Lukas Funke; +Cc: openembedded-core, Malte Schmidt
Hello Lukas,
On 14/11/2023 09:13:32+0100, Lukas Funke wrote:
> From: Malte Schmidt <malte.schmidt@weidmueller.com>
>
> Adds features to explicitly write zeros to the start of the
> partition. This is useful to overwrite old content like
> filesystem signatures which may be re-recognized otherwise.
>
> The new features can be enabled with
> '--soucreparams="[fill|size=<N>[S|s|K|k|M|G]][,][bs=<N>[S|s|K|k|M|G]]"'
> Conflicting or missing options throw errors.
>
> The features are:
> - fill
> Fill the entire partition with zeros. Requires '--fixed-size' option
> to be set.
> - size=<N>[S|s|K|k|M|G]
> Set the first N bytes of the partition to zero. Default unit is 'K'.
> - bs=<N>[S|s|K|k|M|G]
> Write at most N bytes at a time during source file creation.
> Defaults to '1M'. Default unit is 'K'.
>
> Signed-off-by: Malte Schmidt <malte.schmidt@weidmueller.com>
We need your SoB here
> ---
> scripts/lib/wic/plugins/source/empty.py | 57 ++++++++++++++++++++++++-
> 1 file changed, 56 insertions(+), 1 deletion(-)
>
> diff --git a/scripts/lib/wic/plugins/source/empty.py b/scripts/lib/wic/plugins/source/empty.py
> index 041617d648..f7581a0298 100644
> --- a/scripts/lib/wic/plugins/source/empty.py
> +++ b/scripts/lib/wic/plugins/source/empty.py
> @@ -7,9 +7,19 @@
> # To use it you must pass "empty" as argument for the "--source" parameter in
> # the wks file. For example:
> # part foo --source empty --ondisk sda --size="1024" --align 1024
> +#
> +# The plugin supports writing zeros to the start of the
> +# partition. This is useful to overwrite old content like
> +# filesystem signatures which may be re-recognized otherwise.
> +# This feature can be enabled with
> +# '--soucreparams="[fill|size=<N>[S|s|K|k|M|G]][,][bs=<N>[S|s|K|k|M|G]]"'
> +# Conflicting or missing options throw errors.
>
> import logging
> +import os
>
> +from wic import WicError
> +from wic.ksparser import sizetype
> from wic.pluginbase import SourcePlugin
>
> logger = logging.getLogger('wic')
> @@ -17,6 +27,16 @@ logger = logging.getLogger('wic')
> class EmptyPartitionPlugin(SourcePlugin):
> """
> Populate unformatted empty partition.
> +
> + The following sourceparams are supported:
> + - fill
> + Fill the entire partition with zeros. Requires '--fixed-size' option
> + to be set.
> + - size=<N>[S|s|K|k|M|G]
> + Set the first N bytes of the partition to zero. Default unit is 'K'.
> + - bs=<N>[S|s|K|k|M|G]
> + Write at most N bytes at a time during source file creation.
> + Defaults to '1M'. Default unit is 'K'.
> """
>
> name = 'empty'
> @@ -29,4 +49,39 @@ class EmptyPartitionPlugin(SourcePlugin):
> Called to do the actual content population for a partition i.e. it
> 'prepares' the partition to be incorporated into the image.
> """
> - return
> + get_byte_count = sizetype('K', True)
> + size = 0
> +
> + if 'fill' in source_params and 'size' in source_params:
> + raise WicError("Conflicting source parameters 'fill' and 'size' specified, exiting.")
> +
> + # Set the size of the zeros to be written to the partition
> + if 'fill' in source_params:
> + if part.fixed_size == 0:
> + raise WicError("Source parameter 'fill' only works with the '--fixed-size' option, exiting.")
> + size = part.fixed_size
> + elif 'size' in source_params:
> + size = get_byte_count(source_params['size'])
> +
> + if size == 0:
> + # Nothing to do, create empty partition
> + return
> +
> + if 'bs' in source_params:
> + bs = get_byte_count(source_params['bs'])
> + else:
> + bs = get_byte_count('1M')
> +
> + # Create a binary file of the requested size filled with zeros
> + source_file = os.path.join(cr_workdir, 'empty-plugin-zeros%s.bin' % part.lineno)
> + if not os.path.exists(os.path.dirname(source_file)):
> + os.makedirs(os.path.dirname(source_file))
> +
> + quotient, remainder = divmod(size, bs)
> + with open(source_file, 'wb') as file:
> + for _ in range(quotient):
> + file.write(bytearray(bs))
> + file.write(bytearray(remainder))
> +
> + part.size = (size + 1024 - 1) // 1024 # size in KB rounded up
> + part.source_file = source_file
> --
> 2.30.2
>
>
> -=-=-=-=-=-=-=-=-=-=-=-
> Links: You receive all messages sent to this group.
> View/Reply Online (#190489): https://lists.openembedded.org/g/openembedded-core/message/190489
> Mute This Topic: https://lists.openembedded.org/mt/102579765/3617179
> Group Owner: openembedded-core+owner@lists.openembedded.org
> Unsubscribe: https://lists.openembedded.org/g/openembedded-core/unsub [alexandre.belloni@bootlin.com]
> -=-=-=-=-=-=-=-=-=-=-=-
>
--
Alexandre Belloni, co-owner and COO, Bootlin
Embedded Linux and Kernel engineering
https://bootlin.com
^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2023-11-14 11:04 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2023-11-14 8:13 [OE-Core][PATCH 0/1] wic: extend empty plugin with options to write zeros to partiton lukas.funke-oss
2023-11-14 8:13 ` [OE-Core][PATCH 1/1] " lukas.funke-oss
2023-11-14 11:03 ` Alexandre Belloni
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.