diff mbox series

bootimg-efi: Use the custom .dtb file's path as its final location

Message ID 20230301124551.159892-1-tomasagustin.gonzalezorlando@arm.com
State New
Headers show
Series bootimg-efi: Use the custom .dtb file's path as its final location | expand

Commit Message

Tomás González March 1, 2023, 12:45 p.m. UTC
From: tomasagustin.gonzalezorlando@arm.com

When specifying a custom .dtb with the --sourceparams="dtb=<path>" parameter,
the custom file is looked for in ${DEPLOY_DIR_IMAGE}/<path>, and the resulting
grub config file is set to look for the .dtb under /<path> inside the boot
partition. However, the file is not currently being copied there.

Change the behaviour of the --sourceparams="dtb=<path>" parameter so that
the custom .dtb file is copied under /<path> in the boot partition.

Include oe-selftest to validate the functionality.

Signed-off-by: Tomás González <tomasagustin.gonzalezorlando@arm.com>
---
 .../recipes-test/dtb/devicetree-sample.bb     |  8 +++
 .../dtb/files/sample-devicetree.dts           | 69 +++++++++++++++++++
 meta-selftest/wic/test_dtb_efi.wks            |  3 +
 meta/lib/oeqa/selftest/cases/wic.py           | 16 +++++
 scripts/lib/wic/plugins/source/bootimg-efi.py |  2 +-
 5 files changed, 97 insertions(+), 1 deletion(-)
 create mode 100644 meta-selftest/recipes-test/dtb/devicetree-sample.bb
 create mode 100644 meta-selftest/recipes-test/dtb/files/sample-devicetree.dts
 create mode 100644 meta-selftest/wic/test_dtb_efi.wks

Comments

Alexandre Belloni March 2, 2023, 11:28 a.m. UTC | #1
Hello,

This caused failures on the autobuilders:

https://autobuilder.yoctoproject.org/typhoon/#/builders/86/builds/4867/steps/14/logs/stdio
https://autobuilder.yoctoproject.org/typhoon/#/builders/80/builds/4820/steps/14/logs/stdio
https://autobuilder.yoctoproject.org/typhoon/#/builders/127/builds/1038/steps/14/logs/stdio

2023-03-01 23:29:40,420 - oe-selftest - INFO - wic.ModifyTests.test_dtb_efi (subunit.RemotedTestCase)
2023-03-01 23:29:40,421 - oe-selftest - INFO -  ... FAIL
Stderr:
2023-03-01 21:39:12,759 - oe-selftest - INFO - Adding: "include selftest.inc" in /home/pokybuild/yocto-worker/oe-selftest-armhost/build/build-st-2963231/conf/local.conf
2023-03-01 21:39:12,760 - oe-selftest - INFO - Adding: "include bblayers.inc" in bblayers.conf
2023-03-01 23:29:40,421 - oe-selftest - INFO - 5: 28/34 407/524 (162.61s) (0 failed) (wic.ModifyTests.test_dtb_efi)
2023-03-01 23:29:40,422 - oe-selftest - INFO - testtools.testresult.real._StringException: Traceback (most recent call last):
  File "/home/pokybuild/yocto-worker/oe-selftest-armhost/build/meta/lib/oeqa/selftest/cases/wic.py", line 1532, in test_dtb_efi
    result = runCmd("wic ls %s:1/devicetree" % (image_path))
  File "/home/pokybuild/yocto-worker/oe-selftest-armhost/build/meta/lib/oeqa/utils/commands.py", line 214, in runCmd
    raise AssertionError("Command '%s' returned non-zero exit status %d:\n%s" % (command, result.status, exc_output))
AssertionError: Command 'wic ls /home/pokybuild/yocto-worker/oe-selftest-armhost/build/build-st-2963231/tmp/deploy/images/qemuarm64/core-image-minimal-qemuarm64.wic:1/devicetree' returned non-zero exit status 1:
ERROR: Can't find executable 'mdir'

This is a missing dependency on mtools-native.



On 01/03/2023 12:45:51+0000, Tom�s Gonz�lez wrote:
> From: tomasagustin.gonzalezorlando@arm.com
> 
> When specifying a custom .dtb with the --sourceparams="dtb=<path>" parameter,
> the custom file is looked for in ${DEPLOY_DIR_IMAGE}/<path>, and the resulting
> grub config file is set to look for the .dtb under /<path> inside the boot
> partition. However, the file is not currently being copied there.
> 
> Change the behaviour of the --sourceparams="dtb=<path>" parameter so that
> the custom .dtb file is copied under /<path> in the boot partition.
> 
> Include oe-selftest to validate the functionality.
> 
> Signed-off-by: Tom�s Gonz�lez <tomasagustin.gonzalezorlando@arm.com>
> ---
>  .../recipes-test/dtb/devicetree-sample.bb     |  8 +++
>  .../dtb/files/sample-devicetree.dts           | 69 +++++++++++++++++++
>  meta-selftest/wic/test_dtb_efi.wks            |  3 +
>  meta/lib/oeqa/selftest/cases/wic.py           | 16 +++++
>  scripts/lib/wic/plugins/source/bootimg-efi.py |  2 +-
>  5 files changed, 97 insertions(+), 1 deletion(-)
>  create mode 100644 meta-selftest/recipes-test/dtb/devicetree-sample.bb
>  create mode 100644 meta-selftest/recipes-test/dtb/files/sample-devicetree.dts
>  create mode 100644 meta-selftest/wic/test_dtb_efi.wks
> 
> diff --git a/meta-selftest/recipes-test/dtb/devicetree-sample.bb b/meta-selftest/recipes-test/dtb/devicetree-sample.bb
> new file mode 100644
> index 0000000000..8be977a821
> --- /dev/null
> +++ b/meta-selftest/recipes-test/dtb/devicetree-sample.bb
> @@ -0,0 +1,8 @@
> +SUMMARY = "Device tree"
> +DESCRIPTION = "Contains a Device Tree recipe to be used to for testing."
> +
> +inherit devicetree
> +
> +SRC_URI += "file://sample-devicetree.dts"
> +
> +COMPATIBLE_MACHINE = ""
> diff --git a/meta-selftest/recipes-test/dtb/files/sample-devicetree.dts b/meta-selftest/recipes-test/dtb/files/sample-devicetree.dts
> new file mode 100644
> index 0000000000..71af0e117b
> --- /dev/null
> +++ b/meta-selftest/recipes-test/dtb/files/sample-devicetree.dts
> @@ -0,0 +1,69 @@
> +/dts-v1/;
> +/ {
> +	compatible = "opencores,or1ksim";
> +	#address-cells = <1>;
> +	#size-cells = <1>;
> +	interrupt-parent = <&pic>;
> +
> +	aliases {
> +		uart0 = &serial0;
> +	};
> +
> +	chosen {
> +		bootargs = "earlycon";
> +		stdout-path = "uart0:115200";
> +	};
> +
> +	memory@0 {
> +		device_type = "memory";
> +		reg = <0x00000000 0x02000000>;
> +	};
> +
> +	cpus {
> +		#address-cells = <1>;
> +		#size-cells = <0>;
> +		cpu@0 {
> +			compatible = "opencores,or1200-rtlsvn481";
> +			reg = <0>;
> +			clock-frequency = <20000000>;
> +		};
> +		cpu@1 {
> +			compatible = "opencores,or1200-rtlsvn481";
> +			reg = <1>;
> +			clock-frequency = <20000000>;
> +		};
> +	};
> +
> +	ompic: ompic@98000000 {
> +		compatible = "openrisc,ompic";
> +		reg = <0x98000000 16>;
> +		interrupt-controller;
> +		#interrupt-cells = <0>;
> +		interrupts = <1>;
> +	};
> +
> +	/*
> +	 * OR1K PIC is built into CPU and accessed via special purpose
> +	 * registers.  It is not addressable and, hence, has no 'reg'
> +	 * property.
> +	 */
> +	pic: pic {
> +		compatible = "opencores,or1k-pic-level";
> +		#interrupt-cells = <1>;
> +		interrupt-controller;
> +	};
> +
> +	serial0: serial@90000000 {
> +		compatible = "opencores,uart16550-rtlsvn105", "ns16550a";
> +		reg = <0x90000000 0x100>;
> +		interrupts = <2>;
> +		clock-frequency = <20000000>;
> +	};
> +
> +	enet0: ethoc@92000000 {
> +		compatible = "opencores,ethoc";
> +		reg = <0x92000000 0x800>;
> +		interrupts = <4>;
> +		big-endian;
> +	};
> +};
> diff --git a/meta-selftest/wic/test_dtb_efi.wks b/meta-selftest/wic/test_dtb_efi.wks
> new file mode 100644
> index 0000000000..61a7b1c9b4
> --- /dev/null
> +++ b/meta-selftest/wic/test_dtb_efi.wks
> @@ -0,0 +1,3 @@
> +part /boot --active --source bootimg-efi --sourceparams="loader=grub-efi,dtb=devicetree/sample-devicetree.dtb" --active --align 1024 --use-uuid --part-type EF00
> +part / --source rootfs --fstype=ext4 --align 1024 --use-uuid
> +bootloader --ptable gpt --timeout=1 --append="rootwait rootfstype=ext4 console=ttyS0,115200n8"
> diff --git a/meta/lib/oeqa/selftest/cases/wic.py b/meta/lib/oeqa/selftest/cases/wic.py
> index 0d664d7c39..d702c57679 100644
> --- a/meta/lib/oeqa/selftest/cases/wic.py
> +++ b/meta/lib/oeqa/selftest/cases/wic.py
> @@ -1512,3 +1512,19 @@ class ModifyTests(WicTestCase):
>          # check if it's removed
>          result = runCmd("wic ls %s:2/ -n %s" % (images[0], sysroot))
>          self.assertTrue('etc' not in [line.split()[-1] for line in result.output.split('\n') if line])
> +
> +    def test_dtb_efi(self):
> +        """Test custom dtb"""
> +        config = 'IMAGE_FSTYPES = "wic"\nWKS_FILE = "test_dtb_efi.wks"\nMACHINE_FEATURES:append = " efi"\n'
> +        config += 'EXTRA_IMAGEDEPENDS = "devicetree-sample"\n'
> +        self.append_config(config)
> +        bitbake('core-image-minimal')
> +
> +        deploy_dir = get_bb_var('DEPLOY_DIR_IMAGE')
> +        machine = self.td['MACHINE']
> +        image_path = os.path.join(deploy_dir, 'core-image-minimal-%s.wic' % machine)
> +
> +        self.assertTrue(os.path.exists(image_path))
> +
> +        result = runCmd("wic ls %s:1/devicetree" % (image_path))
> +        self.assertTrue('sample-devicetree.dtb' in [line.split()[-1] for line in result.output.split('\n') if line])
> diff --git a/scripts/lib/wic/plugins/source/bootimg-efi.py b/scripts/lib/wic/plugins/source/bootimg-efi.py
> index 4b00913a70..69c427e01d 100644
> --- a/scripts/lib/wic/plugins/source/bootimg-efi.py
> +++ b/scripts/lib/wic/plugins/source/bootimg-efi.py
> @@ -51,7 +51,7 @@ class BootimgEFIPlugin(SourcePlugin):
>          if dtb:
>              if ';' in dtb:
>                  raise WicError("Only one DTB supported, exiting")
> -            cp_cmd = "cp %s/%s %s" % (bootimg_dir, dtb, hdddir)
> +            cp_cmd = "install -D %s/%s %s/%s" % (bootimg_dir, dtb, hdddir, dtb)
>              exec_cmd(cp_cmd, True)
>  
>      @classmethod
> -- 
> 2.25.1
> 

> 
> -=-=-=-=-=-=-=-=-=-=-=-
> Links: You receive all messages sent to this group.
> View/Reply Online (#177885): https://lists.openembedded.org/g/openembedded-core/message/177885
> Mute This Topic: https://lists.openembedded.org/mt/97312887/3617179
> Group Owner: openembedded-core+owner@lists.openembedded.org
> Unsubscribe: https://lists.openembedded.org/g/openembedded-core/unsub [alexandre.belloni@bootlin.com]
> -=-=-=-=-=-=-=-=-=-=-=-
>
diff mbox series

Patch

diff --git a/meta-selftest/recipes-test/dtb/devicetree-sample.bb b/meta-selftest/recipes-test/dtb/devicetree-sample.bb
new file mode 100644
index 0000000000..8be977a821
--- /dev/null
+++ b/meta-selftest/recipes-test/dtb/devicetree-sample.bb
@@ -0,0 +1,8 @@ 
+SUMMARY = "Device tree"
+DESCRIPTION = "Contains a Device Tree recipe to be used to for testing."
+
+inherit devicetree
+
+SRC_URI += "file://sample-devicetree.dts"
+
+COMPATIBLE_MACHINE = ""
diff --git a/meta-selftest/recipes-test/dtb/files/sample-devicetree.dts b/meta-selftest/recipes-test/dtb/files/sample-devicetree.dts
new file mode 100644
index 0000000000..71af0e117b
--- /dev/null
+++ b/meta-selftest/recipes-test/dtb/files/sample-devicetree.dts
@@ -0,0 +1,69 @@ 
+/dts-v1/;
+/ {
+	compatible = "opencores,or1ksim";
+	#address-cells = <1>;
+	#size-cells = <1>;
+	interrupt-parent = <&pic>;
+
+	aliases {
+		uart0 = &serial0;
+	};
+
+	chosen {
+		bootargs = "earlycon";
+		stdout-path = "uart0:115200";
+	};
+
+	memory@0 {
+		device_type = "memory";
+		reg = <0x00000000 0x02000000>;
+	};
+
+	cpus {
+		#address-cells = <1>;
+		#size-cells = <0>;
+		cpu@0 {
+			compatible = "opencores,or1200-rtlsvn481";
+			reg = <0>;
+			clock-frequency = <20000000>;
+		};
+		cpu@1 {
+			compatible = "opencores,or1200-rtlsvn481";
+			reg = <1>;
+			clock-frequency = <20000000>;
+		};
+	};
+
+	ompic: ompic@98000000 {
+		compatible = "openrisc,ompic";
+		reg = <0x98000000 16>;
+		interrupt-controller;
+		#interrupt-cells = <0>;
+		interrupts = <1>;
+	};
+
+	/*
+	 * OR1K PIC is built into CPU and accessed via special purpose
+	 * registers.  It is not addressable and, hence, has no 'reg'
+	 * property.
+	 */
+	pic: pic {
+		compatible = "opencores,or1k-pic-level";
+		#interrupt-cells = <1>;
+		interrupt-controller;
+	};
+
+	serial0: serial@90000000 {
+		compatible = "opencores,uart16550-rtlsvn105", "ns16550a";
+		reg = <0x90000000 0x100>;
+		interrupts = <2>;
+		clock-frequency = <20000000>;
+	};
+
+	enet0: ethoc@92000000 {
+		compatible = "opencores,ethoc";
+		reg = <0x92000000 0x800>;
+		interrupts = <4>;
+		big-endian;
+	};
+};
diff --git a/meta-selftest/wic/test_dtb_efi.wks b/meta-selftest/wic/test_dtb_efi.wks
new file mode 100644
index 0000000000..61a7b1c9b4
--- /dev/null
+++ b/meta-selftest/wic/test_dtb_efi.wks
@@ -0,0 +1,3 @@ 
+part /boot --active --source bootimg-efi --sourceparams="loader=grub-efi,dtb=devicetree/sample-devicetree.dtb" --active --align 1024 --use-uuid --part-type EF00
+part / --source rootfs --fstype=ext4 --align 1024 --use-uuid
+bootloader --ptable gpt --timeout=1 --append="rootwait rootfstype=ext4 console=ttyS0,115200n8"
diff --git a/meta/lib/oeqa/selftest/cases/wic.py b/meta/lib/oeqa/selftest/cases/wic.py
index 0d664d7c39..d702c57679 100644
--- a/meta/lib/oeqa/selftest/cases/wic.py
+++ b/meta/lib/oeqa/selftest/cases/wic.py
@@ -1512,3 +1512,19 @@  class ModifyTests(WicTestCase):
         # check if it's removed
         result = runCmd("wic ls %s:2/ -n %s" % (images[0], sysroot))
         self.assertTrue('etc' not in [line.split()[-1] for line in result.output.split('\n') if line])
+
+    def test_dtb_efi(self):
+        """Test custom dtb"""
+        config = 'IMAGE_FSTYPES = "wic"\nWKS_FILE = "test_dtb_efi.wks"\nMACHINE_FEATURES:append = " efi"\n'
+        config += 'EXTRA_IMAGEDEPENDS = "devicetree-sample"\n'
+        self.append_config(config)
+        bitbake('core-image-minimal')
+
+        deploy_dir = get_bb_var('DEPLOY_DIR_IMAGE')
+        machine = self.td['MACHINE']
+        image_path = os.path.join(deploy_dir, 'core-image-minimal-%s.wic' % machine)
+
+        self.assertTrue(os.path.exists(image_path))
+
+        result = runCmd("wic ls %s:1/devicetree" % (image_path))
+        self.assertTrue('sample-devicetree.dtb' in [line.split()[-1] for line in result.output.split('\n') if line])
diff --git a/scripts/lib/wic/plugins/source/bootimg-efi.py b/scripts/lib/wic/plugins/source/bootimg-efi.py
index 4b00913a70..69c427e01d 100644
--- a/scripts/lib/wic/plugins/source/bootimg-efi.py
+++ b/scripts/lib/wic/plugins/source/bootimg-efi.py
@@ -51,7 +51,7 @@  class BootimgEFIPlugin(SourcePlugin):
         if dtb:
             if ';' in dtb:
                 raise WicError("Only one DTB supported, exiting")
-            cp_cmd = "cp %s/%s %s" % (bootimg_dir, dtb, hdddir)
+            cp_cmd = "install -D %s/%s %s/%s" % (bootimg_dir, dtb, hdddir, dtb)
             exec_cmd(cp_cmd, True)
 
     @classmethod