archs38: Introduce images for SD-cards

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>
This commit is contained in:
Alexey Brodkin 2016-08-16 14:49:20 +03:00 committed by John Crispin
parent 7abf9eda8a
commit df4f41261c
13 changed files with 133 additions and 81 deletions

View file

@ -11,7 +11,7 @@ CPU_TYPE:=archs
BOARD:=archs38 BOARD:=archs38
BOARDNAME:=Synopsys DesignWare ARC HS38 BOARDNAME:=Synopsys DesignWare ARC HS38
MAINTAINER:=Alexey Brodkin <abrodkin@synopsys.com> MAINTAINER:=Alexey Brodkin <abrodkin@synopsys.com>
SUBTARGETS:=generic SUBTARGETS:=sd ramdisk
KERNEL_PATCHVER:=4.4 KERNEL_PATCHVER:=4.4

View file

@ -1,15 +0,0 @@
#
# Copyright (C) 2016 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))

View file

@ -1,16 +0,0 @@
#
# Copyright (C) 2016 OpenWrt.org
#
# This is free software, licensed under the GNU General Public License v2.
# See /LICENSE for more information.
#
define Profile/axs103
NAME:=Synopsys DesignWare AXS103
PACKAGES:= kmod-usb-core kmod-usb-ohci kmod-ath9k-htc wpad-mini
endef
define Profile/axs103/Description
Package set compatible with hardware using Synopsys DesignWare AXS103 boards.
endef
$(eval $(call Profile,axs103))

View file

@ -1,15 +0,0 @@
#
# Copyright (C) 2016 OpenWrt.org
#
# This is free software, licensed under the GNU General Public License v2.
# See /LICENSE for more information.
#
define Profile/nsim_hs
NAME:=Synopsys nSIM
endef
define Profile/nsim_hs/Description
Package set compatible with hardware using Synopsys nSIM HS boards.
endef
$(eval $(call Profile,nsim_hs))

View file

@ -1,8 +0,0 @@
BOARDNAME:=Generic
FEATURES += ramdisk usb
define Target/Description
Build firmware images for generic ARC HS38 based boards.
endef

View file

@ -0,0 +1,5 @@
config AXS10X_SD_BOOT_PARTSIZE
int "Boot (SD Card) filesystem partition size (in MB)"
depends on TARGET_archs38
default 20

View file

@ -14,43 +14,73 @@ 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 $(LINUX_DIR)/vmlinux | grep "Entry point address" | grep -o 0x.*))
endef endef
define Build/build-dtb
$(call Image/BuildDTB,$(DTS_DIR)/$(DEVICE_DTS).dts,$(DTS_DIR)/$(DEVICE_DTS).dtb)
endef
define Build/patch-dtb define Build/patch-dtb
$(call Image/BuildDTB,$(DTS_DIR)/$(DEVICE_DTS).dts,$@.dtb) $(STAGING_DIR_HOST)/bin/patch-dtb $@ $(DTS_DIR)/$(DEVICE_DTS).dtb
$(STAGING_DIR_HOST)/bin/patch-dtb $@ $@.dtb
endef endef
# Shared device definition: applies to every defined device ifneq ($(CONFIG_TARGET_ROOTFS_INITRAMFS),)
define Device/Default # Root FS built-in
PROFILES = Default $$(DEVICE_PROFILE)
KERNEL_DEPENDS = $$(wildcard ../dts/$$(DEVICE_DTS).dts)
DEVICE_PROFILE :=
endef
DEVICE_VARS += DEVICE_PROFILE
define Device/vmlinux define Device/vmlinux
KERNEL_SUFFIX := .elf KERNEL_SUFFIX := .elf
KERNEL_INITRAMFS := kernel-bin | patch-dtb KERNEL := kernel-bin | build-dtb | patch-dtb
KERNEL_INITRAMFS_NAME = vmlinux-initramfs.elf KERNEL_INITRAMFS_NAME = vmlinux-initramfs.elf
endef endef
define Device/uImage
KERNEL_SUFFIX := -uImage
KERNEL_INITRAMFS := kernel-bin | patch-dtb | calculate-ep | uImage none
KERNEL_LOADADDR := 0x80000000
endef
define Device/axs103
$(call Device/uImage)
DEVICE_PROFILE := axs103
DEVICE_DTS := axs103_idu
endef
TARGET_DEVICES += axs103
define Device/nsim_hs define Device/nsim_hs
$(call Device/vmlinux) $(call Device/vmlinux)
DEVICE_PROFILE := nsim_hs DEVICE_PROFILE := nsim_hs
DEVICE_DTS := nsim_hs_idu DEVICE_DTS := nsim_hs_idu
endef endef
TARGET_DEVICES += nsim_hs TARGET_DEVICES += nsim_hs
else
# Root FS on SD-card
KERNEL_LOADADDR := 0x80000000
DEVICE_DTS_LIST:= axs103_idu
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)
$(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
endif
$(eval $(call BuildImage)) $(eval $(call BuildImage))

View file

@ -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

View file

@ -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

View file

@ -0,0 +1,15 @@
#
# Copyright (C) 2016 OpenWrt.org
#
# This is free software, licensed under the GNU General Public License v2.
# See /LICENSE for more information.
#
define Profile/Default
NAME:=Default Profile (all drivers)
endef
define Profile/Default/Description
Default package set compatible with most boards.
endef
$(eval $(call Profile,Default))

View file

@ -0,0 +1,8 @@
BOARDNAME:=Ramdisk
FEATURES += ramdisk
define Target/Description
Build firmware images for generic ARC HS38 based boards that use built-in initramfs
endef

View file

@ -0,0 +1,8 @@
BOARDNAME:=SD
FEATURES += ext4 usb
define Target/Description
Build firmware images for ARC HS38 based boards that use SD-card for booting.
endef