> -----Original Message----- > From: Paul Spooren [mailto:m...@aparcar.org] > Sent: Mittwoch, 8. Juli 2020 21:34 > To: Rafał Miłecki <zaj...@gmail.com>; openwrt-devel@lists.openwrt.org > Cc: Rafał Miłecki <ra...@milecki.pl>; Adrian Schmutzler > <freif...@adrianschmutzler.de>; Petr Štetiar <yn...@true.cz>; Moritz > Warning <moritzwarn...@web.de>; Daniel Golle <dan...@makrotopia.org> > Subject: Re: [PATCH] build: put DT "compatible" value as "board_name" in > profiles.json > > TL;DR: I think the issue is solved for devices using DT, the problem are the > other targets with custom solutions. > > I think there is a policy for new DT devices to use the compatible string as > profile. > > Multiple targets contain the following line in the target Makefile, which > automatically adds the profile name as supported device: > > SUPPORTED_DEVICES := $(subst _,$(comma),$(1)) > > So ideally for all devices using DT, the profile and compatible string are the > same except for '_' replaced by ','. > > For instance, the "Linksys WRT3200ACM" has the profile ID > `linksys_wrt3200acm` and the automatically added compatible string > `linksys,wrt3200acm`. So if that device wanted to search the > `mvebu/cortexa9/profiles.json` for available sysupgrades, it takes the first > entry from /proc/device-tree/compatible, replaces ',' with '_' > find images in profiles.json['profiles']['linksys_wrt3200acm']['images']. > > For cases where DT compatible and OpenWrt profile ID/name where > different either one was patched[0]. > > I think the question is therefore more on how to deal with devices that do > not use DT? If we use a per device rootfs a line could be added to /etc/os- > release containing something like OPENWRT_PROFILE="SpEcIaL-CaSEv100", > which is then shown via `ubus call system borad`.
Well, one could just use something like this, which we had before the compatible was used: https://github.com/openwrt/openwrt/blob/openwrt-19.07/target/linux/ramips/base-files/lib/ramips.sh There, one could just use the "profile names" instead, with "_" replaced by "," for the few non-DT targets. However, this assumes a 1-to-1 relation between boards and profiles, and I'm not sure whether that always exists. And somebody would have to create that by hand. But I somehow lost track what's the ultimate goal of the proposed changes here, so maybe I'm not going into the right direction with this. Best Adrian > > Another hack could be to add it to /proc/cmdline? > > [0]: > https://github.com/openwrt/openwrt/commit/df6f3090c48e3bafa0ace7450 > 488b0a20a8074fb > > On 08.07.20 05:09, Rafał Miłecki wrote: > > From: Rafał Miłecki <ra...@milecki.pl> > > > > The purpose of "board_name" in JSON is matchine OpenWrt running > device > > with JSON profile entry. Right now it gets filled for devices using DT. > > Other targets will require custom solutions or just speciyfing that > > value manually. > > > > Signed-off-by: Rafał Miłecki <ra...@milecki.pl> > > --- > > include/image.mk | 3 +++ > > scripts/json_add_image_info.py | 19 +++++++++++++++++++ > > 2 files changed, 22 insertions(+) > > > > diff --git a/include/image.mk b/include/image.mk index > > 15f4fe9d3b..b33c1032f8 100644 > > --- a/include/image.mk > > +++ b/include/image.mk > > @@ -532,10 +532,13 @@ define Device/Build/image > > @mkdir -p $$(shell dirname $$@) > > DEVICE_ID="$(DEVICE_NAME)" \ > > BIN_DIR="$(BIN_DIR)" \ > > + LINUX_DIR="$(LINUX_DIR)" \ > > + KDIR="$(KDIR)" \ > > IMAGE_NAME="$(IMAGE_NAME)" \ > > IMAGE_TYPE=$(word 1,$(subst ., ,$(2))) \ > > IMAGE_PREFIX="$(IMAGE_PREFIX)" \ > > DEVICE_TITLE="$(DEVICE_TITLE)" \ > > + DEVICE_DTS="$(DEVICE_DTS)" \ > > TARGET="$(BOARD)" \ > > SUBTARGET="$(if $(SUBTARGET),$(SUBTARGET),generic)" \ > > VERSION_NUMBER="$(VERSION_NUMBER)" \ diff --git > > a/scripts/json_add_image_info.py b/scripts/json_add_image_info.py > > index b4d2dd8d71..5df4bf2a2a 100755 > > --- a/scripts/json_add_image_info.py > > +++ b/scripts/json_add_image_info.py > > @@ -5,6 +5,8 @@ from pathlib import Path > > from sys import argv > > import hashlib > > import json > > +import re > > +import subprocess > > > > if len(argv) != 2: > > print("ERROR: JSON info script requires output arg") @@ -22,6 > > +24,20 @@ if not image_file.is_file(): > > def get_titles(): > > return [{"title": getenv("DEVICE_TITLE")}] > > > > +def get_board_name(): > > + device_dts = getenv("DEVICE_DTS") > > + if device_dts is not None: > > + dtc = getenv("LINUX_DIR") + "/scripts/dtc/dtc" > > + dtb_file = getenv("KDIR") + "/image-" + device_dts + ".dtb" > > + dts = subprocess.run([dtc, "-q", "-I", "dtb", "-O", "dts", "-o", > > "-", > dtb_file], capture_output=True, text=True) > > + if dts.returncode != 0: > > + return None > > + match = re.search("compatible = \"([^\"]*)", dts.stdout) > > + if match is None: > > + return None > > + return match[1] > > + return None > > + > > > > device_id = getenv("DEVICE_ID") > > image_hash = hashlib.sha256(image_file.read_bytes()).hexdigest() > > @@ -46,5 +62,8 @@ image_info = { > > } > > }, > > } > > +board_name = get_board_name() > > +if board_name is not None: > > + image_info["profiles"][device_id]["board_name"] = board_name > > > > json_path.write_text(json.dumps(image_info, separators=(",", ":")))
openpgp-digital-signature.asc
Description: PGP signature
_______________________________________________ openwrt-devel mailing list openwrt-devel@lists.openwrt.org https://lists.openwrt.org/mailman/listinfo/openwrt-devel