From patchwork Fri Feb 26 05:39:52 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Art Nikpal X-Patchwork-Id: 1444935 X-Patchwork-Delegate: rfried.dev@gmail.com Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=lists.denx.de (client-ip=85.214.62.61; helo=phobos.denx.de; envelope-from=u-boot-bounces@lists.denx.de; receiver=) Authentication-Results: ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.a=rsa-sha256 header.s=20161025 header.b=EokvAQiN; dkim-atps=neutral Received: from phobos.denx.de (phobos.denx.de [85.214.62.61]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 4Dn9s81t6Wz9s1l for ; Sat, 27 Feb 2021 00:45:32 +1100 (AEDT) Received: from h2850616.stratoserver.net (localhost [IPv6:::1]) by phobos.denx.de (Postfix) with ESMTP id C4574827C3; Fri, 26 Feb 2021 14:45:14 +0100 (CET) Authentication-Results: phobos.denx.de; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: phobos.denx.de; spf=pass smtp.mailfrom=u-boot-bounces@lists.denx.de Authentication-Results: phobos.denx.de; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="EokvAQiN"; dkim-atps=neutral Received: by phobos.denx.de (Postfix, from userid 109) id 5F71C801E9; Fri, 26 Feb 2021 06:40:29 +0100 (CET) X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on phobos.denx.de X-Spam-Level: X-Spam-Status: No, score=-2.0 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,FREEMAIL_FROM,RCVD_IN_DNSWL_BLOCKED, SPF_HELO_NONE autolearn=ham autolearn_force=no version=3.4.2 Received: from mail-pl1-x634.google.com (mail-pl1-x634.google.com [IPv6:2607:f8b0:4864:20::634]) (using TLSv1.3 with cipher TLS_AES_128_GCM_SHA256 (128/128 bits)) (No client certificate requested) by phobos.denx.de (Postfix) with ESMTPS id 9C26680059 for ; Fri, 26 Feb 2021 06:40:25 +0100 (CET) Authentication-Results: phobos.denx.de; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: phobos.denx.de; spf=pass smtp.mailfrom=email2tema@gmail.com Received: by mail-pl1-x634.google.com with SMTP id p5so4719282plo.4 for ; Thu, 25 Feb 2021 21:40:25 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:mime-version :content-transfer-encoding; bh=ZXjOEh8Rj7c3GRXRG6rQTPybytzAsh5S7bkWY/oAKkE=; b=EokvAQiNLs36lVYSY9MflBaCiBoU2OkFWZeAjMkod634nEAAuqYdil4f8vcPU/TZEL iD1FDx/D/AEbXAr18wrb4ZQnoY8hEAx57lL0ylPhtDe4OCRg/h+w+cuO3VDK4zsF1+Jf 7PZQs2WFMm8CsbUp77p7o5j86r1Crjw42Ksc6rOz1akHL0LGO49PNPF/Su+67CqlZKLP tQVeKtNclkhMr2I49EM7MxY0bSkvNkPyb8IdBcbqHGdj3Bf10slJRasCNPx0bU+vfWHF nNgkRHLQGjJ+5dfl/MKSrEczcVQ3ogLUzTzUvEbR5UWOgM+wkq3ze1uBafc+G2TXjE0D 8JZg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:mime-version :content-transfer-encoding; bh=ZXjOEh8Rj7c3GRXRG6rQTPybytzAsh5S7bkWY/oAKkE=; b=D3dPTByNk3h9qXV6Y2mfHFDBbBHJDRNqfM7LInTOgTvP7FEeYofDgzuSUHg/WoQRX2 /pWGFpLGmvAaCu0wnP7cCtiGdqcVCcP+NlML+WvCnZMTnV5TeTh51fZaKmpjvnuUoAyO IIbJPoOV8haK2VLkV0nrVJrR+9H3qZy0D11BQuYsao641L4aW+mV8FgeuVA/qrVSTDMc zIo8Zh1t6NIxusQNCdErO1ZdSl2LsLBQUK0O866dUu0RV1+ppAq4z7F7Jx6eqgtn562m sbzop/QPTPZYElZsaJl2AmZnO3NtsvK+z9p/TeZW1mS7NBSwcxTDzQZJUF+NduYXhAtA iV7w== X-Gm-Message-State: AOAM5312+7Uxqin2XpbvYG9YAmn48ldAyPx1Uqx0gW0qtxZBaewL4Oas xu39lZ3YoDTbC888wEpKR3E= X-Google-Smtp-Source: ABdhPJz9Gd45P6AQDpV2gQHBN95ToGueW5j9v/h0e/RgS78KPWac3L6cEZh6JqA9Xsb9UDBz5/Kfig== X-Received: by 2002:a17:90b:2281:: with SMTP id kx1mr1654742pjb.113.1614318023843; Thu, 25 Feb 2021 21:40:23 -0800 (PST) Received: from localhost.localdomain (80.251.221.29.16clouds.com. [80.251.221.29]) by smtp.gmail.com with ESMTPSA id w13sm13431512pjg.0.2021.02.25.21.40.20 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 25 Feb 2021 21:40:23 -0800 (PST) From: Artem Lapkin X-Google-Original-From: Artem Lapkin To: trini@konsulko.com Cc: narmstrong@baylibre.com, khilman@baylibre.com, christianshewitt@gmail.com, u-boot@lists.denx.de, u-boot-amlogic@groups.io, art@khadas.com, nick@khadas.com, gouwa@khadas.com Subject: [PATCH] pxe_utils: add localcmd defination Date: Fri, 26 Feb 2021 13:39:52 +0800 Message-Id: <20210226053952.3037053-1-art@khadas.com> X-Mailer: git-send-email 2.25.1 MIME-Version: 1.0 X-Mailman-Approved-At: Fri, 26 Feb 2021 14:45:07 +0100 X-BeenThere: u-boot@lists.denx.de X-Mailman-Version: 2.1.34 Precedence: list List-Id: U-Boot discussion List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: u-boot-bounces@lists.denx.de Sender: "U-Boot" X-Virus-Scanned: clamav-milter 0.102.4 at phobos.denx.de X-Virus-Status: Clean pxe localboot usage too much limited, i think be useful improve it welcome for any suggestions and feedbacks... 1) add localcmd defination which can used with localboot by default localboot get from env, now we can define it in pxe script 2) localcmd can use without localboot 3) multiline usage for localcmd 4) add short alias ! for localcmd 5) localcmd eval as uboot script (run_command_list) 6) label + localcmd simple usage uboot pxe menu with uboot commands Usage examples # standalone usage LABEL update_uboot LOCALCMD ip=$tftpip && tftpboot $ip:boot.scr.uimg && script LABEL reset # multiline usage LOCALCMD echo RESET LOCALCMD reset LABEL reset again # multiline alias usage ! echo RESET ! reset LABEL localboot # redefile localcmd for localboot LOCALBOOT 1 LOCALCMD echo temporary redefine localcmd Signed-off-by: Artem Lapkin --- cmd/pxe_utils.c | 29 ++++++++++++++++++++++++++++- cmd/pxe_utils.h | 1 + 2 files changed, 29 insertions(+), 1 deletion(-) diff --git a/cmd/pxe_utils.c b/cmd/pxe_utils.c index f1ed671a..fdf532ec 100644 --- a/cmd/pxe_utils.c +++ b/cmd/pxe_utils.c @@ -271,6 +271,9 @@ static void label_destroy(struct pxe_label *label) if (label->kernel) free(label->kernel); + if (label->localcmd) + free(label->localcmd); + if (label->config) free(label->config); @@ -322,7 +325,10 @@ static int label_localboot(struct pxe_label *label) { char *localcmd; - localcmd = from_env("localcmd"); + if (label->localcmd) + localcmd = label->localcmd; + else + localcmd = from_env("localcmd"); if (!localcmd) return -ENOENT; @@ -470,6 +477,11 @@ static int label_boot(struct cmd_tbl *cmdtp, struct pxe_label *label) return 0; } + if (label->localcmd) { + if (!label->localboot_val) + return run_command_list(label->localcmd, strlen(label->localcmd), 0); + } + if (!label->kernel) { printf("No kernel given, skipping %s\n", label->name); @@ -687,6 +699,8 @@ enum token_type { T_APPEND, T_INITRD, T_LOCALBOOT, + T_LOCALCMD, + T_LOCALCMD2, T_DEFAULT, T_PROMPT, T_INCLUDE, @@ -721,6 +735,8 @@ static const struct token keywords[] = { {"kernel", T_KERNEL}, {"linux", T_LINUX}, {"localboot", T_LOCALBOOT}, + {"localcmd", T_LOCALCMD}, + {"!", T_LOCALCMD2}, {"append", T_APPEND}, {"initrd", T_INITRD}, {"include", T_INCLUDE}, @@ -1102,6 +1118,7 @@ static int parse_label(char **c, struct pxe_menu *cfg) int len; char *s = *c; struct pxe_label *label; + char *add; int err; label = label_create(); @@ -1177,6 +1194,16 @@ static int parse_label(char **c, struct pxe_menu *cfg) err = parse_integer(c, &label->localboot_val); break; + case T_LOCALCMD: + case T_LOCALCMD2: + if (label->localcmd) { + if (parse_sliteral(c, &add)) + sprintf(label->localcmd, "%s\n%s", label->localcmd, add); + } else { + err = parse_sliteral(c, &label->localcmd); + } + break; + case T_IPAPPEND: err = parse_integer(c, &label->ipappend); break; diff --git a/cmd/pxe_utils.h b/cmd/pxe_utils.h index bbdc606b..cdac1327 100644 --- a/cmd/pxe_utils.h +++ b/cmd/pxe_utils.h @@ -49,6 +49,7 @@ struct pxe_label { int attempted; int localboot; int localboot_val; + char *localcmd; struct list_head list; };