Merge Offical Source

This commit is contained in:
CN_SZTL 2020-04-03 22:24:44 +08:00
commit 97be079408
No known key found for this signature in database
GPG Key ID: 6850B6345C862176
9 changed files with 190 additions and 80 deletions

View File

@ -88,6 +88,14 @@ prereq: $(target/stamp-prereq) tmp/.prereq_packages
exit 1; \ exit 1; \
fi fi
$(BIN_DIR)/profiles.json: FORCE
$(if $(CONFIG_JSON_OVERVIEW_IMAGE_INFO), \
WORK_DIR=$(BUILD_DIR)/json_info_files \
$(SCRIPT_DIR)/json_overview_image_info.py $@ \
)
json_overview_image_info: $(BIN_DIR)/profiles.json
checksum: FORCE checksum: FORCE
$(call sha256sums,$(BIN_DIR),$(CONFIG_BUILDBOT)) $(call sha256sums,$(BIN_DIR),$(CONFIG_BUILDBOT))
@ -109,6 +117,7 @@ prepare: .config $(tools/stamp-compile) $(toolchain/stamp-compile)
world: prepare $(target/stamp-compile) $(package/stamp-compile) $(package/stamp-install) $(target/stamp-install) FORCE world: prepare $(target/stamp-compile) $(package/stamp-compile) $(package/stamp-install) $(target/stamp-install) FORCE
$(_SINGLE)$(SUBMAKE) -r package/index $(_SINGLE)$(SUBMAKE) -r package/index
$(_SINGLE)$(SUBMAKE) -r json_overview_image_info
$(_SINGLE)$(SUBMAKE) -r checksum $(_SINGLE)$(SUBMAKE) -r checksum
.PHONY: clean dirclean prereq prepare world package/symlinks package/symlinks-install package/symlinks-clean .PHONY: clean dirclean prereq prepare world package/symlinks package/symlinks-install package/symlinks-clean

View File

@ -7,12 +7,13 @@
menu "Global build settings" menu "Global build settings"
config JSON_ADD_IMAGE_INFO config JSON_OVERVIEW_IMAGE_INFO
bool "Create JSON info files per build image" bool "Create JSON info file overview per target"
default BUILDBOT default BUILDBOT
help help
The JSON info files contain information about the device and Create a JSON info file called profiles.json in the target
build images, stored next to the firmware images. directory containing machine readable list of built profiles
and resulting images.
config ALL_NONSHARED config ALL_NONSHARED
bool "Select all target specific packages by default" bool "Select all target specific packages by default"

View File

@ -545,8 +545,11 @@ endef
define Device/Build/image define Device/Build/image
GZ_SUFFIX := $(if $(filter %dtb %gz,$(2)),,$(if $(and $(findstring ext4,$(1)),$(CONFIG_TARGET_IMAGES_GZIP)),.gz)) GZ_SUFFIX := $(if $(filter %dtb %gz,$(2)),,$(if $(and $(findstring ext4,$(1)),$(CONFIG_TARGET_IMAGES_GZIP)),.gz))
$$(_TARGET): $(BIN_DIR)/$(call IMAGE_NAME,$(1),$(2))$$(GZ_SUFFIX) $$(_TARGET): $(if $(CONFIG_JSON_OVERVIEW_IMAGE_INFO), \
$(BUILD_DIR)/json_info_files/$(call IMAGE_NAME,$(1),$(2)).json, \
$(BIN_DIR)/$(call IMAGE_NAME,$(1),$(2))$$(GZ_SUFFIX))
$(eval $(call Device/Export,$(KDIR)/tmp/$(call IMAGE_NAME,$(1),$(2)),$(1))) $(eval $(call Device/Export,$(KDIR)/tmp/$(call IMAGE_NAME,$(1),$(2)),$(1)))
ROOTFS/$(1)/$(3) := \ ROOTFS/$(1)/$(3) := \
$(KDIR)/root.$(1)$$(strip \ $(KDIR)/root.$(1)$$(strip \
$$(if $$(FS_OPTIONS/$(1)),+fs=$$(call param_mangle,$$(FS_OPTIONS/$(1)))) \ $$(if $$(FS_OPTIONS/$(1)),+fs=$$(call param_mangle,$$(FS_OPTIONS/$(1)))) \
@ -568,32 +571,33 @@ define Device/Build/image
$(BIN_DIR)/$(call IMAGE_NAME,$(1),$(2)): $(KDIR)/tmp/$(call IMAGE_NAME,$(1),$(2)) $(BIN_DIR)/$(call IMAGE_NAME,$(1),$(2)): $(KDIR)/tmp/$(call IMAGE_NAME,$(1),$(2))
cp $$^ $$@ cp $$^ $$@
$(if $(CONFIG_JSON_ADD_IMAGE_INFO), \
DEVICE_ID="$(DEVICE_NAME)" \ $(BUILD_DIR)/json_info_files/$(call IMAGE_NAME,$(1),$(2)).json: $(BIN_DIR)/$(call IMAGE_NAME,$(1),$(2))$$(GZ_SUFFIX)
BIN_DIR="$(BIN_DIR)" \ @mkdir -p $$(shell dirname $$@)
IMAGE_NAME="$(IMAGE_NAME)" \ DEVICE_ID="$(DEVICE_NAME)" \
IMAGE_TYPE=$(word 1,$(subst ., ,$(2))) \ BIN_DIR="$(BIN_DIR)" \
IMAGE_PREFIX="$(IMAGE_PREFIX)" \ IMAGE_NAME="$(IMAGE_NAME)" \
DEVICE_VENDOR="$(DEVICE_VENDOR)" \ IMAGE_TYPE=$(word 1,$(subst ., ,$(2))) \
DEVICE_MODEL="$(DEVICE_MODEL)" \ IMAGE_PREFIX="$(IMAGE_PREFIX)" \
DEVICE_VARIANT="$(DEVICE_VARIANT)" \ DEVICE_VENDOR="$(DEVICE_VENDOR)" \
DEVICE_ALT0_VENDOR="$(DEVICE_ALT0_VENDOR)" \ DEVICE_MODEL="$(DEVICE_MODEL)" \
DEVICE_ALT0_MODEL="$(DEVICE_ALT0_MODEL)" \ DEVICE_VARIANT="$(DEVICE_VARIANT)" \
DEVICE_ALT0_VARIANT="$(DEVICE_ALT0_VARIANT)" \ DEVICE_ALT0_VENDOR="$(DEVICE_ALT0_VENDOR)" \
DEVICE_ALT1_VENDOR="$(DEVICE_ALT1_VENDOR)" \ DEVICE_ALT0_MODEL="$(DEVICE_ALT0_MODEL)" \
DEVICE_ALT1_MODEL="$(DEVICE_ALT1_MODEL)" \ DEVICE_ALT0_VARIANT="$(DEVICE_ALT0_VARIANT)" \
DEVICE_ALT1_VARIANT="$(DEVICE_ALT1_VARIANT)" \ DEVICE_ALT1_VENDOR="$(DEVICE_ALT1_VENDOR)" \
DEVICE_ALT2_VENDOR="$(DEVICE_ALT2_VENDOR)" \ DEVICE_ALT1_MODEL="$(DEVICE_ALT1_MODEL)" \
DEVICE_ALT2_MODEL="$(DEVICE_ALT2_MODEL)" \ DEVICE_ALT1_VARIANT="$(DEVICE_ALT1_VARIANT)" \
DEVICE_ALT2_VARIANT="$(DEVICE_ALT2_VARIANT)" \ DEVICE_ALT2_VENDOR="$(DEVICE_ALT2_VENDOR)" \
DEVICE_TITLE="$(DEVICE_TITLE)" \ DEVICE_ALT2_MODEL="$(DEVICE_ALT2_MODEL)" \
TARGET="$(BOARD)" \ DEVICE_ALT2_VARIANT="$(DEVICE_ALT2_VARIANT)" \
SUBTARGET="$(if $(SUBTARGET),$(SUBTARGET),generic)" \ DEVICE_TITLE="$(DEVICE_TITLE)" \
VERSION_NUMBER="$(VERSION_NUMBER)" \ TARGET="$(BOARD)" \
VERSION_CODE="$(VERSION_CODE)" \ SUBTARGET="$(if $(SUBTARGET),$(SUBTARGET),generic)" \
SUPPORTED_DEVICES="$(SUPPORTED_DEVICES)" \ VERSION_NUMBER="$(VERSION_NUMBER)" \
$(TOPDIR)/scripts/json_add_image_info.py \ VERSION_CODE="$(VERSION_CODE)" \
) SUPPORTED_DEVICES="$(SUPPORTED_DEVICES)" \
$(TOPDIR)/scripts/json_add_image_info.py $$@
endef endef
@ -612,8 +616,6 @@ define Device/Build/artifact
endef endef
define Device/Build define Device/Build
$(shell rm -f $(BIN_DIR)/$(IMG_PREFIX)-$(1).json)
$(if $(CONFIG_TARGET_ROOTFS_INITRAMFS),$(call Device/Build/initramfs,$(1))) $(if $(CONFIG_TARGET_ROOTFS_INITRAMFS),$(call Device/Build/initramfs,$(1)))
$(call Device/Build/kernel,$(1)) $(call Device/Build/kernel,$(1))
@ -699,6 +701,7 @@ define BuildImage
image_prepare: compile image_prepare: compile
mkdir -p $(BIN_DIR) $(KDIR)/tmp mkdir -p $(BIN_DIR) $(KDIR)/tmp
rm -rf $(BUILD_DIR)/json_info_files
$(call Image/Prepare) $(call Image/Prepare)
legacy-images-prepare-make: image_prepare legacy-images-prepare-make: image_prepare

View File

@ -1144,3 +1144,38 @@ define KernelPackage/sfc/description
endef endef
$(eval $(call KernelPackage,sfc)) $(eval $(call KernelPackage,sfc))
define KernelPackage/mlx4-core
SUBMENU:=$(NETWORK_DEVICES_MENU)
TITLE:=Mellanox ConnectX(R) mlx4 core Network Driver
DEPENDS:=@PCI_SUPPORT +kmod-ptp
FILES:=$(LINUX_DIR)/drivers/net/ethernet/mellanox/mlx4/mlx4_core.ko
KCONFIG:= CONFIG_MLX4_EN \
CONFIG_MLX4_CORE=y \
CONFIG_MLX4_CORE_GEN2=y \
CONFIG_MLX4_DEBUG=n
AUTOLOAD:=$(call AutoProbe,mlx4_core)
endef
define KernelPackage/mlx4-core/description
Supports Mellanox ConnectX-3 series and previous cards
endef
$(eval $(call KernelPackage,mlx4-core))
define KernelPackage/mlx5-core
SUBMENU:=$(NETWORK_DEVICES_MENU)
TITLE:=Mellanox ConnectX(R) mlx5 core Network Driver
DEPENDS:=@PCI_SUPPORT +kmod-ptp
FILES:=$(LINUX_DIR)/drivers/net/ethernet/mellanox/mlx5/core/mlx5_core.ko
KCONFIG:= CONFIG_MLX5_CORE \
CONFIG_MLX5_CORE_EN=y \
CONFIG_MLX5_EN_RXNFC=y
AUTOLOAD:=$(call AutoProbe,mlx5_core)
endef
define KernelPackage/mlx5-core/description
Supports Mellanox Connect-IB/ConnectX-4 series and later cards
endef
$(eval $(call KernelPackage,mlx5-core))

View File

@ -1,18 +1,22 @@
#!/usr/bin/env python3 #!/usr/bin/env python3
import json from os import getenv
import os from pathlib import Path
from sys import argv
import hashlib import hashlib
import json
if len(argv) != 2:
print("ERROR: JSON info script requires output arg")
exit(1)
def e(variable, default=None): json_path = Path(argv[1])
return os.environ.get(variable, default) bin_dir = Path(getenv("BIN_DIR"))
image_file = bin_dir / getenv("IMAGE_NAME")
if not image_file.is_file():
json_path = "{}{}{}.json".format(e("BIN_DIR"), os.sep, e("IMAGE_PREFIX")) print("Skip JSON creation for non existing image ", image_file)
exit(0)
with open(os.path.join(e("BIN_DIR"), e("IMAGE_NAME")), "rb") as image_file:
image_hash = hashlib.sha256(image_file.read()).hexdigest()
def get_titles(): def get_titles():
@ -20,36 +24,40 @@ def get_titles():
for prefix in ["", "ALT0_", "ALT1_", "ALT2_"]: for prefix in ["", "ALT0_", "ALT1_", "ALT2_"]:
title = {} title = {}
for var in ["vendor", "model", "variant"]: for var in ["vendor", "model", "variant"]:
if e("DEVICE_{}{}".format(prefix, var.upper())): if getenv("DEVICE_{}{}".format(prefix, var.upper())):
title[var] = e("DEVICE_{}{}".format(prefix, var.upper())) title[var] = getenv("DEVICE_{}{}".format(prefix, var.upper()))
if title: if title:
titles.append(title) titles.append(title)
if not titles: if not titles:
titles.append({"title": e("DEVICE_TITLE")}) titles.append({"title": getenv("DEVICE_TITLE")})
return titles return titles
if not os.path.exists(json_path): device_id = getenv("DEVICE_ID")
device_info = { image_hash = hashlib.sha256(image_file.read_bytes()).hexdigest()
"id": e("DEVICE_ID"),
"image_prefix": e("IMAGE_PREFIX"),
"images": [],
"metadata_version": 1,
"supported_devices": e("SUPPORTED_DEVICES").split(),
"target": "{}/{}".format(e("TARGET"), e("SUBTARGET", "generic")),
"titles": get_titles(),
"version_commit": e("VERSION_CODE"),
"version_number": e("VERSION_NUMBER"),
}
else:
with open(json_path, "r") as json_file:
device_info = json.load(json_file)
image_info = {"type": e("IMAGE_TYPE"), "name": e("IMAGE_NAME"), "sha256": image_hash} image_info = {
device_info["images"].append(image_info) "metadata_version": 1,
"target": "{}/{}".format(getenv("TARGET"), getenv("SUBTARGET")),
"version_code": getenv("VERSION_CODE"),
"version_number": getenv("VERSION_NUMBER"),
"profiles": {
device_id: {
"image_prefix": getenv("IMAGE_PREFIX"),
"images": [
{
"type": getenv("IMAGE_TYPE"),
"name": getenv("IMAGE_NAME"),
"sha256": image_hash,
}
],
"supported_devices": getenv("SUPPORTED_DEVICES").split(),
"titles": get_titles(),
}
},
}
with open(json_path, "w") as json_file: json_path.write_text(json.dumps(image_info, separators=(",", ":")))
json.dump(device_info, json_file, sort_keys=True, indent=" ")

View File

@ -0,0 +1,39 @@
#!/usr/bin/env python3
import json
from pathlib import Path
from os import getenv
from sys import argv
if len(argv) != 2:
print("JSON info files script requires ouput file as argument")
exit(1)
output_path = Path(argv[1])
assert getenv("WORK_DIR"), "$WORK_DIR required"
work_dir = Path(getenv("WORK_DIR"))
assert work_dir.is_dir(), "$WORK_DIR not a directory"
output = {}
for json_file in work_dir.glob("*.json"):
image_info = json.loads(json_file.read_text())
if not output:
output.update(image_info)
else:
# get first (and only) profile in json file
device_id = next(iter(image_info["profiles"].keys()))
if device_id not in output["profiles"]:
output["profiles"].update(image_info["profiles"])
else:
output["profiles"][device_id]["images"].append(
image_info["profiles"][device_id]["images"][0]
)
if output:
output_path.write_text(json.dumps(output, sort_keys=True, separators=(",", ":")))
else:
print("JSON info file script could not find any JSON files for target")

View File

@ -118,6 +118,7 @@ _call_image: staging_dir/host/.prereq-build
$(MAKE) package_install $(MAKE) package_install
$(MAKE) -s prepare_rootfs $(MAKE) -s prepare_rootfs
$(MAKE) -s build_image $(MAKE) -s build_image
$(MAKE) -s json_overview_image_info
$(MAKE) -s checksum $(MAKE) -s checksum
_call_manifest: FORCE _call_manifest: FORCE
@ -163,12 +164,21 @@ prepare_rootfs: FORCE
$(CP) $(TARGET_DIR) $(TARGET_DIR_ORIG) $(CP) $(TARGET_DIR) $(TARGET_DIR_ORIG)
$(call prepare_rootfs,$(TARGET_DIR),$(USER_FILES),$(DISABLED_SERVICES)) $(call prepare_rootfs,$(TARGET_DIR),$(USER_FILES),$(DISABLED_SERVICES))
build_image: FORCE build_image: FORCE
@echo @echo
@echo Building images... @echo Building images...
$(NO_TRACE_MAKE) -C target/linux/$(BOARD)/image install TARGET_BUILD=1 IB=1 EXTRA_IMAGE_NAME="$(EXTRA_IMAGE_NAME)" \ $(NO_TRACE_MAKE) -C target/linux/$(BOARD)/image install TARGET_BUILD=1 IB=1 EXTRA_IMAGE_NAME="$(EXTRA_IMAGE_NAME)" \
$(if $(USER_PROFILE),PROFILE="$(USER_PROFILE)") $(if $(USER_PROFILE),PROFILE="$(USER_PROFILE)")
$(BIN_DIR)/profiles.json: FORCE
$(if $(CONFIG_JSON_OVERVIEW_IMAGE_INFO), \
WORK_DIR=$(BUILD_DIR)/json_info_files \
$(SCRIPT_DIR)/json_overview_image_info.py $@ \
)
json_overview_image_info: $(BIN_DIR)/profiles.json
checksum: FORCE checksum: FORCE
@echo @echo
@echo Calculating checksums... @echo Calculating checksums...

View File

@ -1,4 +1,4 @@
echo "Gateworks Ventana OpenWrt Boot script v1.01" echo "Gateworks Ventana OpenWrt Boot script v1.02"
# set some defaults # set some defaults
# set some defaults # set some defaults
@ -9,7 +9,7 @@ setenv bootargs console=${console},${baudrate}
setenv loadaddr 10800000 setenv loadaddr 10800000
setenv fdt_addr 18000000 setenv fdt_addr 18000000
# detect dtype and bootdev by looking for kernel on media the bootloader # detect dtype by looking for kernel on media the bootloader
# has mounted (in order of preference: usb/mmc/sata) # has mounted (in order of preference: usb/mmc/sata)
# #
# This assumes the bootloader has already started the respective subsystem # This assumes the bootloader has already started the respective subsystem
@ -31,18 +31,9 @@ else
fi fi
echo "detected dtype:$dtype" echo "detected dtype:$dtype"
fi fi
if test -n "$bootdev" ; then
echo "Using bootdev from env: $bootdev"
else
if itest.s "x${dtype}" == "xmmc" ; then
bootdev=mmcblk0p1
else
bootdev=sda1
fi
fi
echo "Booting from ${dtype}..."
if itest.s "x${dtype}" == "xnand" ; then if itest.s "x${dtype}" == "xnand" ; then
echo "Booting from NAND..."
# fix partition name # fix partition name
# OpenWrt kernel bug prevents partition name of 'rootfs' from booting # OpenWrt kernel bug prevents partition name of 'rootfs' from booting
# instead name the partition ubi which is what is looked for by # instead name the partition ubi which is what is looked for by
@ -52,9 +43,24 @@ if itest.s "x${dtype}" == "xnand" ; then
setenv fsload ubifsload setenv fsload ubifsload
setenv root "ubi0:ubi ubi.mtd=2 rootfstype=squashfs,ubifs" setenv root "ubi0:ubi ubi.mtd=2 rootfstype=squashfs,ubifs"
else else
echo "Booting from block device ${bootdev}..."
setenv fsload "${fs}load ${dtype} ${disk}:1" setenv fsload "${fs}load ${dtype} ${disk}:1"
setenv root "root=/dev/${bootdev} rootfstype=${fs} rootwait rw" part uuid ${dtype} ${disk}:1 uuid
if test -z "${uuid}"; then
# fallback to bootdev
if test -n "$bootdev" ; then
echo "Using bootdev from env: $bootdev"
else
if itest.s "x${dtype}" == "xmmc" ; then
bootdev=mmcblk0p1
else
bootdev=sda1
fi
fi
setenv root "root=/dev/${bootdev}"
else
setenv root "root=PARTUUID=${uuid}"
fi
setenv root "$root rootfstype=${fs} rootwait rw"
fi fi
setenv bootargs "${bootargs}" "${root}" "${video}" "${extra}" setenv bootargs "${bootargs}" "${root}" "${video}" "${extra}"

View File

@ -11,8 +11,7 @@ BOARD:=octeontx
BOARDNAME:=Octeon-TX BOARDNAME:=Octeon-TX
FEATURES:=targz pcie gpio rtc usb fpu FEATURES:=targz pcie gpio rtc usb fpu
KERNEL_PATCHVER:=4.14 KERNEL_PATCHVER:=5.4
KERNEL_TESTING_PATCHVER:=5.4
define Target/Description define Target/Description
Build images for Octeon-TX CN80XX/CN81XX based boards Build images for Octeon-TX CN80XX/CN81XX based boards