#
329059 |
|
09-Feb-2018 |
manu |
MFC r306325, r306329-r306330, r306333, r306620-r306622, r307544, r307550, r318137, r319125, r319295
r306325 by marcel: Replace the use of linker sets with constructors for both the formats and schemes. Formats and schemes are registered at runtime now, rather than collected at link time.
r306329 by marcel: Eliminate the use of EDOOFUS. The error code was used to signal programming errors, but is really a poor substitute for assert. And less portable as well.
r306330 by marcel: Avoid depending on the <sys/endian.h> header for le*enc and be*enc. Not only is the header unportable, the encoding/decoding functions are as well. Instead, duplicate the handful of small inlines we need into a private header called endian.h.
Aside: an alternative approach is to move the encoding/decoding functions to a separate system header. While the header is still nonportable, such an approach would make it possible to re-use the definitions by playing games with include paths. This may be the preferred approach if more (build) utilities need this. This change does not preclude that. In fact, it makes it easier.
r306333 by marcel: Portability changes: 1. macOS nor Linux have MAP_NOCORE nor MAP_NOSYNC. Define as 0. 2. macOS doesn't have SEEK_DATA nor SEEK_HOLE. Define as -1 so that lseek will return -1 (with errno set to EINVAL). 3. gcc correctly warns that error is assigned but not used in image_copyout_region(). Fix by returning on the first error.
r306620 by marcel: Replace STAILQ with TAILQ. TAILQs are portable enough that they can be used on both macOS and Linux. STAILQs are not. In particular, STAILQ_LAST does not next on Linux. Since neither STAILQ_FOREACH_SAFE nor TAILQ_FOREACH_SAFE exist on Linux, replace its use with a regular TAILQ_FOREACH. The _SAFE variant was only used for having the next pointer in a local variable.
r306621 by marcel: Prefer <stdint.h> over <sys/types.h>. While here remove redundant inclusion of <sys/queue.h>.
Move the inclusion of the disk partitioning headers out of order and inbetween standard headers and local header. They will change in a subsequent commit.
r306622 by marcel: Replace OFF_MAX with INT64_MAX. The former is defined on Linux.
r307544 by marcel: o Provide a private definition for UUIDs (mkimg_uuid_t) because UUIDs are not portable. o Move mkimg_uuid() to a new file and merge both gpt_uuid_enc() and vhd_uuid_enc() into a single mkimg_uuid_enc() that lives in the same file. o Move the OS-specific implementation of generating a UUID to osdep_uuidgen() and provide the implementations for FreeBSD, macOS and Linux. o Expect the partitioning scheme headers to be found by having a search to the directory in which the headers live. This avoids conflicts on non-FreeBSD machines.
r307550 by imp: Add a new flag to mkimg (-a num) to specify the active partition for those partitioning schemes that have this concept. Implement it as an override for mbr's setting 0x80 in the flags for the first partition when we have boot code.
Differential Revision: https://reviews.freebsd.org/D4403
r318137: mkimg: Add -C argument to specify maximum capacity
Add a -C option to specify a maximum capacity for the final image file. It is useful to control the size of the generated image for sdcard or when we will add dynamic size partition.
Add --capacity which is a shorthand to define min and max capacity at the same time.
Reviewed by: bapt, marcel, wblock (manpages) Sponsored by: Gandi.net Differential Revision: https://reviews.freebsd.org/D10509
r319125: mkimg: Correct an off by one error in the PMBR size
The PMBR last sector should be number of sector - 1 (As stated in UEFI Spec 2.6 page 118 table 17). This fixes warning printed by linux tools like parted or fdisk.
Sponsored by: Gandi.net
r319295 by ngie: Update the usr.bin/mkimg golden test output files after ^/head@r319125
^/head@r319125 changed the location of the backup pmbr, requiring the output files to be regenerated, since they're binary disk dumps.
The output files were regenerated with "make rebase"--fixed in ^/head@r319294.
MFC with: r319125, r319294 PR: 219673 Sponsored by: Dell EMC Isilon
|
#
328976 |
|
07-Feb-2018 |
manu |
Revert r328974, r307387 was not supposed to be part of it.
|
#
328974 |
|
07-Feb-2018 |
manu |
MFC r306325, r306329-r306330, r306333, r306620-r306622, r307387, r307544, r307550, r318137, r319125, r319295
r306325 by marcel: Replace the use of linker sets with constructors for both the formats and schemes. Formats and schemes are registered at runtime now, rather than collected at link time.
r306329 by marcel: Eliminate the use of EDOOFUS. The error code was used to signal programming errors, but is really a poor substitute for assert. And less portable as well.
r306330 by marcel: Avoid depending on the <sys/endian.h> header for le*enc and be*enc. Not only is the header unportable, the encoding/decoding functions are as well. Instead, duplicate the handful of small inlines we need into a private header called endian.h.
Aside: an alternative approach is to move the encoding/decoding functions to a separate system header. While the header is still nonportable, such an approach would make it possible to re-use the definitions by playing games with include paths. This may be the preferred approach if more (build) utilities need this. This change does not preclude that. In fact, it makes it easier.
r306333 by marcel: Portability changes: 1. macOS nor Linux have MAP_NOCORE nor MAP_NOSYNC. Define as 0. 2. macOS doesn't have SEEK_DATA nor SEEK_HOLE. Define as -1 so that lseek will return -1 (with errno set to EINVAL). 3. gcc correctly warns that error is assigned but not used in image_copyout_region(). Fix by returning on the first error.
r306620 by marcel: Replace STAILQ with TAILQ. TAILQs are portable enough that they can be used on both macOS and Linux. STAILQs are not. In particular, STAILQ_LAST does not next on Linux. Since neither STAILQ_FOREACH_SAFE nor TAILQ_FOREACH_SAFE exist on Linux, replace its use with a regular TAILQ_FOREACH. The _SAFE variant was only used for having the next pointer in a local variable.
r306621 by marcel: Prefer <stdint.h> over <sys/types.h>. While here remove redundant inclusion of <sys/queue.h>.
Move the inclusion of the disk partitioning headers out of order and inbetween standard headers and local header. They will change in a subsequent commit.
r306622 by marcel: Replace OFF_MAX with INT64_MAX. The former is defined on Linux.
r307387 by marcel: Switch to using the portable partition scheme headers.
r307544 by marcel: o Provide a private definition for UUIDs (mkimg_uuid_t) because UUIDs are not portable. o Move mkimg_uuid() to a new file and merge both gpt_uuid_enc() and vhd_uuid_enc() into a single mkimg_uuid_enc() that lives in the same file. o Move the OS-specific implementation of generating a UUID to osdep_uuidgen() and provide the implementations for FreeBSD, macOS and Linux. o Expect the partitioning scheme headers to be found by having a search to the directory in which the headers live. This avoids conflicts on non-FreeBSD machines.
r307550 by imp: Add a new flag to mkimg (-a num) to specify the active partition for those partitioning schemes that have this concept. Implement it as an override for mbr's setting 0x80 in the flags for the first partition when we have boot code.
Differential Revision: https://reviews.freebsd.org/D4403
r318137: mkimg: Add -C argument to specify maximum capacity
Add a -C option to specify a maximum capacity for the final image file. It is useful to control the size of the generated image for sdcard or when we will add dynamic size partition.
Add --capacity which is a shorthand to define min and max capacity at the same time.
Reviewed by: bapt, marcel, wblock (manpages) Sponsored by: Gandi.net Differential Revision: https://reviews.freebsd.org/D10509
r319125: mkimg: Correct an off by one error in the PMBR size
The PMBR last sector should be number of sector - 1 (As stated in UEFI Spec 2.6 page 118 table 17). This fixes warning printed by linux tools like parted or fdisk.
Sponsored by: Gandi.net
r319295 by ngie: Update the usr.bin/mkimg golden test output files after ^/head@r319125
^/head@r319125 changed the location of the backup pmbr, requiring the output files to be regenerated, since they're binary disk dumps.
The output files were regenerated with "make rebase"--fixed in ^/head@r319294.
MFC with: r319125, r319294 PR: 219673 Sponsored by: Dell EMC Isilon
|
#
302408 |
|
07-Jul-2016 |
gjb |
Copy head@r302406 to stable/11 as part of the 11.0-RELEASE cycle. Prune svn:mergeinfo from the new branch, as nothing has been merged here.
Additional commits post-branch will follow.
Approved by: re (implicit) Sponsored by: The FreeBSD Foundation |
#
272485 |
|
03-Oct-2014 |
marcel |
Add mkimg_chs() for those schemes that need the LBA broken down into cylinder, head and track numbers. Return ~0U for these values when mkimg wasn't given both -T and -H (i.e. no geometry) or the cylinder would be larger than the provided maximum.
Use mkimgs_chs() for the EBR, MBR and PC98 schemes to fill in the appropriate fields. Make sure to use a "rounded" size so that the partition is always a multiple of the track size. We reserved the room for it in the metadata callback so that's a valid thing to do.
Bump the mkimg version number. While doing that again: have mkimg.o depend on the Makefile so that a version change triggers a rebuild as needed.
|
#
271881 |
|
19-Sep-2014 |
marcel |
Fix partition alignment and image rounding when any of -P (block size), -T (track size) or -H (number of heads) is given: o scheme_metadata() always rounded to the block size. This is not always valid (e.g. vtoc8 that must have partitions start at cylinder boundaries). o The bsd and vtoc8 schemes "resized" the image to make it match the geometry, but since the geometry is an approximation and the size of the image computed from cylinders * heads * sectors is always smaller than the original image size, the partition information ran out of bounds.
The fix is to have scheme_metadata() simply pass it's arguments to the per-scheme metadata callback, so that schemes not only know where the metadata is to go, but also what the current block address is. It's now up to the per-scheme callback to reserve room for metadata and to make sure alignment and rounding is applied.
The BSD scheme now has the most elaborate alignment and rounding. Just to make the point: partitions are aligned on block boundaries, but the image is rounded to the next cyclinder boundary.
vtoc8 now properly has all partitions aligned (and rounded) to the cyclinder boundary.
Obtained from: Juniper Networks, Inc. MFC after: 3 days
|
#
266176 |
|
15-May-2014 |
marcel |
MFuser/marcel/mkimg: Add support for different output formats: 1. The output file that was previously written is now called the raw format. 2. Add the vmdk output format to create VMDK images.
When the format is not given, the raw output format is assumed.
|
#
265468 |
|
06-May-2014 |
marcel |
Add mkimg_write() which combines lseek(2) and write(2) and uses sector granularity for both offset and length. Have all schemes use mkimg_write() instead of mkimg_seek() followed by write(2).
Now that schemes don't use lseek(2) nor write(2) directly, it's easier to support output formats other than raw disks.
|
#
263923 |
|
29-Mar-2014 |
marcel |
Fix build on FreeBSD 9 where <sys/pc98.h> has the same defines as <sys/diskmbr.h> and not the unique defines introduced later.
|
#
263918 |
|
29-Mar-2014 |
marcel |
Add mkimg, a utility for making disk images from raw partition contents. The partitioning scheme can be one of the schemes supported by gpart.
Reviewed by: sjg Obtained from: Juniper Networks, Inc.
|
#
263700 |
|
25-Mar-2014 |
marcel |
Allow schemes to specify a maximum sector size. The minimum is fixed at 512. This allows checking of the sector size up-front when given on the command line.
|
#
263697 |
|
24-Mar-2014 |
marcel |
Mostly implement the pc98 scheme. The partition table has no LBA fields at all, so we're entirely dependent upon CHS addressing. And CHS addressing is what needs more work.
|
#
263653 |
|
22-Mar-2014 |
marcel |
Revamp: 1. Make secsz globally visible. 2. Have all code use the global secsz and nparts, rather than passing them around. 3. Introduce lba_t as the type to use when talking about block addresses. 4. Work on LBAs instead of offsets. There's just too much division with the sector size and there's really no value to use by offsets other than that is what lseek() wants. For that we now have mkimg_seek().
The bigger picture is that geometry (cylinders, heads, sectors/track) and also a possible physical sector size are to be globals that can be used from anyway. We really don't want to pass all that stuff as arguments to functions and then add __unused for most of them...
|
#
263537 |
|
21-Mar-2014 |
marcel |
Handle the -b option for specifying boot code that lives in the partitioning scheme's meta data. Implement it for GPT.
|
#
263487 |
|
21-Mar-2014 |
marcel |
Add more partition types (mostly just the FreeBSD ones) to GPT. Avoid having schemes use literal strings by introducing an enum as the intermediate representation (see geom_part).
|
#
263442 |
|
20-Mar-2014 |
marcel |
Add a scheme-specific write callback to write the metadata. While here: 1. Move FreeBSD-specific headers to a more centralized place, so that it's easier to port mkimg. 2. Remove inclusion of <uuid.h> where we don't need it (copy-pasted). 3. Check the partition data given on the command line before we do any I/O. 4. Add scheme_round() for rounding the partition size. 5. Have scheme_write call the scheme-specific write callback and have it propagate errors back to the caller.
|
#
263440 |
|
20-Mar-2014 |
marcel |
Replace *_get_leader() and *_get_trailer() with a single *_metadata(). This single function takes a where argument to indicate the kind of metadata to "size". This way we can also get rid of the "padding" field in the scheme structure. This should make it a little more understandable what's going on.
|
#
263409 |
|
19-Mar-2014 |
marcel |
Use linker sets to provide build-time selection of the schemes that need to be supported. Each scheme provides data and callbacks for handling the scheme-specifics. To this end, put each scheme in its own source file.
|