From patchwork Fri Sep 22 01:12:44 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: James Hilliard X-Patchwork-Id: 1837887 X-Patchwork-Delegate: sbabic@denx.de Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@legolas.ozlabs.org Authentication-Results: legolas.ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=googlegroups.com header.i=@googlegroups.com header.a=rsa-sha256 header.s=20230601 header.b=P/2EoWhw; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.a=rsa-sha256 header.s=20230601 header.b=Fsnu6NvJ; dkim-atps=neutral Authentication-Results: legolas.ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=googlegroups.com (client-ip=2607:f8b0:4864:20::83f; helo=mail-qt1-x83f.google.com; envelope-from=swupdate+bncbcl4hcw73qcbbfwuwouamgqewsxsqka@googlegroups.com; receiver=patchwork.ozlabs.org) Received: from mail-qt1-x83f.google.com (mail-qt1-x83f.google.com [IPv6:2607:f8b0:4864:20::83f]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature ECDSA (secp384r1) server-digest SHA384) (No client certificate requested) by legolas.ozlabs.org (Postfix) with ESMTPS id 4RsDlv4M4tz1ynH for ; Fri, 22 Sep 2023 11:12:58 +1000 (AEST) Received: by mail-qt1-x83f.google.com with SMTP id d75a77b69052e-412ede7897asf16232791cf.1 for ; Thu, 21 Sep 2023 18:12:58 -0700 (PDT) ARC-Seal: i=2; a=rsa-sha256; t=1695345174; cv=pass; d=google.com; s=arc-20160816; b=iMED97YEeCi88yhF6GvspMileoVPPcfiEgasxOhNDFUQx1Uq9SlM/2VM9X/158Kpd0 /dkPX/5ZckfbCgvwJFqbjFeN3fAiVlvgOQyCZz7kBg7+ZBFZ4ETCY5IpyX/yKbw07taL KCXxe8E21CBCBcJoZudbR39GxyZq+DW3ZcxfUVTBqiwcsh+Uf/jvl5xhMXeNY8q/TVgs I9Ucy97jHQuIMBe235ROygOmhN8+vwNxSXFv9H611W+9w5bxPoYFeJTqBxuX05i9kNMq ReHC8XWPjlbgcEoEVL0Ox/PrdBxrLwTdVRRzTKeF3vny2vX7rVaTNwYxOsLwpJiHsCA8 vfnQ== ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-unsubscribe:list-subscribe:list-archive:list-help:list-post :list-id:mailing-list:precedence:mime-version:message-id:date :subject:cc:to:from:sender:dkim-signature:dkim-signature; bh=cFxw1XZzPDrSpedo7Kg3ewMmHLzzr7djojZ03wzTm/o=; fh=KPrAw848PoyEggiIX82ubXk7sJG2UD396EeWf1FQVUo=; b=xo0lUh6iqG3FPAGKuGaVV9vBK250eGBoZybUamj9Zuy88DuRXRlnoL0LlKbHg7bxMk O8/4yL5vB5mcuzLk46TrmNqakAgXWeaL4KmBzenx3Zg28sk1GiSAxOw6wf0P31q0MlHu TO/vUb8fJqwIgQ25CUYe8/P0Rr3VADffm3NEHe+u8ub3rzcurYMooRx1a5wmRvlbqAqt vOErwjS7NormopS8QSQpnGDW3V/zc+TEHvb3y+bIrTywjriRv/Wc4jdjhx3d1QfPoHHQ 3FT8gPThcBvvQErpIpC45of6RgCLzgumA/MS7zpDY2A6cKvwWO9XWKte00qR9tIbXTlK yc2Q== ARC-Authentication-Results: i=2; gmr-mx.google.com; dkim=pass header.i=@gmail.com header.s=20230601 header.b=KiQpBmfo; spf=pass (google.com: domain of james.hilliard1@gmail.com designates 2607:f8b0:4864:20::c29 as permitted sender) smtp.mailfrom=james.hilliard1@gmail.com; dmarc=pass (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=googlegroups.com; s=20230601; t=1695345174; x=1695949974; darn=patchwork.ozlabs.org; h=list-unsubscribe:list-subscribe:list-archive:list-help:list-post :list-id:mailing-list:precedence:x-original-authentication-results :x-original-sender:mime-version:message-id:date:subject:cc:to:from :sender:from:to:cc:subject:date:message-id:reply-to; bh=cFxw1XZzPDrSpedo7Kg3ewMmHLzzr7djojZ03wzTm/o=; b=P/2EoWhwuQQfejFvSwKSejXXHp6e/e9yqpVZ36GJ8NOEsOhJhMBZ29qvo2RI/H1TXd o6ujWhefADohYw2UcGDTZfSABQ3uWxlP9K35J5aBX2uyfsLddUigtfbV3iwksCs1lDm5 wfExzboysDdOrzDAkIjfYTjxRrYsuMQ9YYbZVbMg7HahXrK35gyBqosu4uhwzClP4POy 3lt4gx0D/S8f9yfxavUx5Aql8DJZJVZpRgI8VLrfc6Jwpa368nULrQb4mcaZ6L3WAPlN yBeqLbmfXlH3LCZkQevK8cmRrZFNhk2pLtlROlSkqg4g+7QQqZ41u9ePBp93P1sSZYHf GzAA== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1695345174; x=1695949974; darn=patchwork.ozlabs.org; h=list-unsubscribe:list-subscribe:list-archive:list-help:list-post :list-id:mailing-list:precedence:x-original-authentication-results :x-original-sender:mime-version:message-id:date:subject:cc:to:from :from:to:cc:subject:date:message-id:reply-to; bh=cFxw1XZzPDrSpedo7Kg3ewMmHLzzr7djojZ03wzTm/o=; b=Fsnu6NvJ/x/4PfDwV2pK6XJNALZDl8mzETcnZACNnCR2NkKJ3F6JZaYpFtjQt9Z9SM fkwpMuXcbRaonSniaJJnZS0MlIDsdTJlYn2WXNslH1ZzcfYtMXuQ84uGEpkXWGRzUbNZ Bs7vKAhixqjJcSHFZ4zxOkgmY1jBavrM63j/x+yfsfWz15/uQlaMmttQ0R+Ncf1k2qzm T1eDrxVtrOCuvHrv4ePGxvFRSliqTtweiNfMmQ6cRBaSaWOUeMFCBLRWpTqstBY2FXWy Kkvg3OYWKukyt0ZuPtBRvpupoRCHC0P7P9gWL8I7KKLkwgPolZvx2a+/DvIo9kfJjtSj 465g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1695345174; x=1695949974; h=list-unsubscribe:list-subscribe:list-archive:list-help:list-post :x-spam-checked-in-group:list-id:mailing-list:precedence :x-original-authentication-results:x-original-sender:mime-version :message-id:date:subject:cc:to:from:x-beenthere:x-gm-message-state :sender:from:to:cc:subject:date:message-id:reply-to; bh=cFxw1XZzPDrSpedo7Kg3ewMmHLzzr7djojZ03wzTm/o=; b=YlF+9c/T6aMp4P21smnE9uAWhf93GnUKJyPF/hqYVZ5h/My+VEYOVzIVvvE4olewjN GHJSGEnz5pZvAZ978l2MeXVs4zCRjtGxeLCPdOPvbk9KSkOaa8WG8lArG6pngjIVEYVA OBQXX/xUYtKdqDVzbHEdNfLbO9LXrYBLSVSNE2D9nPSIzsHJX7Is79WkCtIMwa7nqlAU 0hTun8jd4yWR7gvmbT6BPA1/9ULZ8qc1w+4hfYy++zyT/d/2nQm+T2A0r2uDbT1Q+9EH ITch92749tEFVKHA/G+48oTHbok79ci2Wos6q0qGCBO19asYSsShGol4kpUhmkakbdyN TpQA== Sender: swupdate@googlegroups.com X-Gm-Message-State: AOJu0YxQ83BX8h8NVC7nH8thWMGsc/UUBnV8O9ui9NdXfXB4RK8xv8td HHLugzKw2RrJwdz5iUmv2yw= X-Google-Smtp-Source: AGHT+IHYXkD9RS8tGPoEfXizzub37ZxKF0mFZ63guVoKwpHYJFt1KwSg+7QvEr0UAbdkfS6c0CsK6w== X-Received: by 2002:ac8:5d4b:0:b0:400:a2b8:1c97 with SMTP id g11-20020ac85d4b000000b00400a2b81c97mr8798126qtx.17.1695345174583; Thu, 21 Sep 2023 18:12:54 -0700 (PDT) X-BeenThere: swupdate@googlegroups.com Received: by 2002:ac8:5519:0:b0:3f6:a07c:d352 with SMTP id j25-20020ac85519000000b003f6a07cd352ls1364327qtq.1.-pod-prod-03-us; Thu, 21 Sep 2023 18:12:53 -0700 (PDT) X-Received: by 2002:ac5:cd50:0:b0:499:7022:1237 with SMTP id n16-20020ac5cd50000000b0049970221237mr3685252vkm.8.1695345173011; Thu, 21 Sep 2023 18:12:53 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1695345172; cv=none; d=google.com; s=arc-20160816; b=uaqBzquETFg+1O6XUXPHHDkkaWgeQkNJTzkqgHQLmQIQUI1VCY1HJljo+ofbaUVlu4 8jGJhnW/DsL5gIlfOy7Jn+5Sitq6LF3r63kJqXLDtwvPsE+H4Qbnuc28Zz5Rck9f9NUa 6M56wfYtIBb50oPVQc+GL6F9vP2PZ3KIUXp0e6zupqe7/017YsKQWnClxGvlP6umBFMp DPXuLXQVSRH0CAc1OFUs46qg4+V8NnMw9TAcsbv8sBQk/4G0wH+x6TLI6LwlOf3VEKk9 /QywI+h1S/KgYRRBR1UrU8STstOVonX3BfpKatbDWSu7lQWOyeCPg6l7qlGIFgMoN2HK H0eQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:dkim-signature; bh=eYBynN4MXV+wVcLN9skO9el1kPobi01OO0WAmBoIUWg=; fh=KPrAw848PoyEggiIX82ubXk7sJG2UD396EeWf1FQVUo=; b=0gO4fUSoV3yEtQn0cyBcUimkMy8sIJGkQw0MXk8BiSnrVEIKy7R5qtpajLSAV14Dbk yXwOPQXoUzKv/Yl0eRJ3hq6GragtnYCI4vZiLrxIebhioSAPaU45xV0fGxWx6iE6hkjg tjwmEW4MgfwbiaLwHE5kOwGFGYSFRTo5Vw4XeiZnFiyOSsdWGEbDJJEuxZ78wsrG/+aJ 6CJQ5YtSyJ3PVLarHveP46UcYmVgxap8igOKhV3a7KlWCdxnxEND7kzeIO0Zc+i4Q24k AJ9jweWLuktErdshnzhSAI3+uoh3HQDc42X1TAUVcl09qZ34Y0Tz8wX8bkXNarO3FmXc rZ4A== ARC-Authentication-Results: i=1; gmr-mx.google.com; dkim=pass header.i=@gmail.com header.s=20230601 header.b=KiQpBmfo; spf=pass (google.com: domain of james.hilliard1@gmail.com designates 2607:f8b0:4864:20::c29 as permitted sender) smtp.mailfrom=james.hilliard1@gmail.com; dmarc=pass (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Received: from mail-oo1-xc29.google.com (mail-oo1-xc29.google.com. [2607:f8b0:4864:20::c29]) by gmr-mx.google.com with ESMTPS id o9-20020a1f7309000000b00493532d4654si464813vkc.3.2023.09.21.18.12.52 for (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Thu, 21 Sep 2023 18:12:52 -0700 (PDT) Received-SPF: pass (google.com: domain of james.hilliard1@gmail.com designates 2607:f8b0:4864:20::c29 as permitted sender) client-ip=2607:f8b0:4864:20::c29; Received: by mail-oo1-xc29.google.com with SMTP id 006d021491bc7-57361de8878so847809eaf.0 for ; Thu, 21 Sep 2023 18:12:52 -0700 (PDT) X-Received: by 2002:a05:6870:970f:b0:1d5:cdf7:bd95 with SMTP id n15-20020a056870970f00b001d5cdf7bd95mr7920119oaq.16.1695345172044; Thu, 21 Sep 2023 18:12:52 -0700 (PDT) Received: from james-x399.localdomain (71-33-152-19.hlrn.qwest.net. [71.33.152.19]) by smtp.gmail.com with ESMTPSA id eh24-20020a056638299800b0041d73d0a412sm690851jab.19.2023.09.21.18.12.50 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 21 Sep 2023 18:12:51 -0700 (PDT) From: James Hilliard To: swupdate@googlegroups.com Cc: James Hilliard Subject: [swupdate] [PATCH 1/1] Allow specifying UBI Volumes by MTD path Date: Thu, 21 Sep 2023 19:12:44 -0600 Message-Id: <20230922011244.1787706-1-james.hilliard1@gmail.com> X-Mailer: git-send-email 2.34.1 MIME-Version: 1.0 X-Original-Sender: james.hilliard1@gmail.com X-Original-Authentication-Results: gmr-mx.google.com; dkim=pass header.i=@gmail.com header.s=20230601 header.b=KiQpBmfo; spf=pass (google.com: domain of james.hilliard1@gmail.com designates 2607:f8b0:4864:20::c29 as permitted sender) smtp.mailfrom=james.hilliard1@gmail.com; dmarc=pass (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Precedence: list Mailing-list: list swupdate@googlegroups.com; contact swupdate+owners@googlegroups.com List-ID: X-Spam-Checked-In-Group: swupdate@googlegroups.com X-Google-Group-Id: 605343134186 List-Post: , List-Help: , List-Archive: , List-Unsubscribe: , In cases where the env is in an unattached UBI volume we may need to specify the volume name via the MTD path to attach. For this to work correctly we should first scan for any already attached UBI devices to see if they correspond to the mtd partition number in our configuration, if no corresponding attached mtd devices are found we should attempt to ubiattach to the configured MTD path. Signed-off-by: James Hilliard --- docs/fw_env_config.md | 8 +++ src/uboot_env.c | 120 +++++++++++++++++++++++++++++++++++++++++- 2 files changed, 126 insertions(+), 2 deletions(-) diff --git a/docs/fw_env_config.md b/docs/fw_env_config.md index 17b17fb..1cdc196 100644 --- a/docs/fw_env_config.md +++ b/docs/fw_env_config.md @@ -98,6 +98,14 @@ UBI Volume by Name Example | /dev/ubi0:env | 0x0 | 0x1f000 | 0x1f000 | | | | /dev/ubi0:redund | 0x0 | 0x1f000 | 0x1f000 | | | +UBI Volume by Name from MTD Path Example +-------------------------- + +| Device Name | Device Offset | Environment Size | Flash Sector Size | Number of Sectors | Disable Lock Mechanism | +|------------------|---------------|------------------|-------------------|-------------------|------------------------| +| /dev/mtd0:env | 0x0 | 0x1f000 | 0x1f000 | | | +| /dev/mtd0:redund | 0x0 | 0x1f000 | 0x1f000 | | | + Configuration File in YAML ========================== diff --git a/src/uboot_env.c b/src/uboot_env.c index 4a4ee35..bf9af99 100644 --- a/src/uboot_env.c +++ b/src/uboot_env.c @@ -43,6 +43,9 @@ #define DEVICE_MTD_NAME "/dev/mtd" #define DEVICE_UBI_NAME "/dev/ubi" +#define DEVICE_UBI_CTRL "/dev/ubi_ctrl" +#define SYS_UBI "/sys/class/ubi" +#define SYS_UBI_MTD_NUM "/sys/class/ubi/ubi%d/mtd_num" #define SYS_UBI_VOLUME_COUNT "/sys/class/ubi/ubi%d/volumes_count" #define SYS_UBI_VOLUME_NAME "/sys/class/ubi/ubi%d/ubi%d_%d/name" @@ -196,7 +199,11 @@ static enum device_type get_device_type(char *device) enum device_type type = DEVICE_NONE; if (!strncmp(device, DEVICE_MTD_NAME, strlen(DEVICE_MTD_NAME))) - type = DEVICE_MTD; + if (strchr(device, DEVNAME_SEPARATOR)) { + type = DEVICE_UBI; + } else { + type = DEVICE_MTD; + } else if (!strncmp(device, DEVICE_UBI_NAME, strlen(DEVICE_UBI_NAME))) type = DEVICE_UBI; else if (strlen(device) > 0) @@ -217,6 +224,76 @@ static int ubi_get_dev_id(char *device) return dev_id; } +static int mtd_get_dev_id(char *device) +{ + int dev_id = -1; + char *sep; + + sep = strrchr(device, 'd'); + if (sep) + sscanf(sep + 1, "%d", &dev_id); + + return dev_id; +} + +static int ubi_get_dev_id_from_mtd(char *device) +{ + DIR *sysfs_ubi; + struct dirent *dirent; + int mtd_id; + + mtd_id = mtd_get_dev_id(device); + if (mtd_id < 0) + return -1; + + sysfs_ubi = opendir(SYS_UBI); + if (!sysfs_ubi) + return -1; + + while (1) { + int ubi_num, ret; + + dirent = readdir(sysfs_ubi); + if (!dirent) + break; + + if (strlen(dirent->d_name) >= 255) { + closedir(sysfs_ubi); + return -1; + } + + ret = sscanf(dirent->d_name, "ubi%d", &ubi_num); + if (ret == 1) { + char filename[DEVNAME_MAX_LENGTH]; + char data[DEVNAME_MAX_LENGTH]; + int fd, n, num_mtd = -1; + + snprintf(filename, sizeof(filename), SYS_UBI_MTD_NUM, ubi_num); + fd = open(filename, O_RDONLY); + if (fd < 0) + continue; + + n = read(fd, data, sizeof(data)); + close(fd); + if (n < 0) + continue; + + if (sscanf(data, "%d", &num_mtd) != 1) + num_mtd = -1; + + if (num_mtd < 0) + continue; + + if (num_mtd == mtd_id) { + closedir(sysfs_ubi); + return ubi_num; + } + } + } + + return -1; +} + static int ubi_get_num_volume(char *device) { char filename[DEVNAME_MAX_LENGTH]; @@ -308,9 +385,48 @@ static int ubi_update_name(struct uboot_flash_env *dev) { char device[DEVNAME_MAX_LENGTH]; char volume[DEVNAME_MAX_LENGTH]; - int dev_id, vol_id, ret = -EBADF; + int dev_id, vol_id, fd, ret = -EBADF; + struct stat st; char *sep; + if (!strncmp(dev->devname, DEVICE_MTD_NAME, strlen(DEVICE_MTD_NAME))) + { + sep = strchr(dev->devname, DEVNAME_SEPARATOR); + if (sep) + { + memset(device, 0, DEVNAME_MAX_LENGTH); + memcpy(device, dev->devname, sep - dev->devname); + + memset(volume, 0, DEVNAME_MAX_LENGTH); + sscanf(sep + 1, "%s", &volume[0]); + + ret = ubi_get_dev_id_from_mtd(device); + if (ret < 0) { + struct ubi_attach_req req; + + memset(&req, 0, sizeof(struct ubi_attach_req)); + req.ubi_num = UBI_DEV_NUM_AUTO; + req.mtd_num = mtd_get_dev_id(device); + req.vid_hdr_offset = 0; + + fd = open(DEVICE_UBI_CTRL, O_RDONLY); + if (fd == -1) + return -EBADF; + + ret = ioctl(fd, UBI_IOCATT, &req); + close(fd); + if (ret == -1) + return -EBADF; + + sprintf(dev->devname, DEVICE_UBI_NAME"%d:%s", req.ubi_num, volume); + } else { + sprintf(dev->devname, DEVICE_UBI_NAME"%d:%s", ret, volume); + } + } else { + return -EBADF; + } + } + sep = strchr(dev->devname, DEVNAME_SEPARATOR); if (sep) {