2
1
Эх сурвалжийг харах

cpio: fix boot with dynamic /dev

Devtmpfs doesn't get automounted by the kernel when an initramfs is used.
Since cpio archives are used almost exclusively as an initramfs, the same
fix should be applied to it as for the initramfs.

Cfr. commit 424888e47431db738f5f9b3c6392435bfce7a842 and
10a130f91e5b947e2d2558443ff09b1686eac273.

Signed-off-by: Arnout Vandecappelle (Essensium/Mind) <arnout@mind.be>
Signed-off-by: Peter Korsgaard <jacmet@sunsite.dk>
Arnout Vandecappelle (Essensium/Mind) 14 жил өмнө
parent
commit
3fac21ef8d
2 өөрчлөгдсөн 26 нэмэгдсэн , 5 устгасан
  1. 19 5
      fs/cpio/cpio.mk
  2. 7 0
      fs/cpio/init

+ 19 - 5
fs/cpio/cpio.mk

@@ -4,15 +4,29 @@
 #
 #
 #############################################################
 #############################################################
 
 
-define ROOTFS_CPIO_INIT_SYMLINK
-	rm -f $(TARGET_DIR)/init
-	ln -s sbin/init $(TARGET_DIR)/init
+ifeq ($(BR2_ROOTFS_DEVICE_CREATION_STATIC),y)
+
+define ROOTFS_CPIO_ADD_INIT
+        if [ ! -e $(TARGET_DIR)/init ]; then \
+                ln -sf sbin/init $(TARGET_DIR)/init; \
+        fi
+endef
+
+else
+# devtmpfs does not get automounted when initramfs is used.
+# Add a pre-init script to mount it before running init
+define ROOTFS_CPIO_ADD_INIT
+        if [ ! -e $(TARGET_DIR)/init ]; then \
+                $(INSTALL) -m 0755 fs/cpio/init $(TARGET_DIR)/init; \
+        fi
 endef
 endef
 
 
-ROOTFS_CPIO_PRE_GEN_HOOKS += ROOTFS_CPIO_INIT_SYMLINK
+endif # BR2_ROOTFS_DEVICE_CREATION_STATIC
+
+ROOTFS_CPIO_PRE_GEN_HOOKS += ROOTFS_CPIO_ADD_INIT
 
 
 define ROOTFS_CPIO_CMD
 define ROOTFS_CPIO_CMD
 	cd $(TARGET_DIR) && find . | cpio --quiet -o -H newc > $$@
 	cd $(TARGET_DIR) && find . | cpio --quiet -o -H newc > $$@
 endef
 endef
 
 
-$(eval $(call ROOTFS_TARGET,cpio))
+$(eval $(call ROOTFS_TARGET,cpio))

+ 7 - 0
fs/cpio/init

@@ -0,0 +1,7 @@
+#!/bin/sh
+# devtmpfs does not get automounted for initramfs
+/bin/mount -t devtmpfs devtmpfs /dev
+exec 0</dev/console
+exec 1>/dev/console
+exec 2>/dev/console
+exec /sbin/init $*