W dniu 09.04.2018 o 21:05, Philip Prindeville pisze:
Inline

On Apr 3, 2018, at 7:13 AM, Tomasz Maciej Nowak <tome...@o2.pl> 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 <tome...@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)
+define Package/intel-microcode/postinst
+#!/bin/sh
+
+mount /boot -o remount,rw,noatime
+cp -f /lib/firmware/intel-ucode.img /boot/

Can we preserve the timestamp (-p) on the microcode file, too?

Will add in v2.



+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


“rm -f” so that if the uninstall fails it’s idempotent and doesn’t leave things 
in a weird state.

Good catch, had this locally but sent the wrong version.



+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)
+       $(CP) $(STAGING_DIR)/root-x86/lib/firmware/intel-ucode.img 
$(KDIR)/root.grub/boot/
+    endif


Do we need this?  Won’t the postinst happen during “make world”?

Yes it's needed, the package doesn't install files directly to /boot, and when executing postinst it'll naturally fail trying to mount host file system and stop the whole build process.

What can be changed is handling of this command, instead conditional, mark it as non-fatal.



        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


Ditto.
>
        mkisofs -R -b boot/grub/eltorito.img -no-emul-boot -boot-info-table \
                -o $(KDIR)/root.iso $(KDIR)/root.grub $(TARGET_DIR)
endef
--
2.16.3



_______________________________________________
Lede-dev mailing list
Lede-dev@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/lede-dev

Reply via email to