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`.

Another hack could be to add it to /proc/cmdline?

[0]: https://github.com/openwrt/openwrt/commit/df6f3090c48e3bafa0ace7450488b0a20a8074fb

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=(",", ":")))

_______________________________________________
openwrt-devel mailing list
openwrt-devel@lists.openwrt.org
https://lists.openwrt.org/mailman/listinfo/openwrt-devel

Reply via email to