cpio.mk 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109
  1. ################################################################################
  2. #
  3. # cpio to archive target filesystem
  4. #
  5. ################################################################################
  6. ifeq ($(BR2_ROOTFS_DEVICE_CREATION_STATIC),y)
  7. define ROOTFS_CPIO_ADD_INIT
  8. if [ ! -e $(TARGET_DIR)/init ]; then \
  9. ln -sf sbin/init $(TARGET_DIR)/init; \
  10. fi
  11. endef
  12. else
  13. # devtmpfs does not get automounted when initramfs is used.
  14. # Add a pre-init script to mount it before running init
  15. # We must have /dev/console very early, even before /init runs,
  16. # for stdin/stdout/stderr
  17. define ROOTFS_CPIO_ADD_INIT
  18. if [ ! -e $(TARGET_DIR)/init ]; then \
  19. $(INSTALL) -m 0755 fs/cpio/init $(TARGET_DIR)/init; \
  20. fi
  21. mkdir -p $(TARGET_DIR)/dev
  22. mknod -m 0622 $(TARGET_DIR)/dev/console c 5 1
  23. endef
  24. endif # BR2_ROOTFS_DEVICE_CREATION_STATIC
  25. ROOTFS_CPIO_PRE_GEN_HOOKS += ROOTFS_CPIO_ADD_INIT
  26. # --reproducible option was introduced in cpio v2.12, which may not be
  27. # available in some old distributions, so we build host-cpio
  28. ifeq ($(BR2_REPRODUCIBLE),y)
  29. ROOTFS_CPIO_DEPENDENCIES += host-cpio
  30. ROOTFS_CPIO_OPTS += --reproducible
  31. endif
  32. ifeq ($(BR2_TARGET_ROOTFS_CPIO_FULL),y)
  33. define ROOTFS_CPIO_CMD
  34. cd $(TARGET_DIR) && \
  35. find . \
  36. | LC_ALL=C sort \
  37. | cpio $(ROOTFS_CPIO_OPTS) --quiet -o -H newc \
  38. > $@
  39. endef
  40. else ifeq ($(BR2_TARGET_ROOTFS_CPIO_DRACUT),y)
  41. ROOTFS_CPIO_DEPENDENCIES += host-dracut
  42. ROOTFS_CPIO_DRACUT_MODULES = $(call qstrip,$(BR2_TARGET_ROOTFS_CPIO_DRACUT_MODULES))
  43. ifeq ($(BR_BUILDING),y)
  44. ifneq ($(words $(ROOTFS_CPIO_DRACUT_MODULES)),$(words $(sort $(notdir $(ROOTFS_CPIO_DRACUT_MODULES)))))
  45. $(error No two dracut modules can have the same basename, check your BR2_TARGET_ROOTFS_CPIO_DRACUT_MODULES setting)
  46. endif
  47. endif
  48. ROOTFS_CPIO_DRACUT_CONF_FILES = $(call qstrip,$(BR2_TARGET_ROOTFS_CPIO_DRACUT_CONF_FILES))
  49. ifeq ($(BR_BUILDING),y)
  50. ifeq ($(ROOTFS_CPIO_DRACUT_CONF_FILES),)
  51. $(error No dracut config file name specified, check your BR2_TARGET_ROOTFS_CPIO_DRACUT_CONF_FILES setting)
  52. endif
  53. ifneq ($(words $(ROOTFS_CPIO_DRACUT_CONF_FILES)),$(words $(sort $(notdir $(ROOTFS_CPIO_DRACUT_CONF_FILES)))))
  54. $(error No two dracut config files can have the same basename, check your BR2_TARGET_ROOTFS_CPIO_DRACUT_CONF_FILES setting)
  55. endif
  56. endif
  57. ifeq ($(BR2_LINUX_KERNEL),y)
  58. ROOTFS_CPIO_DEPENDENCIES += linux
  59. ROOTFS_CPIO_OPTS += --kver $(LINUX_VERSION_PROBED)
  60. else
  61. ROOTFS_CPIO_OPTS += --no-kernel
  62. endif
  63. define ROOTFS_CPIO_CMD
  64. mkdir -p $(ROOTFS_CPIO_DIR)/tmp $(ROOTFS_CPIO_DIR)/confdir $(HOST_DIR)/lib/dracut/modules.d
  65. touch $(ROOTFS_CPIO_DIR)/empty-config
  66. $(foreach cfg,$(ROOTFS_CPIO_DRACUT_CONF_FILES), \
  67. cp $(cfg) $(ROOTFS_CPIO_DIR)/confdir/$(notdir $(cfg))
  68. )
  69. $(foreach m,$(ROOTFS_CPIO_DRACUT_MODULES), \
  70. cp -a $(m)/* $(HOST_DIR)/lib/dracut/modules.d/
  71. )
  72. $(HOST_DIR)/bin/dracut \
  73. $(ROOTFS_CPIO_OPTS) \
  74. -c $(ROOTFS_CPIO_DIR)/empty-config \
  75. --confdir $(ROOTFS_CPIO_DIR)/confdir \
  76. --sysroot $(TARGET_DIR) \
  77. --tmpdir $(ROOTFS_CPIO_DIR)/tmp \
  78. -M \
  79. --force \
  80. --no-compress \
  81. $@
  82. endef
  83. endif #BR2_TARGET_ROOTFS_CPIO_DRACUT
  84. ifeq ($(BR2_TARGET_ROOTFS_CPIO_UIMAGE),y)
  85. ROOTFS_CPIO_DEPENDENCIES += host-uboot-tools
  86. define ROOTFS_CPIO_UBOOT_MKIMAGE
  87. $(MKIMAGE) -A $(MKIMAGE_ARCH) -T ramdisk \
  88. -C none -d $@$(ROOTFS_CPIO_COMPRESS_EXT) $@.uboot
  89. endef
  90. ROOTFS_CPIO_POST_GEN_HOOKS += ROOTFS_CPIO_UBOOT_MKIMAGE
  91. endif
  92. $(eval $(rootfs))