From 6c57026f384479d41caabe122a820ecdee1db17e Mon Sep 17 00:00:00 2001 From: dave Date: Mon, 3 Jul 2006 11:22:28 +0000 Subject: Make the estorm firmware image link properly, and adapt the firmware flasher to flash images that aren't 256k long. --- libnxt/firmware.c | 16 ++++++++++++---- libnxt/flash_write/Makefile | 12 +++++++----- libnxt/flash_write/flash.c | 4 ++-- 3 files changed, 21 insertions(+), 11 deletions(-) (limited to 'libnxt') diff --git a/libnxt/firmware.c b/libnxt/firmware.c index abd810f..1c4092b 100644 --- a/libnxt/firmware.c +++ b/libnxt/firmware.c @@ -21,6 +21,7 @@ #include #include +#include #include #include #include @@ -80,7 +81,7 @@ nxt_firmware_validate_fd(int fd) if (fstat(fd, &s) < 0) return NXT_FILE_ERROR; - if (s.st_size != 256*1024) + if (s.st_size > 256*1024) return NXT_INVALID_FIRMWARE; return NXT_OK; @@ -125,13 +126,20 @@ nxt_firmware_flash(nxt_t *nxt, char *fw_path) for (i = 0; i < 1024; i++) //256*1024; i += 256) { char buf[256]; + int ret; - if (read(fd, buf, 256) != 256) + memset(buf, 0, 256); + ret = read(fd, buf, 256); + + if (ret != -1) + NXT_ERR(nxt_flash_block(nxt, i, buf)); + + if (ret < 256) { close(fd); - nxt_flash_finish(nxt); + NXT_ERR(nxt_flash_finish(nxt)); - return NXT_FILE_ERROR; + return ret == -1 ? NXT_FILE_ERROR : NXT_OK; } NXT_ERR(nxt_flash_block(nxt, i, buf)); diff --git a/libnxt/flash_write/Makefile b/libnxt/flash_write/Makefile index efbeaef..2bc9417 100644 --- a/libnxt/flash_write/Makefile +++ b/libnxt/flash_write/Makefile @@ -4,12 +4,14 @@ # objdump --disassemble-all -bbinary -marm7tdmi flash.bin > flash.asm # +TOOL_PREFIX=arm-elf- + all: - arm-linux-gcc -W -Wall -O3 -mcpu=arm7tdmi -mapcs -mthumb-interwork -c -o flash.o flash.c - arm-linux-as --warn -mcpu=arm7tdmi -mapcs-32 -EL -mthumb-interwork -o crt0.o crt0.s - arm-linux-ld --gc-sections crt0.o flash.o -o flash - arm-linux-objcopy -O binary flash flash.bin - arm-linux-objdump --disassemble-all -b binary -m arm7tdmi flash.bin > flash.asm + $(TOOL_PREFIX)gcc -W -Wall -O3 -mcpu=arm7tdmi -mapcs -mthumb-interwork -c -o flash.o flash.c + $(TOOL_PREFIX)as --warn -mcpu=arm7tdmi -mapcs-32 -EL -mthumb-interwork -o crt0.o crt0.s + $(TOOL_PREFIX)ld -O3 --gc-sections crt0.o flash.o -o flash + $(TOOL_PREFIX)objcopy -O binary flash flash.bin + $(TOOL_PREFIX)objdump --disassemble-all -b binary -m arm7tdmi flash.bin > flash.asm clean: rm -f flash.o flash.bin flash.asm diff --git a/libnxt/flash_write/flash.c b/libnxt/flash_write/flash.c index 6f38f8f..043b616 100644 --- a/libnxt/flash_write/flash.c +++ b/libnxt/flash_write/flash.c @@ -19,8 +19,8 @@ * USA */ -#define VINTPTR(addr) ((volatile unsigned long *)(addr)) -#define VINT(addr) ((volatile unsigned long)(*(VINTPTR(addr)))) +#define VINTPTR(addr) ((volatile unsigned int *)(addr)) +#define VINT(addr) (*(VINTPTR(addr))) #define USER_PAGE VINTPTR(0x00202100) #define USER_PAGE_NUM VINT(0x00202300) -- cgit v1.2.3