mirror of
https://github.com/freebsd/freebsd-src
synced 2024-09-29 13:15:05 +00:00
libdisk is now `adult':
. install libdisk.h into /usr/include . add a (preliminary) manpage, mostly featured after phk's comments in libdisk.h
This commit is contained in:
parent
3176ba80c8
commit
6db03f75e4
Notes:
svn2git
2020-12-20 02:59:44 +00:00
svn path=/head/; revision=14665
|
@ -9,16 +9,53 @@ NOPROFILE= yes
|
||||||
NOSHARED= yes
|
NOSHARED= yes
|
||||||
NOPIC= yes
|
NOPIC= yes
|
||||||
|
|
||||||
|
MAN3= libdisk.3
|
||||||
|
MLINKS+= libdisk.3 \
|
||||||
|
libdisk.3 Open_Disk.3 \
|
||||||
|
libdisk.3 Clone_Disk.3 \
|
||||||
|
libdisk.3 Free_Disk.3 \
|
||||||
|
libdisk.3 Debug_Disk.3 \
|
||||||
|
libdisk.3 Set_Bios_Geom.3 \
|
||||||
|
libdisk.3 Delete_Chunk.3 \
|
||||||
|
libdisk.3 Collapse_Disk.3 \
|
||||||
|
libdisk.3 Collapse_Chunk.3 \
|
||||||
|
libdisk.3 Create_Chunk.3 \
|
||||||
|
libdisk.3 All_FreeBSD.3 \
|
||||||
|
libdisk.3 CheckRules.3 \
|
||||||
|
libdisk.3 Disk_Names.3 \
|
||||||
|
libdisk.3 Set_Boot_Mgr.3 \
|
||||||
|
libdisk.3 Set_Boot_Blocks.3 \
|
||||||
|
libdisk.3 Write_Disk.3 \
|
||||||
|
libdisk.3 Cyl_Aligned.3 \
|
||||||
|
libdisk.3 Next_Cyl_Aligned.3 \
|
||||||
|
libdisk.3 Prev_Cyl_Aligned.3 \
|
||||||
|
libdisk.3 Track_Aligned.3 \
|
||||||
|
libdisk.3 Next_Track_Aligned.3 \
|
||||||
|
libdisk.3 Prev_Track_Aligned.3 \
|
||||||
|
libdisk.3 Create_Chunk_DWIM.3 \
|
||||||
|
libdisk.3 MakeDev.3 \
|
||||||
|
libdisk.3 MakeDevDisk.3 \
|
||||||
|
libdisk.3 ShowChunkFlags.3 \
|
||||||
|
libdisk.3 ChunkCanBeRoot.3
|
||||||
|
|
||||||
.include <bsd.lib.mk>
|
.include <bsd.lib.mk>
|
||||||
|
|
||||||
BOOTS=/usr/mdec
|
BOOTS=/usr/mdec
|
||||||
|
|
||||||
data.c: libdisk.h ${BOOTS}/boot1 ${BOOTS}/boot2
|
data.c: ${.CURDIR}/libdisk.h ${BOOTS}/boot1 ${BOOTS}/boot2
|
||||||
file2c 'const unsigned char boot1[] = {' '};' \
|
file2c 'const unsigned char boot1[] = {' '};' \
|
||||||
< ${BOOTS}/boot1 > tmp.c
|
< ${BOOTS}/boot1 > tmp.c
|
||||||
file2c 'const unsigned char boot2[] = {' '};' \
|
file2c 'const unsigned char boot2[] = {' '};' \
|
||||||
< ${BOOTS}/boot2 >> tmp.c
|
< ${BOOTS}/boot2 >> tmp.c
|
||||||
mv tmp.c data.c
|
mv tmp.c data.c
|
||||||
|
|
||||||
|
beforeinstall:
|
||||||
|
@${ECHO} installing libdisk.h
|
||||||
|
@cd ${.CURDIR}; \
|
||||||
|
cmp -s libdisk.h ${DESTDIR}/usr/include/libdisk.h || \
|
||||||
|
${INSTALL} -c -o ${BINOWN} -g ${BINGRP} -m 444 libdisk.h \
|
||||||
|
${DESTDIR}/usr/include/libdisk.h
|
||||||
|
|
||||||
|
|
||||||
tst01: tst01.o libdisk.a
|
tst01: tst01.o libdisk.a
|
||||||
cc ${CFLAGS} -static tst01.o -o tst01 libdisk.a
|
cc ${CFLAGS} -static tst01.o -o tst01 libdisk.a
|
||||||
|
|
315
lib/libdisk/libdisk.3
Normal file
315
lib/libdisk/libdisk.3
Normal file
|
@ -0,0 +1,315 @@
|
||||||
|
.\"
|
||||||
|
.\" Copyright (c) 1996 Joerg Wunsch
|
||||||
|
.\"
|
||||||
|
.\" All rights reserved.
|
||||||
|
.\"
|
||||||
|
.\" This program is free software.
|
||||||
|
.\"
|
||||||
|
.\" Redistribution and use in source and binary forms, with or without
|
||||||
|
.\" modification, are permitted provided that the following conditions
|
||||||
|
.\" are met:
|
||||||
|
.\" 1. Redistributions of source code must retain the above copyright
|
||||||
|
.\" notice, this list of conditions and the following disclaimer.
|
||||||
|
.\" 2. Redistributions in binary form must reproduce the above copyright
|
||||||
|
.\" notice, this list of conditions and the following disclaimer in the
|
||||||
|
.\" documentation and/or other materials provided with the distribution.
|
||||||
|
.\"
|
||||||
|
.\" THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY EXPRESS OR
|
||||||
|
.\" IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
|
||||||
|
.\" OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
|
||||||
|
.\" IN NO EVENT SHALL THE DEVELOPERS BE LIABLE FOR ANY DIRECT, INDIRECT,
|
||||||
|
.\" INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
||||||
|
.\" NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||||
|
.\" DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||||
|
.\" THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||||
|
.\" (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
|
||||||
|
.\" THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
.\"
|
||||||
|
.\" $Id$
|
||||||
|
.\" "
|
||||||
|
.Dd March 15, 1996
|
||||||
|
.Dt LIBDISK 3
|
||||||
|
.Os
|
||||||
|
.Sh NAME
|
||||||
|
.Nm Open_Disk ,
|
||||||
|
.Nm Clone_Disk ,
|
||||||
|
.Nm Free_Disk ,
|
||||||
|
.Nm Debug_Disk ,
|
||||||
|
.Nm Set_Bios_Geom ,
|
||||||
|
.Nm Delete_Chunk ,
|
||||||
|
.Nm Collapse_Disk ,
|
||||||
|
.Nm Collapse_Chunk ,
|
||||||
|
.Nm Create_Chunk ,
|
||||||
|
.Nm All_FreeBSD ,
|
||||||
|
.Nm CheckRules ,
|
||||||
|
.Nm Disk_Names ,
|
||||||
|
.Nm Set_Boot_Mgr ,
|
||||||
|
.Nm Set_Boot_Blocks ,
|
||||||
|
.Nm Write_Disk ,
|
||||||
|
.Nm Cyl_Aligned ,
|
||||||
|
.Nm Next_Cyl_Aligned ,
|
||||||
|
.Nm Prev_Cyl_Aligned ,
|
||||||
|
.Nm Track_Aligned ,
|
||||||
|
.Nm Next_Track_Aligned ,
|
||||||
|
.Nm Prev_Track_Aligned ,
|
||||||
|
.Nm Create_Chunk_DWIM ,
|
||||||
|
.Nm MakeDev ,
|
||||||
|
.Nm MakeDevDisk ,
|
||||||
|
.Nm ShowChunkFlags ,
|
||||||
|
.Nm ChunkCanBeRoot ,
|
||||||
|
.Nd library interface to slice and partition labels
|
||||||
|
.Sh SYNOPSIS
|
||||||
|
.Fd #include <sys/types.h>
|
||||||
|
.Fd #include <libdisk.h>
|
||||||
|
.Ft struct disk *
|
||||||
|
.Fn Open_Disk "char *devname"
|
||||||
|
.Ft struct disk *
|
||||||
|
.Fn Clone_Disk "struct disk *disk"
|
||||||
|
.Ft void
|
||||||
|
.Fn Free_Disk "struct disk *disk"
|
||||||
|
.Ft void
|
||||||
|
.Fn Debug_Disk "struct disk *disk"
|
||||||
|
.Ft void
|
||||||
|
.Fn Set_Bios_Geom "struct disk *disk" "u_long cyl" "u_long heads" "u_long sects"
|
||||||
|
.Ft int
|
||||||
|
.Fn Delete_Chunk "struct disk *disk" "struct chunk *"
|
||||||
|
.Ft void
|
||||||
|
.Fn Collapse_Disk "struct disk *disk"
|
||||||
|
.Ft int
|
||||||
|
.Fn Collapse_Chunk "struct disk *disk" "struct chunk *chunk"
|
||||||
|
.Ft int
|
||||||
|
.Fn Create_Chunk "struct disk *disk" "u_long offset" "u_long size" "chunk_e type" "int subtype" "u_long flags"
|
||||||
|
.Ft void
|
||||||
|
.Fn All_FreeBSD "struct disk *d" "int force_all"
|
||||||
|
.Ft char *
|
||||||
|
.Fn CheckRules "struct disk *"
|
||||||
|
.Ft char **
|
||||||
|
.Fn Disk_Names "void"
|
||||||
|
.Ft void
|
||||||
|
.Fn Set_Boot_Mgr "struct disk *d" "u_char *bootmgr"
|
||||||
|
.Ft void
|
||||||
|
.Fn Set_Boot_Blocks "struct disk *d" "u_char *boot1" "u_char *boot2"
|
||||||
|
.Ft int
|
||||||
|
.Fn Write_Disk "struct disk *d"
|
||||||
|
.Ft int
|
||||||
|
.Fn Cyl_Aligned "struct disk *d" "u_long offset"
|
||||||
|
.Ft u_long
|
||||||
|
.Fn Next_Cyl_Aligned "struct disk *d" "u_long offset"
|
||||||
|
.Ft u_long
|
||||||
|
.Fn Prev_Cyl_Aligned "struct disk *d" "u_long offset"
|
||||||
|
.Ft int
|
||||||
|
.Fn Track_Aligned "struct disk *d" "u_long offset"
|
||||||
|
.Ft u_long
|
||||||
|
.Fn Next_Track_Aligned "struct disk *d" "u_long offset"
|
||||||
|
.Ft u_long
|
||||||
|
.Fn Prev_Track_Aligned "struct disk *d" "u_long offset"
|
||||||
|
.Ft struct chunk *
|
||||||
|
.Fn Create_Chunk_DWIM "struct disk *d" "struct chunk *parent" "u_long size" "chunk_e type" "int subtype" "u_long flags"
|
||||||
|
.Ft int
|
||||||
|
.Fn MakeDev "struct chunk *c" "char *path"
|
||||||
|
.Ft int
|
||||||
|
.Fn MakeDevDisk "struct disk *d,char *path"
|
||||||
|
.Ft char *
|
||||||
|
.Fn ShowChunkFlags "struct chunk *c"
|
||||||
|
.Ft char *
|
||||||
|
.Fn ChunkCanBeRoot "struct chunk *c"
|
||||||
|
.Sh DESCRIPTION
|
||||||
|
.Nm Libdisk
|
||||||
|
provides an interface to the low-level disk slice and partition labels.
|
||||||
|
Most functions operate with arguments of the types
|
||||||
|
.Ql struct disk ,
|
||||||
|
or
|
||||||
|
.Ql struct chunk .
|
||||||
|
.Pp
|
||||||
|
While both types are mostly opaque to the programmer, the internal
|
||||||
|
structure is mentioned below for the sake of completeness.
|
||||||
|
.Bd -literal -offset indent
|
||||||
|
struct disk {
|
||||||
|
char *name;
|
||||||
|
u_long flags;
|
||||||
|
u_long bios_cyl;
|
||||||
|
u_long bios_hd;
|
||||||
|
u_long bios_sect;
|
||||||
|
u_char *bootmgr;
|
||||||
|
u_char *boot1;
|
||||||
|
u_char *boot2;
|
||||||
|
struct chunk *chunks;
|
||||||
|
};
|
||||||
|
.Ed
|
||||||
|
The only flag value by now is
|
||||||
|
.Ql DISK_ON_TRACK ,
|
||||||
|
meaning that this disk is handled by the On-Track Disk Manager.
|
||||||
|
.Pp
|
||||||
|
.Bd -literal -offset indent
|
||||||
|
struct chunk {
|
||||||
|
struct chunk *next;
|
||||||
|
struct chunk *part;
|
||||||
|
struct disk *disk;
|
||||||
|
long offset;
|
||||||
|
u_long size;
|
||||||
|
u_long end;
|
||||||
|
char *name;
|
||||||
|
char *oname;
|
||||||
|
chunk_e type;
|
||||||
|
int subtype;
|
||||||
|
u_long flags;
|
||||||
|
void (*private_free)(void*);
|
||||||
|
void *(*private_clone)(void*);
|
||||||
|
void *private;
|
||||||
|
};
|
||||||
|
.Ed
|
||||||
|
The
|
||||||
|
.Ql type
|
||||||
|
field can be one of the following values:
|
||||||
|
.Ql whole, unknown, fat, freebsd, extended, part, unused .
|
||||||
|
.Pp
|
||||||
|
These are the valid
|
||||||
|
.Ql flag
|
||||||
|
values for a
|
||||||
|
.Ql struct chunk .
|
||||||
|
.Bl -tag -offset indent -width CHUNK_BSD_COMPATXX
|
||||||
|
.It CHUNK_PAST_1024
|
||||||
|
This chunk cannot be booted from because it extends past cylinder 1024.
|
||||||
|
.It CHUNK_BSD_COMPAT
|
||||||
|
This chunk is in the BSD-compatibility, and has a short name too, i.e.
|
||||||
|
.Ql wd0s4f -> wd0f .
|
||||||
|
.It CHUNK_BAD144
|
||||||
|
This chunk has bad144 mapping.
|
||||||
|
.It CHUNK_ALIGN
|
||||||
|
This chunk should be aligned.
|
||||||
|
.It CHUNK_IS_ROOT
|
||||||
|
This
|
||||||
|
.Ql part
|
||||||
|
is a rootfs, allocate partition
|
||||||
|
.Sq a .
|
||||||
|
.It CHUNK_ACTIVE
|
||||||
|
This is the active slice in the MBR.
|
||||||
|
.It CHUNK_FORCE_ALL
|
||||||
|
Force a dedicated disk for FreeBSD, bypassing all BIOS geometry
|
||||||
|
considerations.
|
||||||
|
.El
|
||||||
|
.Pp
|
||||||
|
The
|
||||||
|
.Ql private ,
|
||||||
|
.Ql private_free ,
|
||||||
|
and
|
||||||
|
.Ql private_clone
|
||||||
|
fields are for data private to the application, and the management
|
||||||
|
thereof. If the functions are not provided, no storage management is
|
||||||
|
done, cloning will just copy the pointer and freeing will just forget
|
||||||
|
it.
|
||||||
|
.Pp
|
||||||
|
.Fn Open_Disk
|
||||||
|
will open the named disk, and return populated tree.
|
||||||
|
.Pp
|
||||||
|
.Fn Clone_Disk
|
||||||
|
clones a copy of a tree. Useful for
|
||||||
|
.Dq Undo
|
||||||
|
functionality.
|
||||||
|
.Pp
|
||||||
|
.Fn Free_Disk
|
||||||
|
frees a tree made with
|
||||||
|
.Fn Open_Disk
|
||||||
|
or
|
||||||
|
.Fn Clone_Disk .
|
||||||
|
.Pp
|
||||||
|
.Fn Debug_Disk
|
||||||
|
prints the content of the tree to stdout.
|
||||||
|
.Pp
|
||||||
|
.Fn Set_Bios_Geom
|
||||||
|
sets the geometry the bios uses.
|
||||||
|
.Pp
|
||||||
|
.Fn Delete_Chunk
|
||||||
|
frees a chunk of disk_space.
|
||||||
|
.Pp
|
||||||
|
.Fn Collapse_Disk,
|
||||||
|
and
|
||||||
|
.Fn Collapse_Chunk
|
||||||
|
are experimental, do not use.
|
||||||
|
.Pp
|
||||||
|
.Fn Create_Chunk
|
||||||
|
creates a chunk with the specified paramters.
|
||||||
|
.Pp
|
||||||
|
.Fn All_FreeBSD
|
||||||
|
makes one FreeBSD chunk covering the entire disk; if
|
||||||
|
.Ql force_all
|
||||||
|
is set, bypass all BIOS geometry considerations.
|
||||||
|
.Pp
|
||||||
|
.Fn CheckRules
|
||||||
|
returns
|
||||||
|
.Ql char*
|
||||||
|
to warnings about broken design rules in this disklayout.
|
||||||
|
.Pp
|
||||||
|
.Fn Disk_Names
|
||||||
|
returns
|
||||||
|
.Ql char**
|
||||||
|
with all disk's names (wd0, wd1 ...). You must free each pointer, as
|
||||||
|
well as the array by hand.
|
||||||
|
.Pp
|
||||||
|
.Fn Set_Boot_Mgr
|
||||||
|
sets this boot-manager for use on this disk. Gets written when
|
||||||
|
.Fn Write_Disk
|
||||||
|
is called.
|
||||||
|
.Pp
|
||||||
|
.Fn Set_Boot_Blocks
|
||||||
|
sets the boot-blocks for use on this disk. Gets written when
|
||||||
|
.Fn Write_Disk
|
||||||
|
is called.
|
||||||
|
.Pp
|
||||||
|
.Fn Write_Disk
|
||||||
|
writes all the MBRs, disklabels, bootblocks and boot managers.
|
||||||
|
.Pp
|
||||||
|
.Fn Cyl_Aligned
|
||||||
|
checks if
|
||||||
|
.Ql offset
|
||||||
|
is aligned on a cylinder according to the BIOS.
|
||||||
|
geometry.
|
||||||
|
.Pp
|
||||||
|
.Fn Next_Cyl_Aligned
|
||||||
|
rounds
|
||||||
|
.Ql offset
|
||||||
|
up to next cylinder according to the BIOS geometry.
|
||||||
|
.Pp
|
||||||
|
.Fn Prev_Cyl_Aligned
|
||||||
|
rounds
|
||||||
|
.Ql offset
|
||||||
|
down to previous cylinder according to the BIOS geometry.
|
||||||
|
.Pp
|
||||||
|
.Fn Track_Aligned
|
||||||
|
checks if
|
||||||
|
.Ql offset
|
||||||
|
is aligned on a track according to the BIOS geometry.
|
||||||
|
.Pp
|
||||||
|
.Fn Next_Track_Aligned
|
||||||
|
rounds
|
||||||
|
.Ql offset
|
||||||
|
up to next track according to the BIOS geometry.
|
||||||
|
.Pp
|
||||||
|
.Fn Prev_Track_Aligned
|
||||||
|
checks if
|
||||||
|
.Ql offset
|
||||||
|
is aligned on a track according to the BIOS geometry.
|
||||||
|
.Pp
|
||||||
|
.Fn Create_Chunk_DWIM
|
||||||
|
creates a partition inside the given parent of the given size, and
|
||||||
|
returns a pointer to it. The first unused chunk big enough is used.
|
||||||
|
.Pp
|
||||||
|
.Fn MakeDev
|
||||||
|
makes the device nodes for this chunk.
|
||||||
|
.Pp
|
||||||
|
.Fn MakeDevDisk
|
||||||
|
makes the device nodes for all chunks on this disk.
|
||||||
|
.Pp
|
||||||
|
.Fn ShowChunkFlags
|
||||||
|
returns a string to show flags.
|
||||||
|
.Pp
|
||||||
|
.Fn ChunkCanBeRoot
|
||||||
|
returns NULL if chunk can be
|
||||||
|
.Ql / .
|
||||||
|
.Sh AUTHOR
|
||||||
|
.Nm Libdisk
|
||||||
|
has been written by Poul-Henning Kamp.
|
||||||
|
.Pp
|
||||||
|
This man page by
|
||||||
|
.ie t J\(:org Wunsch.
|
||||||
|
.el Joerg Wunsch.
|
Loading…
Reference in a new issue