diff --git a/target/linux/arc770/generic/profiles/01-minimal.mk b/target/linux/arc770/generic/profiles/01-minimal.mk deleted file mode 100644 index c8968daecd..0000000000 --- a/target/linux/arc770/generic/profiles/01-minimal.mk +++ /dev/null @@ -1,15 +0,0 @@ -# -# Copyright (C) 2015 OpenWrt.org -# -# This is free software, licensed under the GNU General Public License v2. -# See /LICENSE for more information. -# - -define Profile/Minimal - NAME:=Minimal Profile (no drivers) -endef - -define Profile/Minimal/Description - Minimal package set compatible with most boards. -endef -$(eval $(call Profile,Minimal)) diff --git a/target/linux/arc770/generic/profiles/02-axs101.mk b/target/linux/arc770/generic/profiles/02-axs101.mk deleted file mode 100644 index 3fb652612a..0000000000 --- a/target/linux/arc770/generic/profiles/02-axs101.mk +++ /dev/null @@ -1,16 +0,0 @@ -# -# Copyright (C) 2015 OpenWrt.org -# -# This is free software, licensed under the GNU General Public License v2. -# See /LICENSE for more information. -# - -define Profile/axs101 - NAME:=Synopsys DesignWare AXS101 - PACKAGES:= kmod-usb-core kmod-usb-ohci kmod-usb2 kmod-ath9k-htc wpad-mini -endef - -define Profile/axs101/Description - Package set compatible with hardware using Synopsys DesignWare AXS101 boards. -endef -$(eval $(call Profile,axs101)) diff --git a/target/linux/arc770/generic/profiles/03-nsim_700.mk b/target/linux/arc770/generic/profiles/03-nsim_700.mk deleted file mode 100644 index 843a3424b5..0000000000 --- a/target/linux/arc770/generic/profiles/03-nsim_700.mk +++ /dev/null @@ -1,15 +0,0 @@ -# -# Copyright (C) 2015 OpenWrt.org -# -# This is free software, licensed under the GNU General Public License v2. -# See /LICENSE for more information. -# - -define Profile/nsim_700 - NAME:=Synopsys nSIM -endef - -define Profile/nsim_700/Description - Package set compatible with hardware using Synopsys nSIM 700 boards. -endef -$(eval $(call Profile,nsim_700)) diff --git a/target/linux/arc770/generic/target.mk b/target/linux/arc770/generic/target.mk index eba5c3c7e8..15f598ee16 100644 --- a/target/linux/arc770/generic/target.mk +++ b/target/linux/arc770/generic/target.mk @@ -1,5 +1,5 @@ BOARDNAME:=Generic -FEATURES += ramdisk usb +FEATURES += ramdisk usb ext4 define Target/Description Build firmware images for generic ARC 770D based boards. 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/build-dtb + $(call Image/BuildDTB,$(DTS_DIR)/$(DEVICE_DTS).dts,$(DTS_DIR)/$(DEVICE_DTS).dtb) endef define Build/patch-dtb - $(call Image/BuildDTB,$(DTS_DIR)/$(DEVICE_DTS).dts,$@.dtb) - $(STAGING_DIR_HOST)/bin/patch-dtb $@ $@.dtb + $(STAGING_DIR_HOST)/bin/patch-dtb $@ $(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 := -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 + KERNEL_SUFFIX := .elf + KERNEL := kernel-bin | build-dtb | 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 -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 " + 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