svn commit: r263699 - user/marcel/mkimg
Marcel Moolenaar
marcel at FreeBSD.org
Tue Mar 25 02:15:20 UTC 2014
Author: marcel
Date: Tue Mar 25 02:15:19 2014
New Revision: 263699
URL: http://svnweb.freebsd.org/changeset/base/263699
Log:
Mostly implement the vtoc8 scheme. The vtoc8 scheme uses cylinders for
the beginning of partitions, which makes it sensitive to geometry.
Again, we'll need to revisit this.
Modified:
user/marcel/mkimg/vtoc8.c
Modified: user/marcel/mkimg/vtoc8.c
==============================================================================
--- user/marcel/mkimg/vtoc8.c Tue Mar 25 01:34:39 2014 (r263698)
+++ user/marcel/mkimg/vtoc8.c Tue Mar 25 02:15:19 2014 (r263699)
@@ -28,14 +28,23 @@
__FBSDID("$FreeBSD$");
#include <sys/types.h>
+#include <sys/endian.h>
#include <sys/errno.h>
#include <sys/vtoc.h>
+#include <stdio.h>
#include <stdlib.h>
+#include <string.h>
+#include <unistd.h>
#include "mkimg.h"
#include "scheme.h"
static struct mkimg_alias vtoc8_aliases[] = {
+ { ALIAS_FREEBSD_NANDFS, ALIAS_INT2TYPE(VTOC_TAG_FREEBSD_NANDFS) },
+ { ALIAS_FREEBSD_SWAP, ALIAS_INT2TYPE(VTOC_TAG_FREEBSD_SWAP) },
+ { ALIAS_FREEBSD_UFS, ALIAS_INT2TYPE(VTOC_TAG_FREEBSD_UFS) },
+ { ALIAS_FREEBSD_VINUM, ALIAS_INT2TYPE(VTOC_TAG_FREEBSD_VINUM) },
+ { ALIAS_FREEBSD_ZFS, ALIAS_INT2TYPE(VTOC_TAG_FREEBSD_NANDFS) },
{ ALIAS_NONE, 0 }
};
@@ -49,9 +58,39 @@ vtoc8_metadata(u_int where)
}
static int
-vtoc8_write(int fd __unused, lba_t imgsz __unused, void *bootcode __unused)
+vtoc8_write(int fd, lba_t imgsz, void *bootcode __unused)
{
- return (ENOSYS);
+ struct vtoc8 vtoc8;
+ struct part *part;
+ int error;
+
+ memset(&vtoc8, 0, sizeof(vtoc8));
+ sprintf(vtoc8.ascii, "FreeBSD%lldM", (long long)(imgsz / 2048));
+ be32enc(&vtoc8.version, VTOC_VERSION);
+ be16enc(&vtoc8.nparts, VTOC8_NPARTS);
+ be32enc(&vtoc8.sanity, VTOC_SANITY);
+ be16enc(&vtoc8.rpm, 3600);
+ be16enc(&vtoc8.physcyls, 2); /* XXX */
+ be16enc(&vtoc8.ncyls, 0); /* XXX */
+ be16enc(&vtoc8.altcyls, 2);
+ be16enc(&vtoc8.nheads, 1); /* XXX */
+ be16enc(&vtoc8.nsecs, 1); /* XXX */
+ be16enc(&vtoc8.magic, VTOC_MAGIC);
+
+ STAILQ_FOREACH(part, &partlist, link) {
+ be16enc(&vtoc8.part[part->index].tag,
+ ALIAS_TYPE2INT(part->type));
+ be32enc(&vtoc8.map[part->index].cyl,
+ part->block); /* XXX */
+ be32enc(&vtoc8.map[part->index].nblks,
+ part->size);
+ }
+ error = mkimg_seek(fd, 0);
+ if (error == 0) {
+ if (write(fd, &vtoc8, sizeof(vtoc8)) != sizeof(vtoc8))
+ error = errno;
+ }
+ return (error);
}
static struct mkimg_scheme vtoc8_scheme = {
More information about the svn-src-user
mailing list