summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--rbutil/mkamsboot/Makefile144
-rw-r--r--rbutil/mkamsboot/mkamsboot.c40
2 files changed, 65 insertions, 119 deletions
diff --git a/rbutil/mkamsboot/Makefile b/rbutil/mkamsboot/Makefile
index 287ea9b72f..fe58d82b9a 100644
--- a/rbutil/mkamsboot/Makefile
+++ b/rbutil/mkamsboot/Makefile
@@ -1,137 +1,83 @@
1CC=gcc
1 2
2# We use the UCL code available in the Rockbox tools/ directory 3# We use the UCL code available in the Rockbox tools/ directory
3
4CFLAGS=-I../../tools/ucl/include 4CFLAGS=-I../../tools/ucl/include
5LIBUCL=../../tools/ucl/src/libucl.a 5LIBUCL=../../tools/ucl/src/libucl.a
6 6
7# Edit the following variables (plus copy/paste another set of rules) when 7# Edit the following variables (plus copy/paste another set of rules) when
8# adding a new target. mkamsboot.c also needs to be edited to refer to these 8# adding a new target. mkamsboot.c also needs to be edited to refer to these
9# new images. 9# new images.
10#
11# If anyone reading this wants to improve this makefile, please do!
12 10
13BOOTIMAGES = bootimg_clip.o bootimg_e200v2.o bootimg_m200v4.o bootimg_fuze.o 11BOOTIMAGES = dualboot_clip.o dualboot_e200v2.o dualboot_m200v4.o dualboot_fuze.o
14BOOTHEADERS = bootimg_clip.h bootimg_e200v2.h bootimg_m200v4.h bootimg_fuze.h 12BOOTHEADERS = dualboot_clip.h dualboot_e200v2.h dualboot_m200v4.h dualboot_fuze.h
15 13
16CLIPFILES = dualboot-clip.o dualboot-clip.elf dualboot-clip.o \ 14CLIPFILES = dualboot_clip.arm-o dualboot_clip.o dualboot_clip.c dualboot_clip.h
17 dualboot-clip.bin bootimg_clip.c bootimg_clip.h
18 15
19E200V2FILES = dualboot-e200v2.o dualboot-e200v2.elf dualboot-e200v2.o \ 16E200V2FILES = dualboot_e200v2.arm-o dualboot_e200v2.o dualboot_e200v2.c \
20 dualboot-e200v2.bin bootimg_e200v2.c bootimg_e200v2.h 17 dualboot_e200v2.h
21 18
22M200V4FILES = dualboot-m200v4.o dualboot-m200v4.elf dualboot-m200v4.o \ 19M200V4FILES = dualboot_m200v4.arm-o dualboot_m200v4.o dualboot_m200v4.arm-bin \
23 dualboot-m200v4.bin bootimg_m200v4.c bootimg_m200v4.h 20 dualboot_m200v4.c dualboot_m200v4.h
24 21
25FUZEFILES = dualboot-fuze.o dualboot-fuze.elf dualboot-fuze.o \ 22FUZEFILES = dualboot_fuze.arm-o dualboot_fuze.o dualboot_fuze.c dualboot_fuze.h
26 dualboot-fuze.bin bootimg_fuze.c bootimg_fuze.h
27 23
28all: mkamsboot 24all: mkamsboot
29 25
30$(LIBUCL): 26# Dualboot bootloaders
31 make -C ../../tools/ucl/src libucl.a
32
33md5.o: md5.c md5.h
34 gcc $(CFLAGS) -c -o md5.o -W -Wall md5.c
35
36mkamsboot.o: mkamsboot.c $(BOOTHEADERS) uclimg.h md5.h
37 gcc $(CFLAGS) -c -o mkamsboot.o -W -Wall mkamsboot.c
38
39mkamsboot: mkamsboot.o $(BOOTIMAGES) uclimg.o md5.o $(LIBUCL)
40 gcc -o mkamsboot mkamsboot.o $(BOOTIMAGES) uclimg.o md5.o $(LIBUCL)
41
42# Rules for our test ARM application - assemble, link, then extract
43# the binary code
44
45# CLIP
46
47dualboot-clip.o: dualboot.S
48 arm-elf-gcc -DSANSA_CLIP -c -o dualboot-clip.o dualboot.S
49
50dualboot-clip.elf: dualboot-clip.o
51 arm-elf-ld -e 0 -Ttext=0 -o dualboot-clip.elf dualboot-clip.o
52
53dualboot-clip.bin: dualboot-clip.elf
54 arm-elf-objcopy -O binary dualboot-clip.elf dualboot-clip.bin
55 27
56bootimg_clip.c bootimg_clip.h: dualboot-clip.bin bin2c 28dualboot_clip.arm-o: dualboot.S
57 ./bin2c dualboot-clip.bin bootimg_clip 29 arm-elf-gcc -DSANSA_CLIP -c -o dualboot_clip.arm-o dualboot.S
58 30
59bootimg_clip.o: bootimg_clip.c 31dualboot_fuze.arm-o: dualboot.S
60 gcc -c -o bootimg_clip.o bootimg_clip.c 32 arm-elf-gcc -DSANSA_FUZE -c -o dualboot_fuze.arm-o dualboot.S
61 33
62# FUZE 34dualboot_e200v2.arm-o: dualboot.S
35 arm-elf-gcc -DSANSA_E200V2 -c -o dualboot_e200v2.arm-o dualboot.S
63 36
64dualboot-fuze.o: dualboot.S 37dualboot_m200v4.arm-o: dualboot.S
65 arm-elf-gcc -DSANSA_FUZE -c -o dualboot-fuze.o dualboot.S 38 arm-elf-gcc -DSANSA_M200V4 -c -o dualboot_m200v4.arm-o dualboot.S
66 39
67dualboot-fuze.elf: dualboot-fuze.o 40# Rules for the ucl unpack function
68 arm-elf-ld -e 0 -Ttext=0 -o dualboot-fuze.elf dualboot-fuze.o 41nrv2e_d8.arm-o: nrv2e_d8.S
69 42 arm-elf-gcc -DPURE_THUMB -c -o nrv2e_d8.arm-o nrv2e_d8.S
70dualboot-fuze.bin: dualboot-fuze.elf
71 arm-elf-objcopy -O binary dualboot-fuze.elf dualboot-fuze.bin
72
73bootimg_fuze.c bootimg_fuze.h: dualboot-fuze.bin bin2c
74 ./bin2c dualboot-fuze.bin bootimg_fuze
75
76bootimg_fuze.o: bootimg_fuze.c
77 gcc -c -o bootimg_fuze.o bootimg_fuze.c
78
79# E200V2
80
81dualboot-e200v2.o: dualboot.S
82 arm-elf-gcc -DSANSA_E200V2 -c -o dualboot-e200v2.o dualboot.S
83
84dualboot-e200v2.elf: dualboot-e200v2.o
85 arm-elf-ld -e 0 -Ttext=0 -o dualboot-e200v2.elf dualboot-e200v2.o
86 43
87dualboot-e200v2.bin: dualboot-e200v2.elf
88 arm-elf-objcopy -O binary dualboot-e200v2.elf dualboot-e200v2.bin
89 44
90bootimg_e200v2.c bootimg_e200v2.h: dualboot-e200v2.bin bin2c
91 ./bin2c dualboot-e200v2.bin bootimg_e200v2
92 45
93bootimg_e200v2.o: bootimg_e200v2.c 46$(LIBUCL):
94 gcc -c -o bootimg_e200v2.o bootimg_e200v2.c 47 make -C ../../tools/ucl/src libucl.a
95 48
96# M200V4 49md5.o: md5.c md5.h
97 50 $(CC) $(CFLAGS) -c -o md5.o -W -Wall md5.c
98dualboot-m200v4.o: dualboot.S
99 arm-elf-gcc -DSANSA_M200V4 -c -o dualboot-m200v4.o dualboot.S
100 51
101dualboot-m200v4.elf: dualboot-m200v4.o 52mkamsboot.o: mkamsboot.c $(BOOTHEADERS) nrv2e_d8.h md5.h
102 arm-elf-ld -e 0 -Ttext=0 -o dualboot-m200v4.elf dualboot-m200v4.o 53 $(CC) $(CFLAGS) -c -o mkamsboot.o -W -Wall mkamsboot.c
103 54
104dualboot-m200v4.bin: dualboot-m200v4.elf 55mkamsboot: mkamsboot.o $(BOOTIMAGES) nrv2e_d8.o md5.o $(LIBUCL)
105 arm-elf-objcopy -O binary dualboot-m200v4.elf dualboot-m200v4.bin 56 $(CC) -o mkamsboot mkamsboot.o $(BOOTIMAGES) nrv2e_d8.o md5.o $(LIBUCL)
106 57
107bootimg_m200v4.c bootimg_m200v4.h: dualboot-m200v4.bin bin2c 58# Rules for the ARM code embedded in mkamsboot - assemble, link, then extract
108 ./bin2c dualboot-m200v4.bin bootimg_m200v4 59# the binary code and finally convert to .c/.h for linking with mkamsboot
109 60
110bootimg_m200v4.o: bootimg_m200v4.c 61%.arm-elf: %.arm-o
111 gcc -c -o bootimg_m200v4.o bootimg_m200v4.c 62 arm-elf-ld -e 0 -Ttext=0 -o $@ $<
112
113# Rules for the ucl unpack function
114nrv2e_d8.o: nrv2e_d8.S
115 arm-elf-gcc -DPURE_THUMB -c -o nrv2e_d8.o nrv2e_d8.S
116 63
117# NOTE: this function has no absolute references, so the link address (-e) 64%.arm-bin: %.arm-elf
118# is irrelevant. We just link at address 0, but it can run from anywhere. 65 arm-elf-objcopy -O binary $< $@
119nrv2e_d8.elf: nrv2e_d8.o
120 arm-elf-ld -e 0 -Ttext=0 -o nrv2e_d8.elf nrv2e_d8.o
121 66
122nrv2e_d8.bin: nrv2e_d8.elf 67%.c %.h: %.arm-bin bin2c
123 arm-elf-objcopy -O binary nrv2e_d8.elf nrv2e_d8.bin 68 ./bin2c $< $*
124 69
125uclimg.c uclimg.h: nrv2e_d8.bin bin2c 70# Generic host rule.
126 ./bin2c nrv2e_d8.bin uclimg 71%.o: %.c
72 $(CC) $(CFLAGS) -c -o $@ $<
127 73
128uclimg.o: uclimg.c 74# Cancel the implicit .S -> .o rule
129 gcc -c -o uclimg.o uclimg.c 75%.o: %.S
130 76
131bin2c: bin2c.c 77bin2c: bin2c.c
132 gcc -o bin2c bin2c.c 78 $(CC) -o bin2c bin2c.c
133 79
134clean: 80clean:
135 rm -f mkamsboot mkamsboot.o nrv2e_d8.o nrv2e_d8.elf nrv2e_d8.bin *~ \ 81 rm -f mkamsboot mkamsboot.o nrv2e_d8.arm-o nrv2e_d8.arm-elf \
136 bin2c uclimg.c uclimg.h uclimg.o md5.o \ 82 nrv2e_d8.arm-bin *~ bin2c nrv2e_d8.c nrv2e_d8.h nrv2e_d8.o md5.o \
137 $(BOOTIMAGES) $(CLIPFILES) $(E200V2FILES) $(M200V4FILES) $(FUZEFILES) 83 $(BOOTIMAGES) $(CLIPFILES) $(E200V2FILES) $(M200V4FILES) $(FUZEFILES)
diff --git a/rbutil/mkamsboot/mkamsboot.c b/rbutil/mkamsboot/mkamsboot.c
index e9438b317d..52cb2cece9 100644
--- a/rbutil/mkamsboot/mkamsboot.c
+++ b/rbutil/mkamsboot/mkamsboot.c
@@ -86,13 +86,13 @@ execution to the uncompressed firmware.
86#include <ucl/ucl.h> 86#include <ucl/ucl.h>
87 87
88/* Headers for ARM code binaries */ 88/* Headers for ARM code binaries */
89#include "uclimg.h" 89#include "nrv2e_d8.h"
90#include "md5.h" 90#include "md5.h"
91 91
92#include "bootimg_clip.h" 92#include "dualboot_clip.h"
93#include "bootimg_e200v2.h" 93#include "dualboot_e200v2.h"
94#include "bootimg_fuze.h" 94#include "dualboot_fuze.h"
95#include "bootimg_m200v4.h" 95#include "dualboot_m200v4.h"
96 96
97/* Win32 compatibility */ 97/* Win32 compatibility */
98#ifndef O_BINARY 98#ifndef O_BINARY
@@ -126,21 +126,21 @@ static const char* model_names[] =
126 126
127static const unsigned char* bootloaders[] = 127static const unsigned char* bootloaders[] =
128{ 128{
129 bootimg_fuze, 129 dualboot_fuze,
130 bootimg_clip, 130 dualboot_clip,
131 NULL, 131 NULL,
132 bootimg_e200v2, 132 dualboot_e200v2,
133 bootimg_m200v4, 133 dualboot_m200v4,
134 NULL 134 NULL
135}; 135};
136 136
137static const int bootloader_sizes[] = 137static const int bootloader_sizes[] =
138{ 138{
139 sizeof(bootimg_fuze), 139 sizeof(dualboot_fuze),
140 sizeof(bootimg_clip), 140 sizeof(dualboot_clip),
141 0, 141 0,
142 sizeof(bootimg_e200v2), 142 sizeof(dualboot_e200v2),
143 sizeof(bootimg_m200v4), 143 sizeof(dualboot_m200v4),
144 0 144 0
145}; 145};
146 146
@@ -540,9 +540,9 @@ int main(int argc, char* argv[])
540 fprintf(stderr,"[INFO] Bootloader size: %d bytes\n",(int)bootloader_size); 540 fprintf(stderr,"[INFO] Bootloader size: %d bytes\n",(int)bootloader_size);
541 fprintf(stderr,"[INFO] Packed bootloader size: %d bytes\n",rb_packedsize); 541 fprintf(stderr,"[INFO] Packed bootloader size: %d bytes\n",rb_packedsize);
542 fprintf(stderr,"[INFO] Dual-boot function size: %d bytes\n",bootloader_sizes[model]); 542 fprintf(stderr,"[INFO] Dual-boot function size: %d bytes\n",bootloader_sizes[model]);
543 fprintf(stderr,"[INFO] UCL unpack function size: %d bytes\n",sizeof(uclimg)); 543 fprintf(stderr,"[INFO] UCL unpack function size: %d bytes\n",sizeof(nrv2e_d8));
544 544
545 totalsize = bootloader_sizes[model] + sizeof(uclimg) + of_packedsize + 545 totalsize = bootloader_sizes[model] + sizeof(nrv2e_d8) + of_packedsize +
546 rb_packedsize; 546 rb_packedsize;
547 547
548 fprintf(stderr,"[INFO] Total size of new image: %d bytes\n",totalsize); 548 fprintf(stderr,"[INFO] Total size of new image: %d bytes\n",totalsize);
@@ -566,8 +566,8 @@ int main(int argc, char* argv[])
566 p = buf + 0x400 + firmware_size; 566 p = buf + 0x400 + firmware_size;
567 567
568 /* 1 - UCL unpack function */ 568 /* 1 - UCL unpack function */
569 p -= sizeof(uclimg); 569 p -= sizeof(nrv2e_d8);
570 memcpy(p, uclimg, sizeof(uclimg)); 570 memcpy(p, nrv2e_d8, sizeof(nrv2e_d8));
571 571
572 /* 2 - Compressed copy of original firmware */ 572 /* 2 - Compressed copy of original firmware */
573 p -= of_packedsize; 573 p -= of_packedsize;
@@ -583,14 +583,14 @@ int main(int argc, char* argv[])
583 583
584 /* UCL unpack function */ 584 /* UCL unpack function */
585 put_uint32le(&buf[0x420], firmware_size - 1); 585 put_uint32le(&buf[0x420], firmware_size - 1);
586 put_uint32le(&buf[0x424], sizeof(uclimg)); 586 put_uint32le(&buf[0x424], sizeof(nrv2e_d8));
587 587
588 /* Compressed original firmware image */ 588 /* Compressed original firmware image */
589 put_uint32le(&buf[0x428], firmware_size - sizeof(uclimg) - 1); 589 put_uint32le(&buf[0x428], firmware_size - sizeof(nrv2e_d8) - 1);
590 put_uint32le(&buf[0x42c], of_packedsize); 590 put_uint32le(&buf[0x42c], of_packedsize);
591 591
592 /* Compressed Rockbox image */ 592 /* Compressed Rockbox image */
593 put_uint32le(&buf[0x430], firmware_size - sizeof(uclimg) - of_packedsize - 1); 593 put_uint32le(&buf[0x430], firmware_size - sizeof(nrv2e_d8) - of_packedsize - 1);
594 put_uint32le(&buf[0x434], rb_packedsize); 594 put_uint32le(&buf[0x434], rb_packedsize);
595 595
596 596