From mboxrd@z Thu Jan 1 00:00:00 1970 Return-path: Received: from eddie.linux-mips.org ([148.251.95.138] helo=cvs.linux-mips.org) by metis.ext.pengutronix.de with esmtp (Exim 4.92) (envelope-from ) id 1idEps-0007Uz-Tt for rauc@pengutronix.de; Fri, 06 Dec 2019 15:44:01 +0100 Received: (from localhost user: 'ladis' uid#1021 fake: STDIN (ladis@eddie.linux-mips.org)) by eddie.linux-mips.org id S23992514AbfLFOn7EARqG (ORCPT ); Fri, 6 Dec 2019 15:43:59 +0100 Date: Fri, 6 Dec 2019 15:43:57 +0100 From: Ladislav Michl Message-ID: <20191206144357.GA3580578@lenoch> MIME-Version: 1.0 Content-Disposition: inline Subject: [RAUC] [PATCH] Add suport for bare flash List-Id: RAUC Project - Discussion List List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Errors-To: rauc-bounces@pengutronix.de Sender: "RAUC" To: rauc@pengutronix.de Add handler to write images using flashcp. Used to update barebox on at91 based board with dataflash. Signed-off-by: Ladislav Michl --- 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