Bladeren bron

initramfs: fix boot with dynamic /dev

Devtmpfs (which is used by devtmpfs/mdev/udev options) doesn't get
automounted by the kernel when an initramfs is used, causing boot
failures when a dynamic /dev is used.

Fix it by adding a pre-init script to mount devtmpfs before running init.

Reported-by: Arnout Vandecappelle <arnout@mind.be>
Signed-off-by: Peter Korsgaard <jacmet@sunsite.dk>
Peter Korsgaard 14 jaren geleden
bovenliggende
commit
424888e474
2 gewijzigde bestanden met toevoegingen van 19 en 2 verwijderingen
  1. 4 0
      fs/initramfs/init
  2. 15 2
      fs/initramfs/initramfs.mk

+ 4 - 0
fs/initramfs/init

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

+ 15 - 2
fs/initramfs/initramfs.mk

@@ -6,13 +6,26 @@
 #
 #
 #############################################################
 #############################################################
 
 
-define ROOTFS_INITRAMFS_INIT_SYMLINK
+ifeq ($(BR2_ROOTFS_DEVICE_CREATION_STATIC),y)
+
+define ROOTFS_INITRAMFS_ADD_INIT
 	if [ ! -e $(TARGET_DIR)/init ]; then \
 	if [ ! -e $(TARGET_DIR)/init ]; then \
 		ln -sf sbin/init $(TARGET_DIR)/init; \
 		ln -sf sbin/init $(TARGET_DIR)/init; \
 	fi
 	fi
 endef
 endef
 
 
-ROOTFS_INITRAMFS_PRE_GEN_HOOKS += ROOTFS_INITRAMFS_INIT_SYMLINK
+else
+# devtmpfs does not get automounted when initramfs is used.
+# Add a pre-init script to mount it before running init
+define ROOTFS_INITRAMFS_ADD_INIT
+	if [ ! -e $(TARGET_DIR)/init ]; then \
+		$(INSTALL) -m 0755 fs/initramfs/init $(TARGET_DIR)/init; \
+	fi
+endef
+
+endif # BR2_ROOTFS_DEVICE_CREATION_STATIC
+
+ROOTFS_INITRAMFS_PRE_GEN_HOOKS += ROOTFS_INITRAMFS_ADD_INIT
 
 
 define ROOTFS_INITRAMFS_CMD
 define ROOTFS_INITRAMFS_CMD
 	$(SHELL) fs/initramfs/gen_initramfs_list.sh -u 0 -g 0 $(TARGET_DIR) > $$@
 	$(SHELL) fs/initramfs/gen_initramfs_list.sh -u 0 -g 0 $(TARGET_DIR) > $$@