[LEDE-DEV] [PATCH 3/3] intel-microcode: create early load microcode image
Matthias Schiffer
mschiffer at universe-factory.net
Wed Apr 11 00:26:42 PDT 2018
On 04/03/2018 03:13 PM, Tomasz Maciej Nowak wrote:
> Create initrd image with packed microcode. This'll allow to load it at
> early boot stage. Unfortunately the package can't install files directly
> to /boot directory, therefore additional installation hooks are placed
> for standalone package and when building directly into target image.
>
> Signed-off-by: Tomasz Maciej Nowak <tomek_n at o2.pl>
> ---
> package/firmware/intel-microcode/Makefile | 32 +++++++++++++++++++++++++------
> target/linux/x86/image/Makefile | 6 ++++++
> 2 files changed, 32 insertions(+), 6 deletions(-)
>
> diff --git a/package/firmware/intel-microcode/Makefile b/package/firmware/intel-microcode/Makefile
> index d2663bb901..9970f8f072 100644
> --- a/package/firmware/intel-microcode/Makefile
> +++ b/package/firmware/intel-microcode/Makefile
> @@ -35,15 +35,35 @@ define Package/intel-microcode
> endef
>
> define Build/Compile
> - IUCODE_TOOL=$(STAGING_DIR)/../host/bin/iucode_tool $(MAKE) -C $(PKG_BUILD_DIR)
> - mkdir $(PKG_BUILD_DIR)/intel-ucode
> - $(STAGING_DIR)/../host/bin/iucode_tool -q \
> - --write-firmware=$(PKG_BUILD_DIR)/intel-ucode $(PKG_BUILD_DIR)/$(MICROCODE).bin
> + IUCODE_TOOL=$(STAGING_DIR)/../host/bin/iucode_tool \
> + $(MAKE) -C $(PKG_BUILD_DIR)
> + $(STAGING_DIR)/../host/bin/iucode_tool -q --mini-earlyfw \
> + --write-earlyfw=$(PKG_BUILD_DIR)/intel-ucode.cpio \
> + $(PKG_BUILD_DIR)/$(MICROCODE).bin
> endef
>
> define Package/intel-microcode/install
> - $(INSTALL_DIR) $(1)/lib/firmware/intel-ucode
> - $(INSTALL_DATA) $(PKG_BUILD_DIR)/intel-ucode/* $(1)/lib/firmware/intel-ucode
> + $(INSTALL_DIR) $(1)/lib/firmware
> + $(INSTALL_DATA) $(PKG_BUILD_DIR)/intel-ucode.cpio \
> + $(1)/lib/firmware/intel-ucode.img
> +endef
> +
> +ifeq ($(CONFIG_PACKAGE_intel-microcode),m)
This condition is problematic: Even when the package is built into the
image, the generated ipk package should work on other systems as well; this
means the contents of the package may not depend on the m/y setting in any way.
Normally, we would deal with such cases by checking $IPKG_INSTROOT inside
the postinst script. But in this case, I'd prefer to change /boot always to
be mounted rw, so we can just get rid of the postinst/prerm scripts and
special /boot handling.
> +define Package/intel-microcode/postinst
> +#!/bin/sh
> +
> +mount /boot -o remount,rw,noatime
> +cp -f /lib/firmware/intel-ucode.img /boot/
> +mount /boot -o remount,ro,noatime
> +endef
> +endif
> +
> +define Package/intel-microcode/prerm
> +#!/bin/sh
> +
> +mount /boot -o remount,rw,noatime
> +rm /boot/intel-ucode.img
> +mount /boot -o remount,ro,noatime
> endef
>
> $(eval $(call BuildPackage,intel-microcode))
> diff --git a/target/linux/x86/image/Makefile b/target/linux/x86/image/Makefile
> index a05f4babd9..4d6a3016d2 100644
> --- a/target/linux/x86/image/Makefile
> +++ b/target/linux/x86/image/Makefile
> @@ -83,6 +83,9 @@ ifneq ($(CONFIG_GRUB_IMAGES),)
> -e 's#@TIMEOUT@#$(GRUB_TIMEOUT)#g' \
> -e 's#@ROOT@#$(GRUB_ROOT)#g' \
> ./grub.cfg > $(KDIR)/root.grub/boot/grub/grub.cfg
> + ifeq ($(CONFIG_PACKAGE_intel-microcode),y)
We should get rid of this hack too, and move everything that is found in
/boot of the rootfs into the boot partition rather than dealing with
individual packages here.
> + $(CP) $(STAGING_DIR)/root-x86/lib/firmware/intel-ucode.img $(KDIR)/root.grub/boot/
> + endif
> PADDING="$(CONFIG_TARGET_IMAGES_PAD)" SIGNATURE="$(SIGNATURE)" PATH="$(TARGET_PATH)" $(SCRIPT_DIR)/gen_image_generic.sh \
> $(BIN_DIR)/$(IMG_PREFIX)-combined-$(1).img \
> $(CONFIG_TARGET_KERNEL_PARTSIZE) $(KDIR)/root.grub \
> @@ -120,6 +123,9 @@ define Image/Build/iso
> -e 's#@CMDLINE@#root=/dev/sr0 rootfstype=iso9660 rootwait $(strip $(call Image/cmdline/$(1)) $(BOOTOPTS) $(GRUB_CONSOLE_CMDLINE))#g' \
> -e 's#@TIMEOUT@#$(GRUB_TIMEOUT)#g' \
> ./grub-iso.cfg > $(KDIR)/root.grub/boot/grub/grub.cfg
> + ifeq ($(CONFIG_PACKAGE_intel-microcode),y)
> + $(CP) $(STAGING_DIR)/root-x86/lib/firmware/intel-ucode.img $(KDIR)/root.grub/boot/
> + endif
> mkisofs -R -b boot/grub/eltorito.img -no-emul-boot -boot-info-table \
> -o $(KDIR)/root.iso $(KDIR)/root.grub $(TARGET_DIR)
> endef
>
Regards,
Matthias
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 833 bytes
Desc: OpenPGP digital signature
URL: <http://lists.infradead.org/pipermail/lede-dev/attachments/20180411/774eda6f/attachment.sig>
More information about the Lede-dev
mailing list