@@ -52,7 +52,7 @@ if [[ -z "$OUTPUT" ]]; then
52
52
fi
53
53
54
54
if [[ " $USERSFS " ]]; then
55
- USERSFS =` blkid $USERSFS -o export | grep UUID`
55
+ USERSFS_UUID =` blkid $USERSFS -o export | grep UUID`
56
56
fi
57
57
58
58
@@ -63,7 +63,7 @@ source $TOOLCHAIN/scripts/adjustEnvVars.sh || exit $?
63
63
64
64
if [[ -d $OBJECTS ]]; then
65
65
chmod -R u+w $OBJECTS &&
66
- rm -rf $OBJECTS || exit 10
66
+ rm -rf $OBJECTS || exit 2
67
67
fi
68
68
69
69
73
73
74
74
EFIBOOT_DIR=$OBJECTS /efiboot
75
75
EFIBOOT_IMG=$EFIBOOT_DIR .img
76
+ DISK_DIR=$OBJECTS /disk
76
77
IMG_DIR=$OBJECTS /img
77
78
ISO_DIR=$OBJECTS /iso
78
79
@@ -88,22 +89,46 @@ SRC_DIR=$__dirname/../deps/syslinux
88
89
# Wrap the system up and pack it
89
90
#
90
91
92
+ # Disk images are a composition of bootfs and usersfs
93
+ function createDiskImage() {
94
+ BOOTFS=1ドル
95
+
96
+ STEP_DIR=$DISK_DIR
97
+
98
+ # ToDo: sizes would need to be on cylinders and retain DOS compatibility
99
+ # http://elinux.org/RPi_Advanced_Setup#Advanced_SD_card_setup
100
+
101
+ SIZE_MBR=$(( 2 * 1024 )) # Reserve first megabyte for raspi. Is this needed?
102
+ SIZE_BOOTFS=$( stat -L -c%s " $BOOTFS " )
103
+ SIZE_BOOTFS=$(( $SIZE_BOOTFS / 512 ))
104
+ START_USERSFS=$(( $SIZE_MBR + $SIZE_BOOTFS ))
105
+
106
+ dd if=/dev/zero of=$OUTPUT count=$SIZE_MBR &&
107
+ dd if=$BOOTFS of=$OUTPUT seek=$SIZE_MBR &&
108
+ dd if=$USERSFS of=$OUTPUT seek=$START_USERSFS || exit 10
109
+
110
+ eval " echo \" $( < $__dirname /../resources/sfdisk.txt) \" " | \
111
+ /sbin/sfdisk -uS --force $OUTPUT || exit 11
112
+ }
113
+
91
114
function createPartitionImage() {
115
+ BOOTFS=1ドル
116
+
92
117
# Copy kernel and initramfs on the partition image
93
118
94
119
cp $INITRAMFS $STEP_DIR /initram.gz || exit 20
95
120
96
121
# Create partition image
97
122
98
- mkdir -p ` dirname $OUTPUT ` || exit 21
123
+ mkdir -p ` dirname $BOOTFS ` || exit 21
99
124
100
125
# Size in KB
101
126
# DISK_SIZE=`du -ks $STEP_DIR | cut -f1`
102
127
DISK_SIZE=$(( 32 * 1024 ))
103
128
104
129
genfatfs -b $DISK_SIZE \
105
130
--root $STEP_DIR \
106
- $OUTPUT || exit 22
131
+ $BOOTFS || exit 22
107
132
}
108
133
109
134
function createEfiImage() {
@@ -137,6 +162,8 @@ function createEfiImage() {
137
162
}
138
163
139
164
function createIsoImage() {
165
+ STEP_DIR=$ISO_DIR
166
+
140
167
mkdir -p $STEP_DIR || exit 40
141
168
142
169
eval " echo \" $( < $__dirname /../resources/syslinux.cfg) \" " \
@@ -178,108 +205,150 @@ function createIsoImage() {
178
205
$SRC_DIR /bios/utils/isohybrid $OUTPUT || exit 47
179
206
}
180
207
208
+ function createTar() {
209
+ STEP_DIR=$OUTPUT
210
+
211
+ mkdir -p ` dirname $STEP_DIR ` || err 50
212
+
213
+ gunzip $BAREBONES -c | tar --delete init | gzip > $STEP_DIR &&
214
+ cat $INITRAMFS >> $STEP_DIR || err 51
215
+ }
216
+
217
+
218
+ function img_pc() {
219
+ STEP_DIR=$IMG_DIR
220
+
221
+ mkdir -p $STEP_DIR || err 60
222
+
223
+ BOOTFS=1ドル
224
+
225
+ # Copy SysLinux files
226
+
227
+ eval " echo \" $( < $__dirname /../resources/syslinux.cfg) \" " \
228
+ > $STEP_DIR /syslinux.cfg || exit 61
229
+
230
+ cp $KERNEL $STEP_DIR || exit 62
231
+
232
+ createPartitionImage $BOOTFS || exit $?
233
+
234
+ $SRC_DIR /bios/mtools/syslinux --install $BOOTFS || exit 63
235
+ }
236
+
237
+ function img_raspi() {
238
+ STEP_DIR=$IMG_DIR
239
+
240
+ mkdir -p $STEP_DIR || err 70
241
+
242
+ BOOTFS=1ドル
243
+
244
+ # Copy Raspberry PI extra files
245
+ # http://elinux.org/RPi_Advanced_Setup#Setting_up_the_boot_partition
246
+ #
247
+ # bootcode.bin, fixup.dat, start.elf, cmdline.txt
248
+ (
249
+ cd $STEP_DIR || exit 71
250
+
251
+ wget https://github.com/raspberrypi/firmware/raw/master/boot/bootcode.bin || exit 72
252
+ wget https://github.com/raspberrypi/firmware/raw/master/boot/fixup.dat || exit 73
253
+ wget https://github.com/raspberrypi/firmware/raw/master/boot/start.elf || exit 74
254
+ ) || err $?
255
+
256
+ cp $__dirname /../resources/config.txt $DTS $STEP_DIR || exit 75
257
+
258
+ case $MACHINE in
259
+ raspi)
260
+ cp $KERNEL $STEP_DIR /kernel.img || exit 76
261
+ ;;
262
+
263
+ raspi2)
264
+ cp $KERNEL $STEP_DIR /kernel7.img || exit 77
265
+ ;;
266
+
267
+ raspi3)
268
+ echo arm_control=0x200 >> $STEP_DIR /config.txt &&
269
+ cp $KERNEL $STEP_DIR /kernel7.img || exit 78
270
+ ;;
271
+
272
+ * )
273
+ echo -e " ${RED} Unknown MACHINE '$MACHINE '${CLR} "
274
+ exit 79
275
+ ;;
276
+ esac
277
+
278
+ createPartitionImage $BOOTFS || exit $?
279
+ }
280
+
181
281
182
282
case $MACHINE in
183
283
pc)
184
284
case $FORMAT in
185
- img) # FAT partition
186
- STEP_DIR=$IMG_DIR
187
-
188
- mkdir -p $STEP_DIR || err 50
189
-
190
- # Copy SysLinux files
285
+ disk)
286
+ if [[ -z " $USERSFS " ]]; then
287
+ echo " -U is mandatory"
288
+ exit 80
289
+ fi
191
290
192
- eval " echo \" $( < $__dirname /../resources/syslinux.cfg) \" " \
193
- > $STEP_DIR /syslinux.cfg || exit 51
291
+ BOOTFS=$DISK_DIR /bootfs.img
194
292
195
- cp $KERNEL $STEP_DIR || exit 52
293
+ img_pc $BOOTFS &&
294
+ createDiskImage $BOOTFS || exit $?
196
295
197
- createPartitionImage || exit $?
296
+ dd bs=440 count=1 conv=notrunc \
297
+ if=$SRC_DIR /bios/mbr/mbr.bin of=$OUTPUT || err 81
298
+ ;;
198
299
199
- $SRC_DIR /bios/mtools/syslinux --install $OUTPUT || exit 53
300
+ img) # FAT partition
301
+ img_pc $OUTPUT || exit $?
200
302
;;
201
303
202
304
iso) # Hybrid ISO image for CDs and USB pendrives
203
- STEP_DIR=$ISO_DIR
204
-
205
305
createIsoImage || exit $?
206
306
;;
207
307
208
308
tar) # Combine both barebones and initramfs tarfiles in a single one
209
- STEP_DIR=$OUTPUT
210
-
211
- mkdir -p ` dirname $STEP_DIR ` || err 60
212
-
213
- gunzip $BAREBONES -c | tar --delete init | gzip > $STEP_DIR &&
214
- cat $INITRAMFS >> $STEP_DIR || err 61
309
+ createTar || exit $?
215
310
;;
216
311
217
312
* )
218
313
echo -e " ${RED} Unknown FORMAT '$FORMAT '${CLR} "
219
- exit 70
314
+ exit 90
220
315
;;
221
316
esac
222
317
;;
223
318
224
319
raspi|raspi2|raspi3) # FAT partition for Raspberry PI
225
320
if [[ -z " $DTS " ]]; then
226
321
echo " -D is mandatory for MACHINE '$MACHINE '"
227
- exit 80
322
+ exit 100
228
323
fi
229
324
230
325
case $FORMAT in
231
- img)
232
- STEP_DIR=$IMG_DIR
233
-
234
- mkdir -p $STEP_DIR || err 90
326
+ disk)
327
+ if [[ -z " $USERSFS " ]]; then
328
+ echo " -U is mandatory"
329
+ exit 110
330
+ fi
235
331
236
- # Copy Raspberry PI extra files
237
- # http://elinux.org/RPi_Advanced_Setup#Setting_up_the_boot_partition
238
- #
239
- # bootcode.bin, fixup.dat, start.elf, cmdline.txt
240
- (
241
- cd $STEP_DIR || exit 91
332
+ BOOTFS=$DISK_DIR /bootfs.img
242
333
243
- wget https://github.com/raspberrypi/firmware/raw/master/boot/bootcode.bin || exit 92
244
- wget https://github.com/raspberrypi/firmware/raw/master/boot/fixup.dat || exit 93
245
- wget https://github.com/raspberrypi/firmware/raw/master/boot/start.elf || exit 94
246
- ) || err $?
247
-
248
- cp $__dirname /../resources/config.txt $DTS $STEP_DIR || exit 95
249
-
250
- case $MACHINE in
251
- raspi)
252
- cp $KERNEL $STEP_DIR /kernel.img || exit 96
253
- ;;
254
-
255
- raspi2)
256
- cp $KERNEL $STEP_DIR /kernel7.img || exit 97
257
- ;;
258
-
259
- raspi3)
260
- echo arm_control=0x200 >> $STEP_DIR /config.txt &&
261
- cp $KERNEL $STEP_DIR /kernel7.img || exit 98
262
- ;;
263
-
264
- * )
265
- echo -e " ${RED} Unknown MACHINE '$MACHINE '${CLR} "
266
- exit 99
267
- ;;
268
- esac
334
+ img_raspi $BOOTFS &&
335
+ createDiskImage $BOOTFS || exit $?
336
+ ;;
269
337
270
- createPartitionImage || exit $?
338
+ img)
339
+ img_raspi $OUTPUT || exit $?
271
340
;;
272
341
273
342
* )
274
343
echo -e " ${RED} Unknown FORMAT '$FORMAT '${CLR} "
275
- exit 100
344
+ exit 120
276
345
;;
277
346
esac
278
347
;;
279
348
280
349
* )
281
350
echo -e " ${RED} Unknown MACHINE '$MACHINE '${CLR} "
282
- exit 110
351
+ exit 130
283
352
;;
284
353
esac
285
354
0 commit comments