diff options
Diffstat (limited to 'target/linux/arc770/image')
-rw-r--r-- | target/linux/arc770/image/Config.in | 5 | ||||
-rw-r--r-- | target/linux/arc770/image/Makefile | 82 | ||||
-rwxr-xr-x | target/linux/arc770/image/gen_axs10x_sdcard_img.sh | 33 | ||||
-rw-r--r-- | target/linux/arc770/image/uEnv.txt | 7 |
4 files changed, 101 insertions, 26 deletions
diff --git a/target/linux/arc770/image/Config.in b/target/linux/arc770/image/Config.in new file mode 100644 index 0000000000..52f68ba241 --- /dev/null +++ b/target/linux/arc770/image/Config.in @@ -0,0 +1,5 @@ +config AXS10X_SD_BOOT_PARTSIZE + int "Boot (SD Card) filesystem partition size (in MB)" + depends on TARGET_arc770 + default 20 + diff --git a/target/linux/arc770/image/Makefile b/target/linux/arc770/image/Makefile index 79ce71e726..f5e43f5bc9 100644 --- a/target/linux/arc770/image/Makefile +++ b/target/linux/arc770/image/Makefile @@ -11,46 +11,76 @@ include $(INCLUDE_DIR)/image.mk # 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 $(LINUX_DIR)/vmlinux | grep "Entry point address" | grep -o 0x.*)) + $(eval KERNEL_ENTRY=$(shell $(KERNEL_CROSS)readelf -h $(1) | grep "Entry point address" | grep -o 0x.*)) endef -define Build/patch-dtb - $(call Image/BuildDTB,$(DTS_DIR)/$(DEVICE_DTS).dts,$@.dtb) - $(STAGING_DIR_HOST)/bin/patch-dtb $@ $@.dtb +define Build/build-dtb + $(call Image/BuildDTB,$(DTS_DIR)/$(DEVICE_DTS).dts,$(DTS_DIR)/$(DEVICE_DTS).dtb) endef -# Shared device definition: applies to every defined device -define Device/Default - PROFILES = Default $$(DEVICE_PROFILE) - KERNEL_DEPENDS = $$(wildcard ../dts/$$(DEVICE_DTS).dts) - DEVICE_PROFILE := +define Build/patch-dtb + $(STAGING_DIR_HOST)/bin/patch-dtb $@ $(DTS_DIR)/$(DEVICE_DTS).dtb endef -DEVICE_VARS += DEVICE_PROFILE +ifneq ($(CONFIG_TARGET_ROOTFS_INITRAMFS),) +# Root FS built-in define Device/vmlinux - KERNEL_SUFFIX := .elf - KERNEL_INITRAMFS := kernel-bin | patch-dtb - KERNEL_INITRAMFS_NAME = vmlinux-initramfs.elf -endef - -define Device/uImage - KERNEL_SUFFIX := -uImage - KERNEL_INITRAMFS := kernel-bin | patch-dtb | calculate-ep | uImage none - KERNEL_LOADADDR := 0x80000000 + KERNEL_SUFFIX := .elf + KERNEL := kernel-bin | build-dtb | patch-dtb + KERNEL_INITRAMFS_NAME = vmlinux-initramfs.elf endef -define Device/axs101 - $(call Device/uImage) - DEVICE_PROFILE := axs101 - DEVICE_DTS := axs101 -endef -TARGET_DEVICES += axs101 - 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)) diff --git a/target/linux/arc770/image/gen_axs10x_sdcard_img.sh b/target/linux/arc770/image/gen_axs10x_sdcard_img.sh new file mode 100755 index 0000000000..9a6f93d0d9 --- /dev/null +++ b/target/linux/arc770/image/gen_axs10x_sdcard_img.sh @@ -0,0 +1,33 @@ +#!/usr/bin/env bash + +# +# Copyright (C) 2016 OpenWrt.org +# +# This is free software, licensed under the GNU General Public License v2. +# See /LICENSE for more information. +# + +set -x +[ $# -eq 5 ] || { + echo "SYNTAX: $0 <file> <bootfs image> <rootfs image> <bootfs size> <rootfs size>" + exit 1 +} + +OUTPUT="$1" +BOOTFS="$2" +ROOTFS="$3" +BOOTFSSIZE="$4" +ROOTFSSIZE="$5" + +head=4 +sect=63 + +set `ptgen -o $OUTPUT -h $head -s $sect -l 1024 -t c -p ${BOOTFSSIZE}M -t 83 -p ${ROOTFSSIZE}M` + +BOOTOFFSET="$(($1 / 512))" +BOOTSIZE="$(($2 / 512))" +ROOTFSOFFSET="$(($3 / 512))" +ROOTFSSIZE="$(($4 / 512))" + +dd bs=512 if="$BOOTFS" of="$OUTPUT" seek="$BOOTOFFSET" conv=notrunc +dd bs=512 if="$ROOTFS" of="$OUTPUT" seek="$ROOTFSOFFSET" conv=notrunc diff --git a/target/linux/arc770/image/uEnv.txt b/target/linux/arc770/image/uEnv.txt new file mode 100644 index 0000000000..35549cb1c4 --- /dev/null +++ b/target/linux/arc770/image/uEnv.txt @@ -0,0 +1,7 @@ +setenv kernel_addr_r 0x82000000 +setenv fdt_addr_r 0x83000000 +setenv loadkernel fatload mmc 0 \$(kernel_addr_r) uImage +setenv loaddtb fatload mmc 0 \$(fdt_addr_r) \$(dts) +setenv bootargs earlycon=uart8250,mmio32,0xe0022000,115200n8 console=ttyS3,115200n8 root=/dev/mmcblk0p2 rootwait print-fatal-signals=1 +setenv uenvcmd run loadkernel\; run loaddtb\; bootm \$(kernel_addr_r) - \$(fdt_addr_r) +run uenvcmd |