public inbox for u-boot@lists.denx.de
 help / color / mirror / Atom feed
From: "Guillaume La Roque (TI.com)" <glaroque@baylibre.com>
To: Tom Rini <trini@konsulko.com>,
	 Mattijs Korpershoek <mkorpershoek@kernel.org>
Cc: Julien Masson <jmasson@baylibre.com>,
	 Guillaume La Roque <glaroque@baylibre.com>,
	u-boot@lists.denx.de,  Simon Glass <sjg@chromium.org>,
	Nicolas Belin <nbelin@baylibre.com>,
	 Neil Armstrong <neil.armstrong@linaro.org>,
	 Andrew Goodbody <andrew.goodbody@linaro.org>,
	 Aaron Kling <webgeek1234@gmail.com>,
	George Chan <gchan9527@gmail.com>,  Sam Day <me@samcday.com>,
	Jerome Forissier <jerome.forissier@linaro.org>,
	 Maxime Fournier <mfournier@baylibre.com>
Subject: [PATCH v2 5/5] test: abootimg: Add test for bootconfig handling
Date: Fri, 17 Oct 2025 15:19:21 +0200	[thread overview]
Message-ID: <20251017-bootconfig-v2-5-8c7c2f2e5474@baylibre.com> (raw)
In-Reply-To: <20251017-bootconfig-v2-0-8c7c2f2e5474@baylibre.com>

Add test to verify that androidboot.* parameters are correctly extracted
from bootargs and appended to the bootconfig section when using
'abootimg get ramdisk' with boot image v4 and vendor_boot image.

The test verifies:
- androidboot.* parameters are removed from bootargs
- They are appended to the bootconfig section in the ramdisk
- Non-androidboot parameters remain in bootargs
- The bootconfig trailer is properly updated

Signed-off-by: Guillaume La Roque (TI.com) <glaroque@baylibre.com>
---
 test/py/tests/test_android/test_abootimg.py | 108 +++++++++++++++++++++++++---
 1 file changed, 99 insertions(+), 9 deletions(-)

diff --git a/test/py/tests/test_android/test_abootimg.py b/test/py/tests/test_android/test_abootimg.py
index 2aadb692b30..bd5fb992a7d 100644
--- a/test/py/tests/test_android/test_abootimg.py
+++ b/test/py/tests/test_android/test_abootimg.py
@@ -69,15 +69,33 @@ e5bddc8a7b792d8e8788c896ce9b88d32ebe6c971e7ddd3543cae734cd01
 c0ffc84c0000b0766d1a87d4e5afeadd3dab7a6f10000000f84163d5d7cd
 d43a000000000000000060c53e7544995700400000"""
 
-# vendor boot image v4 hex dump
-vboot_img_hex = """1f8b0808baaecd63020376626f6f742e696d6700edd8310b824018c6f1b3
-222a08f41b3436b4280dcdd19c11d16ee9109d18d59042d047ec8b04cd0d
-d19d5a4345534bf6ffc173ef29272f38e93b1d0ec67dd79d548462aa1cd2
-d5d20b0000f8438678f90c18d584b8a4bbb3a557991ecb2a0000f80d6b2f
-f4179b656be5c532f2fc066f040000000080e23936af2755f62a3d918df1
-db2a7ab67f9ffdeb7df7cda3465ecb79c4ce7e5c577562bb9364b74449a5
-1e467e20c53c0a57de763193c1779b3b4fcd9d4ee27c6a0e00000000c0ff
-309ffea7010000000040f1dc004129855400400000"""
+# vendor boot image v4 hex dump (contains initial bootconfig: androidboot.hardware=test)
+vboot_img_hex = """1f8b08000000000002ffeddb316a02411806d009a49040606d3d84374823a9a348b095
+915951b2c9caee8690ce237a91406a0b497603e215dcbc577cf3334cf5350303b3787a
+9c4fa6d3e7dbf02b6b63dfc6b01b0180ffe726644d5e37975bb34108c76efa1eb65974
+c7fed691c600e02a64e7ab3e8494afe37bd128050000007ae6707ffad202000000f45b
+155fd3b67e59eee26751c674a711000000e89ff896aa729b5665d98c37b14a1fb1ca1f
+da4f7f5e02000000a0377e0040ab5ba000500000"""
+
+# bootable boot image v4 hex dump (contains actual bootable kernel)
+boot_bootable_img_hex = """1f8b08081663ee6802ff626f6f745f626f6f7461626c655f76342e696d67
+00edd1c14ac3401485e159b80a083ec24dba4f117c81d8140c6dad24ee25
+4da6e9d07452321305dfca37d4d4ec5cb954fe6f37ccb967606ef298e6db
+2c0d3f94526feae25adda81fae140000000000f8ab66e17c67ecdc1d025d
+1d3a89125bf79da9e5beebbc64a7b2d1f27a27cfda7959e9deea369a8263
+a0eaecde34e2c75b375495766e3fb46114cca430a7a12dbd96e3654a7663
+dfb9f4feeb383514beecbdb1cd1489e3380a5cabf5596ea7c4f78b62acf1
+a66ccdbbaea380950100000000f06b79b249b362f5f2b44e16cb87ed3a5d
+e67c0a0000000000ffcc27ba944c7e00300000"""
+
+# bootable vendor boot image v4 hex dump (contains actual bootable ramdisk)
+vendor_boot_bootable_img_hex = """1f8b08081663ee6802ff76656e646f725f626f6f745f626f6f7461626c65
+5f76342e696d6700edd8b10a02310cc6f10c0e7220f8080737b8b93ab9a8
+282e571171959e0d787058a84557f5c96ddd7d80c3ff0f92217c5396408e
+f56abf30e63090649c9b3c53bd050000fcab57d45b3c35de47db749a06bb
+e1eff08c7d0100d00bf6ea826f5dbef0d38b0dee618396f3f27bf69ddedb
+b316558a4d462255fe132c4dbdde6e0a160700000000408f7c0027597569
+00200000"""
 
 # Expected response for "abootimg dtb_dump" command
 dtb_dump_resp="""## DTB area contents (concat format):
@@ -179,6 +197,24 @@ def abootimgv4_disk_image_boot(ubman):
         gtdi3 = AbootimgTestDiskImage(ubman, 'bootv4.img', boot_img_hex)
     return gtdi3
 
+gtdi4 = None
+@pytest.fixture(scope='function')
+def abootimgv4_bootable_disk_image_boot(ubman):
+    """pytest fixture to provide bootable boot image v4."""
+    global gtdi4
+    if not gtdi4:
+        gtdi4 = AbootimgTestDiskImage(ubman, 'boot_bootable_v4.img', boot_bootable_img_hex)
+    return gtdi4
+
+gtdi5 = None
+@pytest.fixture(scope='function')
+def abootimgv4_bootable_disk_image_vboot(ubman):
+    """pytest fixture to provide bootable vendor boot image v4."""
+    global gtdi5
+    if not gtdi5:
+        gtdi5 = AbootimgTestDiskImage(ubman, 'vendor_boot_bootable_v4.img', vendor_boot_bootable_img_hex)
+    return gtdi5
+
 @pytest.mark.boardspec('sandbox')
 @pytest.mark.buildconfigspec('android_boot_image')
 @pytest.mark.buildconfigspec('cmd_abootimg')
@@ -266,3 +302,57 @@ def test_abootimgv4(abootimgv4_disk_image_vboot, abootimgv4_disk_image_boot, ubm
     ubman.run_command('fdt get value v / model')
     response = ubman.run_command('env print v')
     assert response == 'v=x2'
+
+@pytest.mark.boardspec('sandbox')
+@pytest.mark.buildconfigspec('android_boot_image')
+@pytest.mark.buildconfigspec('cmd_abootimg')
+@pytest.mark.requiredtool('xxd')
+@pytest.mark.requiredtool('gunzip')
+def test_abootimg_bootconfig(abootimgv4_disk_image_vboot,
+                              abootimgv4_disk_image_boot,
+                              ubman):
+    """Test bootconfig handling with boot image v4.
+
+    Verifies that androidboot.* parameters from bootargs are appended to the
+    bootconfig section in vendor_boot image in memory, and that non-androidboot
+    parameters remain in bootargs.
+    """
+
+    # Setup addresses
+    ram_base = utils.find_ram_base(ubman)
+    ramdisk_addr_r = ram_base + 0x4000000
+    ubman.run_command('setenv ramdisk_addr_r 0x%x' % ramdisk_addr_r)
+    ubman.run_command('setenv loadaddr 0x%x' % loadaddr)
+    ubman.run_command('setenv vloadaddr 0x%x' % vloadaddr)
+
+    # Set bootargs with androidboot.* parameters
+    ubman.run_command('setenv bootargs "androidboot.serialno=ABC123 androidboot.mode=recovery console=ttyS0"')
+
+    # Load images
+    ubman.run_command('host load hostfs - 0x%x %s' % (vloadaddr,
+        abootimgv4_disk_image_vboot.path))
+    ubman.run_command('host load hostfs - 0x%x %s' % (loadaddr,
+        abootimgv4_disk_image_boot.path))
+    ubman.run_command('abootimg addr 0x%x 0x%x' % (loadaddr, vloadaddr))
+
+    # Extract ramdisk (triggers bootconfig append)
+    ubman.run_command('abootimg get ramdisk ramdisk_addr ramdisk_size')
+
+    # Get ramdisk address
+    response = ubman.run_command('env print ramdisk_addr')
+    ramdisk_start = int(response.split('=')[1], 16)
+
+    # Verify androidboot.* parameters were removed from bootargs
+    response = ubman.run_command('env print bootargs')
+    assert 'androidboot.' not in response
+    assert 'console=ttyS0' in response
+
+    # Get ramdisk size and verify BOOTCONFIG magic at the end
+    response = ubman.run_command('env print ramdisk_size')
+    ramdisk_size = int(response.split('=')[1], 16)
+
+    # Dump the end of the ramdisk where BOOTCONFIG trailer should be
+    response = ubman.run_command('md.b 0x%x 96' % (ramdisk_start))
+
+    # Verify BOOTCONFIG magic is present
+    assert 'BOOTCONFIG' in response or 'BOOTCON' in response

-- 
2.34.1


  parent reply	other threads:[~2025-10-17 13:20 UTC|newest]

Thread overview: 23+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2025-10-17 13:19 [PATCH v2 0/5] android: add bootconfig support Guillaume La Roque (TI.com)
2025-10-17 13:19 ` [PATCH v2 1/5] boot: android: import addBootConfigParameters() from AOSP Guillaume La Roque (TI.com)
2025-10-31 15:39   ` Mattijs Korpershoek
2025-10-17 13:19 ` [PATCH v2 2/5] boot: android: Add sandbox memory mapping support Guillaume La Roque (TI.com)
2025-10-31 15:49   ` Mattijs Korpershoek
2025-10-17 13:19 ` [PATCH v2 3/5] boot: android: Add bootconfig support Guillaume La Roque (TI.com)
2025-10-31 15:58   ` Mattijs Korpershoek
2025-11-03 18:52     ` Guillaume La Roque
2025-11-07 14:52       ` Mattijs Korpershoek
2025-10-17 13:19 ` [PATCH v2 4/5] cmd: abootimg: Add 'get ramdisk' command Guillaume La Roque (TI.com)
2025-10-31 16:13   ` Mattijs Korpershoek
2025-10-17 13:19 ` Guillaume La Roque (TI.com) [this message]
2025-10-19 13:06   ` [PATCH v2 5/5] test: abootimg: Add test for bootconfig handling Simon Glass
2025-10-19 16:01     ` Tom Rini
2025-10-20  5:18       ` Simon Glass
2025-10-24 15:09         ` Guillaume La Roque
2025-10-24 15:20           ` Tom Rini
2025-10-31 16:27   ` Mattijs Korpershoek
2025-11-05 18:14     ` Guillaume La Roque
2025-11-07 14:52       ` Mattijs Korpershoek
2025-10-18  6:07 ` [PATCH v2 0/5] android: add bootconfig support george chan
2025-10-20 13:58   ` Guillaume La Roque
2025-10-20 15:45     ` george chan

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=20251017-bootconfig-v2-5-8c7c2f2e5474@baylibre.com \
    --to=glaroque@baylibre.com \
    --cc=andrew.goodbody@linaro.org \
    --cc=gchan9527@gmail.com \
    --cc=jerome.forissier@linaro.org \
    --cc=jmasson@baylibre.com \
    --cc=me@samcday.com \
    --cc=mfournier@baylibre.com \
    --cc=mkorpershoek@kernel.org \
    --cc=nbelin@baylibre.com \
    --cc=neil.armstrong@linaro.org \
    --cc=sjg@chromium.org \
    --cc=trini@konsulko.com \
    --cc=u-boot@lists.denx.de \
    --cc=webgeek1234@gmail.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox