Page MenuHomeFreeBSD

D4403.diff
No OneTemporary

D4403.diff

Index: head/usr.bin/mkimg/mbr.c
===================================================================
--- head/usr.bin/mkimg/mbr.c
+++ head/usr.bin/mkimg/mbr.c
@@ -92,7 +92,12 @@
TAILQ_FOREACH(part, &partlist, link) {
size = round_track(part->size);
dp = dpbase + part->index;
- dp->dp_flag = (part->index == 0 && bootcode != NULL) ? 0x80 : 0;
+ if (active_partition != 0)
+ dp->dp_flag =
+ (part->index + 1 == active_partition) ? 0x80 : 0;
+ else
+ dp->dp_flag =
+ (part->index == 0 && bootcode != NULL) ? 0x80 : 0;
mbr_chs(&dp->dp_scyl, &dp->dp_shd, &dp->dp_ssect,
part->block);
dp->dp_typ = ALIAS_TYPE2INT(part->type);
Index: head/usr.bin/mkimg/mkimg.h
===================================================================
--- head/usr.bin/mkimg/mkimg.h
+++ head/usr.bin/mkimg/mkimg.h
@@ -59,6 +59,7 @@
extern u_int nsecs;
extern u_int secsz; /* Logical block size. */
extern u_int blksz; /* Physical block size. */
+extern uint32_t active_partition;
static inline lba_t
round_block(lba_t n)
Index: head/usr.bin/mkimg/mkimg.1
===================================================================
--- head/usr.bin/mkimg/mkimg.1
+++ head/usr.bin/mkimg/mkimg.1
@@ -40,6 +40,7 @@
.Op Fl c Ar capacity
.Op Fl f Ar format
.Op Fl o Ar outfile
+.Op Fl a Ar active
.Op Fl v
.Op Fl y
.Op Fl s Ar scheme Op Fl p Ar partition ...
@@ -119,7 +120,7 @@
partitioning scheme with the
.Fl s
option, but without specifying any partitions.
-When the size required to for all the partitions is larger than the
+When the size required for all the partitions is larger than the
given capacity, then the disk image will be larger than the capacity
given.
.Pp
@@ -139,6 +140,26 @@
.Nm
utility will create images that are identical.
.Pp
+The
+.Ar active
+option marks a partition as active, if the partitioning
+scheme supports it.
+Currently, only the
+.Ar mbr
+scheme supports this concept.
+By default,
+.Nm
+will only mark the first partition as active when boot code is
+specified.
+Use the
+.Ar active
+option to override the active partition.
+The number specified corresponds to the number after the 's' in the
+partition's
+.Xr geom 8
+name.
+No partitions are marked active when the value is 0.
+.Pp
A set of long options exist to query about the
.Nm
utility itself.
Index: head/usr.bin/mkimg/mkimg.c
===================================================================
--- head/usr.bin/mkimg/mkimg.c
+++ head/usr.bin/mkimg/mkimg.c
@@ -70,6 +70,7 @@
u_int nsecs = 1;
u_int secsz = 512;
u_int blksz = 0;
+uint32_t active_partition = 0;
static void
print_formats(int usage)
@@ -145,6 +146,7 @@
fprintf(stderr, "\t--schemes\t- list partition schemes\n");
fprintf(stderr, "\t--version\t- show version information\n");
fputc('\n', stderr);
+ fprintf(stderr, "\t-a <num>\t- mark num'th partion as active\n");
fprintf(stderr, "\t-b <file>\t- file containing boot code\n");
fprintf(stderr, "\t-c <num>\t- capacity (in bytes) of the disk\n");
fprintf(stderr, "\t-f <format>\n");
@@ -468,9 +470,14 @@
bcfd = -1;
outfd = 1; /* Write to stdout by default */
- while ((c = getopt_long(argc, argv, "b:c:f:o:p:s:vyH:P:S:T:",
+ while ((c = getopt_long(argc, argv, "a:b:c:f:o:p:s:vyH:P:S:T:",
longopts, NULL)) != -1) {
switch (c) {
+ case 'a': /* ACTIVE PARTITION, if supported */
+ error = parse_uint32(&active_partition, 1, 100, optarg);
+ if (error)
+ errc(EX_DATAERR, error, "Partition ordinal");
+ break;
case 'b': /* BOOT CODE */
if (bcfd != -1)
usage("multiple bootcode given");

File Metadata

Mime Type
text/plain
Expires
Sun, Apr 12, 3:22 AM (5 h, 1 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
31325852
Default Alt Text
D4403.diff (3 KB)

Event Timeline