30d75720fa
Historically on ARC we started from initramfs-based images because: a) It was much easier to debug especially when toolchain and other components were changing quite dynamically b) It was our usual approach for embedded Linux But now with ARC port of Lede/OpenWRT getting more stable and mature we're ready for more real-life scenarios with FS permanently stored on SD-card. This essentially benefits from ability to setup devices that survive reboots with all settings and extra packages kept in place. Still we keep an ability to build images with initramfs. This allows us to use storage-less simulators for testing still. Signed-off-by: Alexey Brodkin <abrodkin@synopsys.com> Cc: John Crispin <john@phrozen.org> Cc: Jo-Philipp Wich <jo@mein.io>
87 lines
2.6 KiB
Makefile
87 lines
2.6 KiB
Makefile
#
|
|
# Copyright (C) 2016 OpenWrt.org
|
|
#
|
|
# This is free software, licensed under the GNU General Public License v2.
|
|
# See /LICENSE for more information.
|
|
#
|
|
include $(TOPDIR)/rules.mk
|
|
include $(INCLUDE_DIR)/image.mk
|
|
|
|
# On ARC initramfs is put before entry point and so entry point moves
|
|
# in memory from build to built. Thus we need to extract EP from vmlinux
|
|
# every time before generation of uImage.
|
|
define Build/calculate-ep
|
|
$(eval KERNEL_ENTRY=$(shell $(KERNEL_CROSS)readelf -h $(1) | grep "Entry point address" | grep -o 0x.*))
|
|
endef
|
|
|
|
define Build/build-dtb
|
|
$(call Image/BuildDTB,$(DTS_DIR)/$(DEVICE_DTS).dts,$(DTS_DIR)/$(DEVICE_DTS).dtb)
|
|
endef
|
|
|
|
define Build/patch-dtb
|
|
$(STAGING_DIR_HOST)/bin/patch-dtb $@ $(DTS_DIR)/$(DEVICE_DTS).dtb
|
|
endef
|
|
|
|
ifneq ($(CONFIG_TARGET_ROOTFS_INITRAMFS),)
|
|
# Root FS built-in
|
|
define Device/vmlinux
|
|
KERNEL_SUFFIX := .elf
|
|
KERNEL := kernel-bin | build-dtb | patch-dtb
|
|
KERNEL_INITRAMFS_NAME = vmlinux-initramfs.elf
|
|
endef
|
|
|
|
define Device/nsim
|
|
$(call Device/vmlinux)
|
|
DEVICE_PROFILE := nsim
|
|
DEVICE_DTS := nsim_700
|
|
endef
|
|
TARGET_DEVICES += nsim
|
|
endif
|
|
|
|
# Root FS on SD-card
|
|
KERNEL_LOADADDR := 0x80000000
|
|
DEVICE_DTS_LIST:= axs101
|
|
FAT32_BLOCK_SIZE=1024
|
|
FAT32_BLOCKS=$(shell echo $$(($(CONFIG_AXS10X_SD_BOOT_PARTSIZE)*1024*1024/$(FAT32_BLOCK_SIZE))))
|
|
|
|
define Image/Build/SDCard
|
|
rm -f $(KDIR_TMP)/$(IMG_PREFIX)-$(PROFILE)-boot.img
|
|
mkdosfs $(KDIR_TMP)/$(IMG_PREFIX)-$(PROFILE)-boot.img -C $(FAT32_BLOCKS)
|
|
mkimage -C none -A arc -T script -d uEnv.txt $(BIN_DIR)/uEnv.scr
|
|
mcopy -i $(KDIR_TMP)/$(IMG_PREFIX)-$(PROFILE)-boot.img $(BIN_DIR)/uEnv.scr ::boot.scr
|
|
mcopy -i $(KDIR_TMP)/$(IMG_PREFIX)-$(PROFILE)-boot.img $(DTS_DIR)/*.dtb ::
|
|
mcopy -i $(KDIR_TMP)/$(IMG_PREFIX)-$(PROFILE)-boot.img $(BIN_DIR)/$(IMG_PREFIX)-uImage ::uImage
|
|
|
|
./gen_axs10x_sdcard_img.sh \
|
|
$(BIN_DIR)/$(IMG_PREFIX)-$(PROFILE)-sdcard-vfat-$(1).img \
|
|
$(KDIR_TMP)/$(IMG_PREFIX)-$(PROFILE)-boot.img \
|
|
$(KDIR)/root.$(1) \
|
|
$(CONFIG_AXS10X_SD_BOOT_PARTSIZE) \
|
|
$(CONFIG_TARGET_ROOTFS_PARTSIZE)
|
|
|
|
ifneq ($(CONFIG_TARGET_IMAGES_GZIP),)
|
|
gzip -f9n $(BIN_DIR)/$(IMG_PREFIX)-$(PROFILE)-sdcard-vfat-$(1).img
|
|
endif
|
|
endef
|
|
|
|
define Image/BuildKernel
|
|
# Build unified uImage
|
|
$(call Build/calculate-ep, $(KDIR)/vmlinux.elf)
|
|
$(call Image/BuildKernel/MkuImage, \
|
|
none, $(KERNEL_LOADADDR), $(KERNEL_ENTRY), \
|
|
$(KDIR)/vmlinux, \
|
|
$(BIN_DIR)/$(IMG_PREFIX)-uImage \
|
|
)
|
|
|
|
# Build .dtb for all boards we may run on
|
|
$(foreach DEVICE_DTS,$(shell echo $(DEVICE_DTS_LIST)), $(call Build/build-dtb))
|
|
endef
|
|
|
|
define Image/Build
|
|
$(call Image/Build/$(1),$(1))
|
|
$(call Image/Build/SDCard,$(1))
|
|
dd if=$(KDIR)/root.$(1) of=$(BIN_DIR)/$(IMG_PREFIX)-root.$(1) bs=128k conv=sync
|
|
endef
|
|
|
|
$(eval $(call BuildImage))
|