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:
committed by
John Crispin
parent
7abf9eda8a
commit
df4f41261c
5
target/linux/archs38/image/Config.in
Normal file
5
target/linux/archs38/image/Config.in
Normal 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
|
||||
|
||||
@@ -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.*))
|
||||
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/axs103
|
||||
$(call Device/uImage)
|
||||
DEVICE_PROFILE := axs103
|
||||
DEVICE_DTS := axs103_idu
|
||||
endef
|
||||
TARGET_DEVICES += axs103
|
||||
|
||||
define Device/nsim_hs
|
||||
$(call Device/vmlinux)
|
||||
DEVICE_PROFILE := nsim_hs
|
||||
DEVICE_DTS := nsim_hs_idu
|
||||
endef
|
||||
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))
|
||||
|
||||
33
target/linux/archs38/image/gen_axs10x_sdcard_img.sh
Executable file
33
target/linux/archs38/image/gen_axs10x_sdcard_img.sh
Executable 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
|
||||
7
target/linux/archs38/image/uEnv.txt
Normal file
7
target/linux/archs38/image/uEnv.txt
Normal 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
|
||||
Reference in New Issue
Block a user