summaryrefslogtreecommitdiff
path: root/fs/cpio
diff options
context:
space:
mode:
authorArnout Vandecappelle (Essensium/Mind) <arnout@mind.be>2011-09-06 23:16:08 +0200
committerPeter Korsgaard <jacmet@sunsite.dk>2011-09-27 22:36:26 +0200
commit3fac21ef8d794b47f731003b399e704349c54346 (patch)
treeaf2e10c1908c9241f89defd522eeb4767980aa00 /fs/cpio
parent0a775837fb869ff6ac0996a08b8a3c9ead8fdbf0 (diff)
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>
Diffstat (limited to 'fs/cpio')
-rw-r--r--fs/cpio/cpio.mk24
-rwxr-xr-xfs/cpio/init7
2 files changed, 26 insertions, 5 deletions
diff --git a/fs/cpio/cpio.mk b/fs/cpio/cpio.mk
index ab7d54618..aa20b4107 100644
--- a/fs/cpio/cpio.mk
+++ b/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
-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
cd $(TARGET_DIR) && find . | cpio --quiet -o -H newc > $$@
endef
-$(eval $(call ROOTFS_TARGET,cpio)) \ No newline at end of file
+$(eval $(call ROOTFS_TARGET,cpio))
diff --git a/fs/cpio/init b/fs/cpio/init
new file mode 100755
index 000000000..a27548217
--- /dev/null
+++ b/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 $*