From patchwork Wed Oct 8 06:28:49 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Badrikesh Prusty X-Patchwork-Id: 4401 Return-Path: Received: from shymkent.ilbers.de ([unix socket]) by shymkent (Cyrus 2.5.10-Debian-2.5.10-3+deb9u2) with LMTPA; Wed, 08 Oct 2025 09:33:43 +0200 X-Sieve: CMU Sieve 2.4 Received: from mail-qv1-f63.google.com (mail-qv1-f63.google.com [209.85.219.63]) by shymkent.ilbers.de (8.15.2/8.15.2/Debian-8+deb9u1) with ESMTPS id 5987Xffb006188 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT) for ; Wed, 8 Oct 2025 09:33:42 +0200 Received: by mail-qv1-f63.google.com with SMTP id 6a1803df08f44-818bf399f8asf188444196d6.2 for ; Wed, 08 Oct 2025 00:33:42 -0700 (PDT) ARC-Seal: i=2; a=rsa-sha256; t=1759908815; cv=pass; d=google.com; s=arc-20240605; b=d2gBbXybyPQJTQRxIMcjnJZKZIqL/4DHGe5kLK/ZInYOIH7pRbQYA7nMxs33HZJxd8 R153ANKdQ8vAklKyYNkJptKqHutTXGNoozC+hkt+7gIiMYifnThdVj0iEKYh2uXxkUnT AX3SrWN0TzAQHUh+IbUzD2E2Ax0JPQX0PlvM+SEf2Kh+6iy5skWNR/BYIQhPAco8TAUB B2m1aPWa4Pqami+7n0tIDb1fF4Z31FT7DC0I05KoBXnJRNRl2fWDGaABd33tJd5aSmAo leCXhRMTHutD5ZF0rt7PDeZkth4GMBOZXz1dIJwBK34zpHMhkKq5bKdkzFDf2Plma1Ke IbVA== ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20240605; h=list-unsubscribe:list-subscribe:list-archive:list-help:list-post :list-id:mailing-list:precedence:reply-to:feedback-id:mime-version :message-id:date:subject:cc:to:from:dkim-signature; bh=8wMxWXhDBi0IVy/2dB55hAhVMLKLKrysiIwQbqZdvak=; fh=9U0Y4OiJ1nmji2eYSz1BX5KESjjUUu1NztiPcni8YLI=; b=ZSYHVKiic9WY+FHAajH149rIQmGkWVU5nsvdMapy8CmaaJQJAgQiZT8OSL8TmOwjzJ aWupPqNlojy5D6C2oIYAo2DlFe7MoLT/VhbKrtAj8+9Zw9HqayQ63GwL4bk2anJtDFTx F0P1eGTLB0QMD2bhsCjijsxLjtZUevyxZ556+8dvWGWjjIpGX05A4R+9LVIrmo41YYHF ucPQ7ytGDHvhzA4R8y/uPQbup7Vhg/7cmCS4kvS6j6M+sUjLdX11hUbQrlL+9HLafj4E bzrspHUB09kIeTRqNac/tkq9JMt9Lk7WnY2znUByZJarx/CV/3563t/WGqq/82gyvAc7 aUXA==; darn=isar-build.org ARC-Authentication-Results: i=2; gmr-mx.google.com; dkim=pass header.i=@siemens.com header.s=fm2 header.b=AWeak9fs; spf=pass (google.com: domain of fm-1328765-20251008062902137cff93140002072d-7veiuj@rts-flowmailer.siemens.com designates 185.136.64.225 as permitted sender) smtp.mailfrom=fm-1328765-20251008062902137cff93140002072d-7vEIUj@rts-flowmailer.siemens.com; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=siemens.com DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=googlegroups.com; s=20230601; t=1759908815; x=1760513615; darn=isar-build.org; h=list-unsubscribe:list-subscribe:list-archive:list-help:list-post :list-id:mailing-list:precedence:reply-to :x-original-authentication-results:x-original-sender:feedback-id :mime-version:message-id:date:subject:cc:to:from:from:to:cc:subject :date:message-id:reply-to; bh=8wMxWXhDBi0IVy/2dB55hAhVMLKLKrysiIwQbqZdvak=; b=lV8L/OTukXQNtjxEZT/A5ig/MNtJ7zTbH41UpArV7d2KIHgVjHbd86rWlvgWBj7qKM 8hK4dAheGR9z8VdeNT97wLagu1rf3tTEiBYRc58X13lNC6FB790WX1zf0yIP47h1FMTi BtAPDg+wewjXQAuUZrLFM0iiHPzXpIABF17HsiYUbBbPdd89q4+qkBaCtrW+a+y48o+z OzGvq/8nx/1jeDEl7ZTXlgNFXg8IW0eLhGAx7NNEh0T962R0jKu/u6i9yr/iCLfZowWJ jjPv1R8FwPcK8Pk6/RfnPQQ8A5/i7FPM87tGarif9JzJdbsDr+NXHDhnO9Odsmh4hI6p U0OA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1759908815; x=1760513615; h=list-unsubscribe:list-subscribe:list-archive:list-help:list-post :list-id:mailing-list:precedence:reply-to :x-original-authentication-results:x-original-sender:feedback-id :mime-version:message-id:date:subject:cc:to:from:x-beenthere :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=8wMxWXhDBi0IVy/2dB55hAhVMLKLKrysiIwQbqZdvak=; b=t3jL/gT3b5O96k2IaYnGrbpA2HwXuVBQVaXaNy21VjsOTitZfx4C5Xu6ZMa3MVPQsH q8rMUFv2UmiSHerkZl9pwxZMkpb9OX/5T3XK8NiT6h6hhg9eugciaYsTHJKUlAC4+m1Y OxmTyC1CYlDbrqUrl2kbNFvAyRsz6Wo3LYbgizE+3LbmJ2wc0yBTIB65vol5nY1fwYfg SeKHAe/sFq4YAW4dGoN51ZIElOg8w8IpDm81NfXja3UP4J3nKMVk0Us4qMZ05uCB86Qo XhXURc/y66ebBzLIz5mxxg6pnDW0naAj3QSbBOCkVIxiNyAoiNoY5Qm4UeM3DgUAYLSh msrg== X-Forwarded-Encrypted: i=2; AJvYcCVYk5FIn3IcQfeVADqtuHxZBIItg2D8+HOUPHODfkgvDBSPBcgVR33xxORdAQWOe3+fzWX/UFw=@isar-build.org X-Gm-Message-State: AOJu0YwLj2cFVfV0JtSF4eBnYfpzN7+N3E9eqWrRXG/IlEQ88CLBEema SWOBDx93B3iTG0Q+POes051E5TgfYxkRy9qLSJLvJ6TY1jCZf49//Ekw X-Google-Smtp-Source: AGHT+IFTvsjQj95D6nQnI0dmEoBi5MqnxHW8292YV6CGcMQ72FiqgDczps28KZSVWF8QLOHmOC5j/Q== X-Received: by 2002:ad4:5caa:0:b0:795:c5f5:f0a0 with SMTP id 6a1803df08f44-87b2ef56baamr30819916d6.58.1759908814647; Wed, 08 Oct 2025 00:33:34 -0700 (PDT) X-BeenThere: isar-users@googlegroups.com; h="ARHlJd5do9A2PHhcfdAmMuOuxBvq6WXhp1VIf6dzQ4LSd0TYXQ==" Received: by 2002:a05:6214:1770:b0:70d:bc98:89ea with SMTP id 6a1803df08f44-878ab36f896ls122880616d6.2.-pod-prod-09-us; Wed, 08 Oct 2025 00:33:34 -0700 (PDT) X-Received: by 2002:a05:620a:4489:b0:808:bbc:df09 with SMTP id af79cd13be357-8835547a576mr299947085a.56.1759908814145; Wed, 08 Oct 2025 00:33:34 -0700 (PDT) Received: by 2002:a05:6808:484:b0:43f:5b9f:a4a0 with SMTP id 5614622812f47-4417b4b3cd6msb6e; Tue, 7 Oct 2025 23:29:06 -0700 (PDT) X-Received: by 2002:a05:6e02:2282:b0:425:7526:7f56 with SMTP id e9e14a558f8ab-42f873590aemr15741295ab.5.1759904945308; Tue, 07 Oct 2025 23:29:05 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1759904945; cv=none; d=google.com; s=arc-20240605; b=BCE+IItlVbFuAO2gvDUbeprh7qHfF483kD9wmWfOmyXWjXNvQ8quzxhhVpssBH/2z6 hB+kPa3N00sjGrRWiShuqcrSlHADTyFWPMnNbAnGA2DxmMUu+ZEME8MRc9+RobDF4N2O XgPDC2RPWxxU05kZdsSt+1T9y969+Iww+0pVqd5Kzof7mcl/ENEdS87r7fQbpKlB0vb5 I+YFR0Aw/t2V4iKWW8w2Ct/oDD1juqyOeRpf+jmjNGBRgnnGlym2A4HXLPW32PZbzw4q 9We5G8kplMHIMco5r+NpclSM93rQmPG7HJbFWYUmHndwdDjBpw01CbYBMY1SxnyXGg+Q 3Hmw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20240605; h=feedback-id:content-transfer-encoding:mime-version:message-id:date :subject:cc:to:from:dkim-signature; bh=xQkEZJZJu3BbOyhzeF9a7exIH/2ckyeuRciWtFf06vQ=; fh=Pt40xOu0ssl96dVOzN1FNmNtHgqv9aW9VmLrBG8UyVY=; b=fchvfnSWB4xFrjzMraIut++XIUeUgGLmMDpyUlJHie6ZYB6TYdtQvG2l6GosvsqKbv trI496LOuzN1pv+DYAI2CVFtHBJtxEoylk+sqHG7VVRHRHs4o3buOsQqeLew9FdRyfmk sGVA+zyEJ6/cp0wrGOL56L3TzPQTY5N/J6On4jkOAJnOEsKAT+0726zmXpRL/Bei9wzc eI19T/dfUhkWihGSS24L7XXHNxe1jIIJMDebpYlgsW86d/sJ1PaFs51bMxPwL5XbA1B9 ArQEcV1klXYUZygiPLHVMgzt+sAs7NSKuC34bolWBO3lc0vVHj+8tg7VZoJ0uh6n6wTi 2wsw==; dara=google.com ARC-Authentication-Results: i=1; gmr-mx.google.com; dkim=pass header.i=@siemens.com header.s=fm2 header.b=AWeak9fs; spf=pass (google.com: domain of fm-1328765-20251008062902137cff93140002072d-7veiuj@rts-flowmailer.siemens.com designates 185.136.64.225 as permitted sender) smtp.mailfrom=fm-1328765-20251008062902137cff93140002072d-7vEIUj@rts-flowmailer.siemens.com; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=siemens.com Received: from mta-64-225.siemens.flowmailer.net (mta-64-225.siemens.flowmailer.net. [185.136.64.225]) by gmr-mx.google.com with ESMTPS id 8926c6da1cb9f-57b5eb62ba5si739642173.3.2025.10.07.23.29.04 for (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Tue, 07 Oct 2025 23:29:05 -0700 (PDT) Received-SPF: pass (google.com: domain of fm-1328765-20251008062902137cff93140002072d-7veiuj@rts-flowmailer.siemens.com designates 185.136.64.225 as permitted sender) client-ip=185.136.64.225; Received: by mta-64-225.siemens.flowmailer.net with ESMTPSA id 20251008062902137cff93140002072d for ; Wed, 08 Oct 2025 08:29:03 +0200 X-Patchwork-Original-From: "'Badrikesh Prusty' via isar-users" From: Badrikesh Prusty To: isar-users@googlegroups.com Cc: Badrikesh Prusty Subject: [PATCH v2] image: copy DTB_FILES to DEPLOYDIR/IMAGE_FULLNAME/KERNEL_NAME/ Date: Wed, 8 Oct 2025 02:28:49 -0400 Message-ID: <20251008062849.52090-1-badrikesh.prusty@siemens.com> MIME-Version: 1.0 X-Flowmailer-Platform: Siemens Feedback-ID: 519:519-1328765:519-21489:flowmailer X-Original-Sender: badrikesh.prusty@siemens.com X-Original-Authentication-Results: gmr-mx.google.com; dkim=pass header.i=@siemens.com header.s=fm2 header.b=AWeak9fs; spf=pass (google.com: domain of fm-1328765-20251008062902137cff93140002072d-7veiuj@rts-flowmailer.siemens.com designates 185.136.64.225 as permitted sender) smtp.mailfrom=fm-1328765-20251008062902137cff93140002072d-7vEIUj@rts-flowmailer.siemens.com; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=siemens.com X-Original-From: Badrikesh Prusty Reply-To: Badrikesh Prusty Precedence: list Mailing-list: list isar-users@googlegroups.com; contact isar-users+owners@googlegroups.com List-ID: X-Google-Group-Id: 914930254986 List-Post: , List-Help: , List-Archive: , List-Unsubscribe: , X-Spam-Status: No, score=-4.9 required=5.0 tests=DKIMWL_WL_MED,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,MAILING_LIST_MULTI, RCVD_IN_DNSWL_BLOCKED,RCVD_IN_MSPIKE_H2,RCVD_IN_RP_CERTIFIED, RCVD_IN_RP_RNBL,RCVD_IN_RP_SAFE,SPF_PASS autolearn=unavailable autolearn_force=no version=3.4.2 X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on shymkent.ilbers.de X-getmail-retrieved-from-mailbox: =?utf-8?q?INBOX?= Copy DTB_FILES to DEPLOYDIR/IMAGE_FULLNAME/KERNEL_NAME instead of DEPLOYDIR/. An issue is observed when we attempt to build a second image for a machine utilizing DTB_FILES. During the do_copy_boot_files task of image creation, the DTB_FILES are copied to the shared location DEPLOYDIR/. When the build of a second image is triggered, it detects that the DTB_FILES are already present and avoids overwriting them. Reproducer: bitbake mc:phyboard-mira-bookworm:isar-image-base bitbake mc:phyboard-mira-bookworm:isar-image-debug Copy the DTB_FILES to the directory: DEPLOYDIR/IMAGE_FULLNAME/KERNEL_NAME/. * This will allow building multiple images. * As each kernel recipe ships its own DTB_FILES, if a user tries to rebuild the same image with a new kernel, the DTB_FILES associated with the older kernel will not be overwritten. Update the DTB_IMG variable to check for DTB_FILES in their new location. Update the WIC plugin scripts to use the DTB_FILES from their updated location within the DEPLOYDIR. Add IMAGE_FULLNAME and KERNEL_NAME to WICVARS to allow the scripts to retrieve these variable values during WIC image generation. Signed-off-by: Badrikesh Prusty --- RECIPE-API-CHANGELOG.md | 11 +++++++++++ meta/classes/image.bbclass | 5 +++-- meta/classes/imagetypes_wic.bbclass | 6 +++--- .../lib/wic/plugins/source/bootimg-efi-isar.py | 10 ++++++++-- scripts/lib/wic/plugins/source/bootimg-efi.py | 9 +++++++-- .../lib/wic/plugins/source/bootimg-partition.py | 14 ++++++++++++++ 6 files changed, 46 insertions(+), 9 deletions(-) diff --git a/RECIPE-API-CHANGELOG.md b/RECIPE-API-CHANGELOG.md index 2930ade9..0ad0ebf7 100644 --- a/RECIPE-API-CHANGELOG.md +++ b/RECIPE-API-CHANGELOG.md @@ -761,3 +761,14 @@ the following variables in your image recipe. For example, to use German, add: LOCALE_GEN = "de_DE.UTF-8 UTF-8\n" LOCALE_DEFAULT = "de_DE.UTF-8" ``` + +### Copy DTB_FILES to Separate Location for Multi-Image/Multi-Kernel Support + +Copy DTB_FILES to DEPLOYDIR/IMAGE_FULLNAME/KERNEL_NAME instead of DEPLOYDIR/. + +This enables building multiple images utilizing DTB_FILES, with each kernel +recipe providing its own DTB_FILES. Rebuilding an image with a new kernel won't +overwrite the DTBfiles from the previous one. + +Update DTB_IMG to locate DTB_FILES in their new path, and modify WIC plugin +scripts to use the updated DTB_FILES location within DEPLOYDIR. diff --git a/meta/classes/image.bbclass b/meta/classes/image.bbclass index bd1b8552..8606d353 100644 --- a/meta/classes/image.bbclass +++ b/meta/classes/image.bbclass @@ -333,7 +333,7 @@ EOF KERNEL_IMG = "${PP_DEPLOY}/${KERNEL_IMAGE}" INITRD_IMG = "${PP_DEPLOY}/${INITRD_DEPLOY_FILE}" # only one dtb file supported, pick the first -DTB_IMG = "${PP_DEPLOY}/${@(d.getVar('DTB_FILES').split() or [''])[0]}" +DTB_IMG = "${PP_DEPLOY}/${IMAGE_FULLNAME}/${KERNEL_NAME}/${@(d.getVar('DTB_FILES').split() or [''])[0]}" do_copy_boot_files[cleandirs] += "${DEPLOYDIR}" do_copy_boot_files[sstate-inputdirs] = "${DEPLOYDIR}" @@ -356,7 +356,8 @@ do_copy_boot_files() { die "${file} not found" fi - cp -f "$dtb" "${DEPLOYDIR}/" + mkdir -p "${DEPLOYDIR}/${IMAGE_FULLNAME}/${KERNEL_NAME}" + cp -f "$dtb" "${DEPLOYDIR}/${IMAGE_FULLNAME}/${KERNEL_NAME}/" done } addtask copy_boot_files before do_rootfs_postprocess after do_rootfs_install diff --git a/meta/classes/imagetypes_wic.bbclass b/meta/classes/imagetypes_wic.bbclass index fb0b81a9..a9fec616 100644 --- a/meta/classes/imagetypes_wic.bbclass +++ b/meta/classes/imagetypes_wic.bbclass @@ -102,9 +102,9 @@ WIC_DEPLOY_PARTITIONS ?= "0" # taken from OE, do not touch directly WICVARS += "\ - BBLAYERS IMGDEPLOYDIR DEPLOY_DIR_IMAGE FAKEROOTCMD IMAGE_BASENAME IMAGE_BOOT_FILES IMAGE_EFI_BOOT_FILES \ - IMAGE_LINK_NAME IMAGE_ROOTFS INITRAMFS_FSTYPES INITRD INITRD_LIVE ISODIR RECIPE_SYSROOT_NATIVE \ - ROOTFS_SIZE STAGING_DATADIR STAGING_DIR STAGING_LIBDIR TARGET_SYS TRANSLATED_TARGET_ARCH" + BBLAYERS IMGDEPLOYDIR DEPLOY_DIR_IMAGE FAKEROOTCMD IMAGE_BASENAME IMAGE_FULLNAME IMAGE_BOOT_FILES \ + IMAGE_EFI_BOOT_FILES IMAGE_LINK_NAME IMAGE_ROOTFS INITRAMFS_FSTYPES INITRD INITRD_LIVE ISODIR KERNEL_NAME \ + RECIPE_SYSROOT_NATIVE ROOTFS_SIZE STAGING_DATADIR STAGING_DIR STAGING_LIBDIR TARGET_SYS TRANSLATED_TARGET_ARCH" # Isar specific vars used in our plugins WICVARS += "DISTRO DISTRO_ARCH KERNEL_FILE" 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..465e549a 100644 --- a/meta/scripts/lib/wic/plugins/source/bootimg-efi-isar.py +++ b/meta/scripts/lib/wic/plugins/source/bootimg-efi-isar.py @@ -57,7 +57,10 @@ 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) + image_fullname = get_bitbake_var("IMAGE_FULLNAME") + kernel_name = get_bitbake_var("KERNEL_NAME") + dtbs_dir = os.path.join(bootimg_dir, image_fullname, kernel_name) + cp_cmd = "cp %s/%s %s" % (dtbs_dir, dtb, hdddir) exec_cmd(cp_cmd, True) @classmethod @@ -359,8 +362,11 @@ class BootimgEFIPlugin(SourcePlugin): if dtb: if ';' in dtb: raise WicError("Only one DTB supported, exiting") + image_fullname = get_bitbake_var("IMAGE_FULLNAME") + kernel_name = get_bitbake_var("KERNEL_NAME") + dtbs_dir = os.path.join(deploy_dir, image_fullname, kernel_name) dtb_params = '--add-section .dtb=%s/%s --change-section-vma .dtb=0x40000' % \ - (deploy_dir, dtb) + (dtbs_dir, dtb) else: dtb_params = '' diff --git a/scripts/lib/wic/plugins/source/bootimg-efi.py b/scripts/lib/wic/plugins/source/bootimg-efi.py index 13a9cddf..0e17543d 100644 --- a/scripts/lib/wic/plugins/source/bootimg-efi.py +++ b/scripts/lib/wic/plugins/source/bootimg-efi.py @@ -51,7 +51,10 @@ 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) + image_fullname = get_bitbake_var("IMAGE_FULLNAME") + kernel_name = get_bitbake_var("KERNEL_NAME") + dtbs_dir = os.path.join(bootimg_dir, image_fullname, kernel_name) + cp_cmd = "cp %s/%s %s" % (dtbs_dir, dtb, hdddir) exec_cmd(cp_cmd, True) @classmethod @@ -368,7 +371,9 @@ class BootimgEFIPlugin(SourcePlugin): if dtb: if ';' in dtb: raise WicError("Only one DTB supported, exiting") - dtb_path = "%s/%s" % (deploy_dir, dtb) + image_fullname = get_bitbake_var("IMAGE_FULLNAME") + kernel_name = get_bitbake_var("KERNEL_NAME") + dtb_path = os.path.join(deploy_dir, image_fullname, kernel_name, dtb) dtb_params = '--add-section .dtb=%s --change-section-vma .dtb=0x%x' % \ (dtb_path, dtb_off) linux_off = dtb_off + os.stat(dtb_path).st_size diff --git a/scripts/lib/wic/plugins/source/bootimg-partition.py b/scripts/lib/wic/plugins/source/bootimg-partition.py index 94183174..5c1e4497 100644 --- a/scripts/lib/wic/plugins/source/bootimg-partition.py +++ b/scripts/lib/wic/plugins/source/bootimg-partition.py @@ -183,9 +183,23 @@ class BootimgPartitionPlugin(SourcePlugin): logger.debug('Kernel dir: %s', bootimg_dir) + image_fullname = get_bitbake_var("IMAGE_FULLNAME") + kernel_name = get_bitbake_var("KERNEL_NAME") + dtbs_dir = os.path.join(image_fullname, kernel_name) for task in cls.install_task: src_path, dst_path = task + + src_fullpath = os.path.join(kernel_dir, src_path) + + # If default path doesn't exist, try DTB deploy path + if not os.path.exists(src_fullpath): + src_path = os.path.join(dtbs_dir, src_path) + src_fullpath = os.path.join(kernel_dir, src_path) + + if not os.path.exists(src_fullpath): + raise WicError("Couldn't find %s, exiting" % src_fullpath) + logger.debug('Install %s as %s', src_path, dst_path) install_cmd = "install -m 0644 -D %s %s" \ % (os.path.join(kernel_dir, src_path),