mail archive of the rauc mailing list
 help / color / mirror / Atom feed
From: Ladislav Michl <ladis@linux-mips.org>
To: rauc@pengutronix.de
Subject: [RAUC] [PATCH] Add suport for bare flash
Date: Fri, 6 Dec 2019 15:43:57 +0100	[thread overview]
Message-ID: <20191206144357.GA3580578@lenoch> (raw)

Add handler to write images using flashcp. Used to update barebox on at91
based board with dataflash.

Signed-off-by: Ladislav Michl <ladis@linux-mips.org>
---
 src/update_handler.c | 72 ++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 72 insertions(+)

diff --git a/src/update_handler.c b/src/update_handler.c
index 0415c92..8385096 100644
--- a/src/update_handler.c
+++ b/src/update_handler.c
@@ -497,6 +497,42 @@ out:
 	return res;
 }
 
+static gboolean flash_write_slot(const gchar *image, const gchar *device, GError **error)
+{
+	g_autoptr(GSubprocess) sproc = NULL;
+	GError *ierror = NULL;
+	gboolean res = FALSE;
+	g_autoptr(GPtrArray) args = g_ptr_array_new_full(5, g_free);
+
+	g_ptr_array_add(args, g_strdup("flashcp"));
+	g_ptr_array_add(args, g_strdup(image));
+	g_ptr_array_add(args, g_strdup(device));
+	g_ptr_array_add(args, NULL);
+
+	r_debug_subprocess(args);
+	sproc = g_subprocess_newv((const gchar * const *)args->pdata,
+			G_SUBPROCESS_FLAGS_NONE, &ierror);
+	if (sproc == NULL) {
+		g_propagate_prefixed_error(
+				error,
+				ierror,
+				"failed to start flashcp: ");
+		goto out;
+	}
+
+	res = g_subprocess_wait_check(sproc, NULL, &ierror);
+	if (!res) {
+		g_propagate_prefixed_error(
+				error,
+				ierror,
+				"failed to run flashcp: ");
+		goto out;
+	}
+
+out:
+	return res;
+}
+
 static gboolean nand_format_slot(const gchar *device, GError **error)
 {
 	g_autoptr(GSubprocess) sproc = NULL;
@@ -1046,6 +1082,41 @@ out:
 	return res;
 }
 
+static gboolean img_to_flash_handler(RaucImage *image, RaucSlot *dest_slot, const gchar *hook_name, GError **error)
+{
+	GError *ierror = NULL;
+	gboolean res = FALSE;
+
+	/* run slot pre install hook if enabled */
+	if (hook_name && image->hooks.pre_install) {
+		res = run_slot_hook(hook_name, R_SLOT_HOOK_PRE_INSTALL, NULL, dest_slot, &ierror);
+		if (!res) {
+			g_propagate_error(error, ierror);
+			goto out;
+		}
+	}
+
+	/* write */
+	g_message("writing slot device %s", dest_slot->device);
+	res = flash_write_slot(image->filename, dest_slot->device, &ierror);
+	if (!res) {
+		g_propagate_error(error, ierror);
+		goto out;
+	}
+
+	/* run slot post install hook if enabled */
+	if (hook_name && image->hooks.post_install) {
+		res = run_slot_hook(hook_name, R_SLOT_HOOK_POST_INSTALL, NULL, dest_slot, &ierror);
+		if (!res) {
+			g_propagate_error(error, ierror);
+			goto out;
+		}
+	}
+
+out:
+	return res;
+}
+
 static gboolean img_to_nand_handler(RaucImage *image, RaucSlot *dest_slot, const gchar *hook_name, GError **error)
 {
 	GError *ierror = NULL;
@@ -1496,6 +1567,7 @@ RaucUpdatePair updatepairs[] = {
 	{"*.ubifs", "ubivol", img_to_ubivol_handler},
 	{"*.ubifs", "ubifs", img_to_ubifs_handler},
 	{"*.img", "ext4", img_to_fs_handler},
+	{"*.img", "flash", img_to_flash_handler},
 	{"*.img", "nand", img_to_nand_handler},
 	{"*.img", "ubifs", img_to_ubifs_handler},
 	{"*.img", "ubivol", img_to_ubivol_handler},
-- 
2.24.0


_______________________________________________
RAUC mailing list

             reply	other threads:[~2019-12-06 14:44 UTC|newest]

Thread overview: 3+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2019-12-06 14:43 Ladislav Michl [this message]
2019-12-06 15:01 ` Enrico Joerns
2019-12-06 17:25   ` Ladislav Michl

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20191206144357.GA3580578@lenoch \
    --to=ladis@linux-mips.org \
    --cc=rauc@pengutronix.de \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox