diff options
Diffstat (limited to 'rbutil')
-rw-r--r-- | rbutil/mkamsboot/Makefile | 144 | ||||
-rw-r--r-- | rbutil/mkamsboot/mkamsboot.c | 40 |
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 @@ | |||
1 | CC=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 | |||
4 | CFLAGS=-I../../tools/ucl/include | 4 | CFLAGS=-I../../tools/ucl/include |
5 | LIBUCL=../../tools/ucl/src/libucl.a | 5 | LIBUCL=../../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 | ||
13 | BOOTIMAGES = bootimg_clip.o bootimg_e200v2.o bootimg_m200v4.o bootimg_fuze.o | 11 | BOOTIMAGES = dualboot_clip.o dualboot_e200v2.o dualboot_m200v4.o dualboot_fuze.o |
14 | BOOTHEADERS = bootimg_clip.h bootimg_e200v2.h bootimg_m200v4.h bootimg_fuze.h | 12 | BOOTHEADERS = dualboot_clip.h dualboot_e200v2.h dualboot_m200v4.h dualboot_fuze.h |
15 | 13 | ||
16 | CLIPFILES = dualboot-clip.o dualboot-clip.elf dualboot-clip.o \ | 14 | CLIPFILES = 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 | ||
19 | E200V2FILES = dualboot-e200v2.o dualboot-e200v2.elf dualboot-e200v2.o \ | 16 | E200V2FILES = 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 | ||
22 | M200V4FILES = dualboot-m200v4.o dualboot-m200v4.elf dualboot-m200v4.o \ | 19 | M200V4FILES = 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 | ||
25 | FUZEFILES = dualboot-fuze.o dualboot-fuze.elf dualboot-fuze.o \ | 22 | FUZEFILES = 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 | ||
28 | all: mkamsboot | 24 | all: mkamsboot |
29 | 25 | ||
30 | $(LIBUCL): | 26 | # Dualboot bootloaders |
31 | make -C ../../tools/ucl/src libucl.a | ||
32 | |||
33 | md5.o: md5.c md5.h | ||
34 | gcc $(CFLAGS) -c -o md5.o -W -Wall md5.c | ||
35 | |||
36 | mkamsboot.o: mkamsboot.c $(BOOTHEADERS) uclimg.h md5.h | ||
37 | gcc $(CFLAGS) -c -o mkamsboot.o -W -Wall mkamsboot.c | ||
38 | |||
39 | mkamsboot: 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 | |||
47 | dualboot-clip.o: dualboot.S | ||
48 | arm-elf-gcc -DSANSA_CLIP -c -o dualboot-clip.o dualboot.S | ||
49 | |||
50 | dualboot-clip.elf: dualboot-clip.o | ||
51 | arm-elf-ld -e 0 -Ttext=0 -o dualboot-clip.elf dualboot-clip.o | ||
52 | |||
53 | dualboot-clip.bin: dualboot-clip.elf | ||
54 | arm-elf-objcopy -O binary dualboot-clip.elf dualboot-clip.bin | ||
55 | 27 | ||
56 | bootimg_clip.c bootimg_clip.h: dualboot-clip.bin bin2c | 28 | dualboot_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 | ||
59 | bootimg_clip.o: bootimg_clip.c | 31 | dualboot_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 | 34 | dualboot_e200v2.arm-o: dualboot.S |
35 | arm-elf-gcc -DSANSA_E200V2 -c -o dualboot_e200v2.arm-o dualboot.S | ||
63 | 36 | ||
64 | dualboot-fuze.o: dualboot.S | 37 | dualboot_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 | ||
67 | dualboot-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 | 41 | nrv2e_d8.arm-o: nrv2e_d8.S |
69 | 42 | arm-elf-gcc -DPURE_THUMB -c -o nrv2e_d8.arm-o nrv2e_d8.S | |
70 | dualboot-fuze.bin: dualboot-fuze.elf | ||
71 | arm-elf-objcopy -O binary dualboot-fuze.elf dualboot-fuze.bin | ||
72 | |||
73 | bootimg_fuze.c bootimg_fuze.h: dualboot-fuze.bin bin2c | ||
74 | ./bin2c dualboot-fuze.bin bootimg_fuze | ||
75 | |||
76 | bootimg_fuze.o: bootimg_fuze.c | ||
77 | gcc -c -o bootimg_fuze.o bootimg_fuze.c | ||
78 | |||
79 | # E200V2 | ||
80 | |||
81 | dualboot-e200v2.o: dualboot.S | ||
82 | arm-elf-gcc -DSANSA_E200V2 -c -o dualboot-e200v2.o dualboot.S | ||
83 | |||
84 | dualboot-e200v2.elf: dualboot-e200v2.o | ||
85 | arm-elf-ld -e 0 -Ttext=0 -o dualboot-e200v2.elf dualboot-e200v2.o | ||
86 | 43 | ||
87 | dualboot-e200v2.bin: dualboot-e200v2.elf | ||
88 | arm-elf-objcopy -O binary dualboot-e200v2.elf dualboot-e200v2.bin | ||
89 | 44 | ||
90 | bootimg_e200v2.c bootimg_e200v2.h: dualboot-e200v2.bin bin2c | ||
91 | ./bin2c dualboot-e200v2.bin bootimg_e200v2 | ||
92 | 45 | ||
93 | bootimg_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 | 49 | md5.o: md5.c md5.h |
97 | 50 | $(CC) $(CFLAGS) -c -o md5.o -W -Wall md5.c | |
98 | dualboot-m200v4.o: dualboot.S | ||
99 | arm-elf-gcc -DSANSA_M200V4 -c -o dualboot-m200v4.o dualboot.S | ||
100 | 51 | ||
101 | dualboot-m200v4.elf: dualboot-m200v4.o | 52 | mkamsboot.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 | ||
104 | dualboot-m200v4.bin: dualboot-m200v4.elf | 55 | mkamsboot: 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 | ||
107 | bootimg_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 | ||
110 | bootimg_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 | ||
114 | nrv2e_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 $< $@ |
119 | nrv2e_d8.elf: nrv2e_d8.o | ||
120 | arm-elf-ld -e 0 -Ttext=0 -o nrv2e_d8.elf nrv2e_d8.o | ||
121 | 66 | ||
122 | nrv2e_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 | ||
125 | uclimg.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 | ||
128 | uclimg.o: uclimg.c | 74 | # Cancel the implicit .S -> .o rule |
129 | gcc -c -o uclimg.o uclimg.c | 75 | %.o: %.S |
130 | 76 | ||
131 | bin2c: bin2c.c | 77 | bin2c: bin2c.c |
132 | gcc -o bin2c bin2c.c | 78 | $(CC) -o bin2c bin2c.c |
133 | 79 | ||
134 | clean: | 80 | clean: |
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 | ||
127 | static const unsigned char* bootloaders[] = | 127 | static 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 | ||
137 | static const int bootloader_sizes[] = | 137 | static 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 | ||