aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authordavid.jc.anderson2007-04-26 13:04:54 +0000
committerdavid.jc.anderson2007-04-26 13:04:54 +0000
commit898847d5ee5ef1867c538bbcda84f64778a7930b (patch)
treed1b94c96b90575c6fe3cb6ca51df91948e4d5a5b
parent9b025da7a606b18e53f6fb8db9fc9c080c2fc80a (diff)
Add support for loading binaries at arbitrary addresses in ram and jumping to them there.
-rw-r--r--main_fwexec.c17
1 files changed, 12 insertions, 5 deletions
diff --git a/main_fwexec.c b/main_fwexec.c
index db584f9..35a951e 100644
--- a/main_fwexec.c
+++ b/main_fwexec.c
@@ -76,14 +76,21 @@ int main(int argc, char *argv[])
nxt_error_t err;
char *firmware;
int firmware_len;
+ long load_addr;
- if (argc != 2)
+ if (argc < 2 || argc > 3)
{
- printf("Syntax: %s <Firmware image to write>\n"
+ printf("Syntax: %s <Firmware image to write> [load address]\n"
"\n"
- "Example: %s beep.bin\n", argv[0], argv[0]);
+ "Example: %s beep.bin\n"
+ " %s beep.bin 0x1234", argv[0], argv[0], argv[0]);
exit(1);
}
+ if (argc == 3) {
+ load_addr = strtol(argv[2], NULL, 16);
+ } else {
+ load_addr = 0x202000;
+ }
get_firmware(&firmware, &firmware_len, argv[1]);
@@ -114,11 +121,11 @@ int main(int argc, char *argv[])
"Uploading firmware...\n");
// Send the C program
- NXT_HANDLE_ERR(nxt_send_file(nxt, 0x202000, firmware, firmware_len), nxt,
+ NXT_HANDLE_ERR(nxt_send_file(nxt, load_addr, firmware, firmware_len), nxt,
"Error Sending file");
printf("Firmware uploaded, executing...\n");
- NXT_HANDLE_ERR(nxt_jump(nxt, 0x202000), nxt,
+ NXT_HANDLE_ERR(nxt_jump(nxt, load_addr), nxt,
"Error jumping to C program");
NXT_HANDLE_ERR(nxt_close(nxt), NULL,