[v2] wic: support passing extraargs for EFI partition creation

Message ID 20251218082208.1031200-1-Richa.Bharti@siemens.com
State Under Review
Headers show
Series [v2] wic: support passing extraargs for EFI partition creation | expand

Commit Message

Bharti, Richa Dec. 18, 2025, 8:22 a.m. UTC
Some EFI firmwares require FAT filesystems to use specific geometry or
sector parameters.

Add support for an `extraargs` source parameter to allow passing
additional mkdosfs options when creating the EFI System Partition (ESP).
If no extra arguments are provided, mkdosfs defaults to "-S 512",
preserving existing behaviour.

Signed-off-by: Richa Bharti <Richa.Bharti@siemens.com>
---
 meta/scripts/lib/wic/plugins/source/bootimg-efi-isar.py | 6 ++++--
 1 file changed, 4 insertions(+), 2 deletions(-)

Comments

RICHA BHARTI Dec. 18, 2025, 8:29 a.m. UTC | #1
*Without Extraargs:*
```
$ cat wic/generic-ufs-partitions.wks.in
part /boot --source bootimg-efi-isar --sourceparams "loader=systemd-boot" 
--label efi --part-type EF00 --align 1024 --use-uuid --size 512M
part --use-uuid --source rootfs --fstype=${BSP_ROOTFS_TYPE} --label system 
--active --align 1024 --exclude-path boot --fixed-size 
${UFS_PART_SYSTEM_SIZE}
bootloader --ptable gpt --timeout 0 --append "${BSP_KERNEL_CMDLINE}

$ file development-image-industrial-os-qcs615-adp-air.wic.p1
development-image-industrial-os-qcs615-adp-air.wic.p1: DOS/MBR boot sector, 
code offset 0x58+2, OEM-ID "mkfs.fat", sectors/cluster 8, Media descriptor 
0xf8, sectors/track 63, heads 32, sectors 1048572 (volumes > 32 MB), FAT 
(32 bit), sectors/FAT 1024, serial number 0xe9d3c0d4, label: "efi        "
```

*LOG:*
```
DEBUG: ['mkdosfs', '-n', 'efi', '-i', '0x1C1D0579', '-S', '512', '-C', 
'/tmp/development-image-industrial-os-qcs615-adp-air.wic/tmp.wic.vlfgf_0b/boot.img', 
'524288']
DEBUG: exec_native_cmd: export 
PATH=//sbin://usr/sbin://usr/bin://usr/bin/None://bin:None:$PATH;mkdosfs -n 
efi -i 0x1C1D0579 -S 512 -C 
/tmp/development-image-industrial-os-qcs615-adp-air.wic/tmp.wic.vlfgf_0b/boot.img 
524288
DEBUG: _exec_cmd: export 
PATH=//sbin://usr/sbin://usr/bin://usr/bin/None://bin:None:$PATH;mkdosfs -n 
efi -i 0x1C1D0579 -S 512 -C 
/tmp/development-image-industrial-os-qcs615-adp-air.wic/tmp.wic.vlfgf_0b/boot.img 
524288
DEBUG: ['export', 
'PATH=//sbin://usr/sbin://usr/bin://usr/bin/None://bin:None:$PATH;mkdosfs', 
'-n', 'efi', '-i', '0x1C1D0579', '-S', '512', '-C', 
'/tmp/development-image-industrial-os-qcs615-adp-air.wic/tmp.wic.vlfgf_0b/boot.img', 
'524288']
```

*With Extraargs:*

```
$ wic/generic-ufs-partitions.wks.in
part /boot --source bootimg-efi-isar --sourceparams "loader=systemd-boot,*extraargs=-F 
32 -S 4096 -r 2048*" --label efi --part-type EF00 --align 1024 --use-uuid 
--size 512M
part --use-uuid --source rootfs --fstype=${BSP_ROOTFS_TYPE} --label system 
--active --align 1024 --exclude-path boot --fixed-size 
${UFS_PART_SYSTEM_SIZE}
bootloader --ptable gpt --timeout 0 --append "${BSP_KERNEL_CMDLINE}"

$ file development-image-industrial-os-qcs615-adp-air.wic.p1
development-image-industrial-os-qcs615-adp-air.wic.p1: DOS/MBR boot sector, 
code offset 0x58+2, OEM-ID "mkfs.fat", Bytes/sector 4096, Media descriptor 
0xf8, sectors/track 32, heads 8, sectors 131072 (volumes > 32 MB), FAT (32 
bit), sectors/FAT 128, serial number 0xbf8798d0, label: "efi      "
```

*LOG: *
```
DEBUG: Added 469589 extra blocks to /boot to get to 524288 total blocks
DEBUG: ['mkdosfs', '-n', 'efi', '-i', '0xBF8798D0', '-F', '32', '-S', 
'4096', '-r', '2048', '-C', 
'/tmp/development-image-industrial-os-qcs615-adp-air.wic/tmp.wic.qd9it81v/boot.img', 
'524288']
DEBUG: exec_native_cmd: export 
PATH=//sbin://usr/sbin://usr/bin://usr/bin/None://bin:None:$PATH;mkdosfs -n 
efi -i 0xBF8798D0 -F 32 -S 4096 -r 2048 -C 
/tmp/development-image-industrial-os-qcs615-adp-air.wic/tmp.wic.qd9it81v/boot.img 
524288
DEBUG: _exec_cmd: export 
PATH=//sbin://usr/sbin://usr/bin://usr/bin/None://bin:None:$PATH;mkdosfs -n 
efi -i 0xBF8798D0 -F 32 -S 4096 -r 2048 -C 
/tmp/development-image-industrial-os-qcs615-adp-air.wic/tmp.wic.qd9it81v/boot.img 
524288
DEBUG: ['export', 
'PATH=//sbin://usr/sbin://usr/bin://usr/bin/None://bin:None:$PATH;mkdosfs', 
'-n', 'efi', '-i', '0xBF8798D0', '-F', '32', '-S', '4096', '-r', '2048', 
'-C', 
'/tmp/development-image-industrial-os-qcs615-adp-air.wic/tmp.wic.qd9it81v/boot.img', 
'524288']
```

On Thursday, December 18, 2025 at 1:52:32 PM UTC+5:30 Richa Bharti wrote:

> Some EFI firmwares require FAT filesystems to use specific geometry or
> sector parameters.
>
> Add support for an `extraargs` source parameter to allow passing
> additional mkdosfs options when creating the EFI System Partition (ESP).
> If no extra arguments are provided, mkdosfs defaults to "-S 512",
> preserving existing behaviour.
>
> Signed-off-by: Richa Bharti <Richa....@siemens.com>
> ---
> meta/scripts/lib/wic/plugins/source/bootimg-efi-isar.py | 6 ++++--
> 1 file changed, 4 insertions(+), 2 deletions(-)
>
> diff --git a/meta/scripts/lib/wic/plugins/source/bootimg-efi-isar.py 
> b/meta/scripts/lib/wic/plugins/source/bootimg-efi-isar.py
> index 446398d0..6862a288 100644
> --- a/meta/scripts/lib/wic/plugins/source/bootimg-efi-isar.py
> +++ b/meta/scripts/lib/wic/plugins/source/bootimg-efi-isar.py
> @@ -506,8 +506,10 @@ class BootimgEFIPlugin(SourcePlugin):
>
> label = part.label if part.label else "ESP"
>
> - dosfs_cmd = "mkdosfs -n %s -i %s -C %s %d" % \
> - (label, part.fsuuid, bootimg, blocks)
> + extraargs = source_params.get('extraargs', "-S 512")
> +
> + dosfs_cmd = "mkdosfs -n %s -i %s %s -C %s %d" % \
> + (label, part.fsuuid, extraargs, bootimg, blocks)
> exec_native_cmd(dosfs_cmd, native_sysroot)
>
> mcopy_cmd = "mcopy -i %s -s %s/* ::/" % (bootimg, hdddir)
> -- 
> 2.39.5
>
>
Bharti, Richa Dec. 18, 2025, 8:39 a.m. UTC | #2
Without Extraargs:
```
$ cat wic/generic-ufs-partitions.wks.in
part /boot --source bootimg-efi-isar --sourceparams "loader=systemd-boot" --label efi --part-type EF00 --align 1024 --use-uuid --size 512M
part --use-uuid --source rootfs --fstype=${BSP_ROOTFS_TYPE} --label system --active --align 1024 --exclude-path boot --fixed-size ${UFS_PART_SYSTEM_SIZE}
bootloader --ptable gpt --timeout 0 --append "${BSP_KERNEL_CMDLINE}

$ file development-image-industrial-os-qcs615-adp-air.wic.p1
development-image-industrial-os-qcs615-adp-air.wic.p1: DOS/MBR boot sector, code offset 0x58+2, OEM-ID "mkfs.fat", sectors/cluster 8, Media descriptor 0xf8, sectors/track 63, heads 32, sectors 1048572 (volumes > 32 MB), FAT (32 bit), sectors/FAT 1024, serial number 0xe9d3c0d4, label: "efi        "
```
LOG:
```
DEBUG: ['mkdosfs', '-n', 'efi', '-i', '0x1C1D0579', '-S', '512', '-C', '/tmp/development-image-industrial-os-qcs615-adp-air.wic/tmp.wic.vlfgf_0b/boot.img', '524288']
DEBUG: exec_native_cmd: export PATH=//sbin://usr/sbin://usr/bin://usr/bin/None://bin:None:$PATH;mkdosfs -n efi -i 0x1C1D0579 -S 512 -C /tmp/development-image-industrial-os-qcs615-adp-air.wic/tmp.wic.vlfgf_0b/boot.img 524288
DEBUG: _exec_cmd: export PATH=//sbin://usr/sbin://usr/bin://usr/bin/None://bin:None:$PATH;mkdosfs -n efi -i 0x1C1D0579 -S 512 -C /tmp/development-image-industrial-os-qcs615-adp-air.wic/tmp.wic.vlfgf_0b/boot.img 524288
DEBUG: ['export', 'PATH=//sbin://usr/sbin://usr/bin://usr/bin/None://bin:None:$PATH;mkdosfs', '-n', 'efi', '-i', '0x1C1D0579', '-S', '512', '-C', '/tmp/development-image-industrial-os-qcs615-adp-air.wic/tmp.wic.vlfgf_0b/boot.img', '524288']
```

With Extraargs:

```
$ wic/generic-ufs-partitions.wks.in
part /boot --source bootimg-efi-isar --sourceparams "loader=systemd-boot,extraargs=-F 32 -S 4096 -r 2048" --label efi --part-type EF00 --align 1024 --use-uuid --size 512M
part --use-uuid --source rootfs --fstype=${BSP_ROOTFS_TYPE} --label system --active --align 1024 --exclude-path boot --fixed-size ${UFS_PART_SYSTEM_SIZE}
bootloader --ptable gpt --timeout 0 --append "${BSP_KERNEL_CMDLINE}"

$ file development-image-industrial-os-qcs615-adp-air.wic.p1
development-image-industrial-os-qcs615-adp-air.wic.p1: DOS/MBR boot sector, code offset 0x58+2, OEM-ID "mkfs.fat", Bytes/sector 4096, Media descriptor 0xf8, sectors/track 32, heads 8, sectors 131072 (volumes > 32 MB), FAT (32 bit), sectors/FAT 128, serial number 0xbf8798d0, label: "efi      "
```
LOG: 
```
DEBUG: Added 469589 extra blocks to /boot to get to 524288 total blocks
DEBUG: ['mkdosfs', '-n', 'efi', '-i', '0xBF8798D0', '-F', '32', '-S', '4096', '-r', '2048', '-C', '/tmp/development-image-industrial-os-qcs615-adp-air.wic/tmp.wic.qd9it81v/boot.img', '524288']
DEBUG: exec_native_cmd: export PATH=//sbin://usr/sbin://usr/bin://usr/bin/None://bin:None:$PATH;mkdosfs -n efi -i 0xBF8798D0 -F 32 -S 4096 -r 2048 -C /tmp/development-image-industrial-os-qcs615-adp-air.wic/tmp.wic.qd9it81v/boot.img 524288
DEBUG: _exec_cmd: export PATH=//sbin://usr/sbin://usr/bin://usr/bin/None://bin:None:$PATH;mkdosfs -n efi -i 0xBF8798D0 -F 32 -S 4096 -r 2048 -C /tmp/development-image-industrial-os-qcs615-adp-air.wic/tmp.wic.qd9it81v/boot.img 524288
DEBUG: ['export', 'PATH=//sbin://usr/sbin://usr/bin://usr/bin/None://bin:None:$PATH;mkdosfs', '-n', 'efi', '-i', '0xBF8798D0', '-F', '32', '-S', '4096', '-r', '2048', '-C', '/tmp/development-image-industrial-os-qcs615-adp-air.wic/tmp.wic.qd9it81v/boot.img', '524288']
```

-----Original Message-----
From: Bharti, Richa (FT FDS CES LX PBU RSOL) <richa.bharti@siemens.com> 
Sent: 18 December 2025 13:52
To: isar-users@googlegroups.com; amikan@ilbers.de
Cc: Hombourger, Cedric (FT FDS CES LX) <cedric.hombourger@siemens.com>; Krishnakar, Srikanth (FT FDS CES LX PBU RSOL) <srikanth.krishnakar@siemens.com>; Bharti, Richa (FT FDS CES LX PBU RSOL) <richa.bharti@siemens.com>
Subject: [PATCH v2] wic: support passing extraargs for EFI partition creation

Some EFI firmwares require FAT filesystems to use specific geometry or sector parameters.

Add support for an `extraargs` source parameter to allow passing additional mkdosfs options when creating the EFI System Partition (ESP).
If no extra arguments are provided, mkdosfs defaults to "-S 512", preserving existing behaviour.

Signed-off-by: Richa Bharti <Richa.Bharti@siemens.com>
---
 meta/scripts/lib/wic/plugins/source/bootimg-efi-isar.py | 6 ++++--
 1 file changed, 4 insertions(+), 2 deletions(-)

diff --git a/meta/scripts/lib/wic/plugins/source/bootimg-efi-isar.py b/meta/scripts/lib/wic/plugins/source/bootimg-efi-isar.py
index 446398d0..6862a288 100644
--- a/meta/scripts/lib/wic/plugins/source/bootimg-efi-isar.py
+++ b/meta/scripts/lib/wic/plugins/source/bootimg-efi-isar.py
@@ -506,8 +506,10 @@ class BootimgEFIPlugin(SourcePlugin):
 
         label = part.label if part.label else "ESP"
 
-        dosfs_cmd = "mkdosfs -n %s -i %s -C %s %d" % \
-                    (label, part.fsuuid, bootimg, blocks)
+        extraargs = source_params.get('extraargs', "-S 512")
+
+        dosfs_cmd = "mkdosfs -n %s -i %s %s -C %s %d" % \
+                    (label, part.fsuuid, extraargs, bootimg, blocks)
         exec_native_cmd(dosfs_cmd, native_sysroot)
 
         mcopy_cmd = "mcopy -i %s -s %s/* ::/" % (bootimg, hdddir)
--
2.39.5

Patch

diff --git a/meta/scripts/lib/wic/plugins/source/bootimg-efi-isar.py b/meta/scripts/lib/wic/plugins/source/bootimg-efi-isar.py
index 446398d0..6862a288 100644
--- a/meta/scripts/lib/wic/plugins/source/bootimg-efi-isar.py
+++ b/meta/scripts/lib/wic/plugins/source/bootimg-efi-isar.py
@@ -506,8 +506,10 @@  class BootimgEFIPlugin(SourcePlugin):
 
         label = part.label if part.label else "ESP"
 
-        dosfs_cmd = "mkdosfs -n %s -i %s -C %s %d" % \
-                    (label, part.fsuuid, bootimg, blocks)
+        extraargs = source_params.get('extraargs', "-S 512")
+
+        dosfs_cmd = "mkdosfs -n %s -i %s %s -C %s %d" % \
+                    (label, part.fsuuid, extraargs, bootimg, blocks)
         exec_native_cmd(dosfs_cmd, native_sysroot)
 
         mcopy_cmd = "mcopy -i %s -s %s/* ::/" % (bootimg, hdddir)