It isn't clear how useful it is to pass the arguments of bootm to the OS. For example, if "bootm 1000 2000 3000" is used, the '1000' argument is passed to QNX. This seems like a strange approach, since the argument have already been parsed by U-Boot and processed.
Rely instead on the "bootargs" mechanism, which is the standard approach. Also make sure that the argument list is NULL-terminated. Signed-off-by: Simon Glass <s...@chromium.org> --- boot/bootm_os.c | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/boot/bootm_os.c b/boot/bootm_os.c index 4aa1db848d6c..598671e576c6 100644 --- a/boot/bootm_os.c +++ b/boot/bootm_os.c @@ -333,7 +333,7 @@ int do_bootm_vxworks(int flag, int argc, char *const argv[], static int do_bootm_qnxelf(int flag, int argc, char *const argv[], struct bootm_headers *images) { - char *local_args[2]; + char *local_args[3]; char str[16]; int dcache; @@ -348,8 +348,9 @@ static int do_bootm_qnxelf(int flag, int argc, char *const argv[], #endif sprintf(str, "%lx", images->ep); /* write entry-point into string */ - local_args[0] = argv[0]; - local_args[1] = str; /* and provide it via the arguments */ + local_args[0] = "qnxelf"; + local_args[1] = env_get("bootargs"); + local_args[2] = NULL; /* * QNX images require the data cache is disabled. @@ -358,7 +359,7 @@ static int do_bootm_qnxelf(int flag, int argc, char *const argv[], if (dcache) dcache_disable(); - do_bootelf(NULL, 0, 2, local_args); + do_bootelf(NULL, 0, local_args[1] ? 2 : 1, local_args); if (dcache) dcache_enable(); -- 2.43.0.rc2.451.g8631bc7472-goog