📄 bootblock.h
字号:
/* $NetBSD: bootblock.h,v 1.24 2004/03/22 07:11:00 lukem Exp $ */
/*-
* Copyright (c) 2002-2004 The NetBSD Foundation, Inc.
* All rights reserved.
*
* 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.
* 3. All advertising materials mentioning features or use of this software
* must display the following acknowledgement:
* This product includes software developed by the NetBSD
* Foundation, Inc. and its contributors.
* 4. Neither the name of The NetBSD Foundation nor the names of its
* contributors may be used to endorse or promote products derived
* from this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
* ``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 FOUNDATION OR CONTRIBUTORS
* 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.
*/
/*-
* Copyright (C) 1993 Allen K. Briggs, Chris P. Caputo,
* Michael L. Finch, Bradley A. Grantham, and
* Lawrence A. Kesteloot
* All rights reserved.
*
* 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.
* 3. All advertising materials mentioning features or use of this software
* must display the following acknowledgement:
* This product includes software developed by the Alice Group.
* 4. The names of the Alice Group or any of its members may not be used
* to endorse or promote products derived from this software without
* specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE ALICE GROUP ``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 ALICE GROUP 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.
*
*/
/*
* Copyright (c) 1994, 1999 Christopher G. Demetriou
* All rights reserved.
*
* 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.
* 3. All advertising materials mentioning features or use of this software
* must display the following acknowledgement:
* This product includes software developed by Christopher G. Demetriou
* for the NetBSD Project.
* 4. The name of the author may not be used to endorse or promote products
* derived from this software without specific prior written permission
*
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``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 AUTHOR 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.
*/
/*
* Copyright (c) 1994 Rolf Grossmann
* All rights reserved.
*
* 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.
* 3. All advertising materials mentioning features or use of this software
* must display the following acknowledgement:
* This product includes software developed by Rolf Grossmann.
* 4. The name of the author may not be used to endorse or promote products
* derived from this software without specific prior written permission
*
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``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 AUTHOR 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.
*/
#ifndef _SYS_BOOTBLOCK_H
#define _SYS_BOOTBLOCK_H
#include "type.h"
#if 0 /* XXX ffsdrv */
#if !defined(__ASSEMBLER__)
#if defined(_KERNEL) || defined(_STANDALONE)
#include <sys/stdint.h>
#else
#include <stdint.h>
#endif
#endif /* !defined(__ASSEMBLER__) */
#endif
/* ------------------------------------------
* MBR (Master Boot Record) --
* definitions for systems that use MBRs
*/
/*
* Layout of boot records:
*
* Byte range Use Description
* ---------- --- -----------
*
* 0 - 2 FMP JMP xxx, NOP
* 3 - 10 FP OEM Name
*
* 11 - 61 FMP FAT12/16 BPB
* Whilst not strictly necessary for MBR,
* GRUB reserves this area
*
* 11 - 89 P FAT32 BPB
* (are we ever going to boot off this?)
*
*
* 62 - 217 FMP Boot code
*
* 90 - 217 P FAT32 boot code
*
* 218 - 223 M Win95b/98/me "drive time"
* http://www.geocities.com/thestarman3/asm/mbr/95BMEMBR.htm#MYST
* only changed if all 6 bytes are 0
*
* 224 - 436 FMP boot code (continued)
*
* 437 - 439 M WinNT/2K/XP MBR "boot language"
* http://www.geocities.com/thestarman3/asm/mbr/Win2kmbr.htm
* not needed by us
*
* 400 - 439 MP NetBSD: mbr_bootsel
*
* 440 - 443 M WinNT/2K/XP Drive Serial Number (NT DSN)
* http://www.geocities.com/thestarman3/asm/mbr/Win2kmbr.htm
*
* 444 - 445 FMP bootcode or unused
* NetBSD: mbr_bootsel_magic
*
* 446 - 509 M partition table
*
* 510 - 511 FMP magic number (0xAA55)
*
* Use:
* ----
* F Floppy boot sector
* M Master Boot Record
* P Partition Boot record
*
*/
/*
* MBR (Master Boot Record)
*/
#define MBR_BBSECTOR 0 /* MBR relative sector # */
#define MBR_BPB_OFFSET 11 /* offsetof(mbr_sector, mbr_bpb) */
#define MBR_BOOTCODE_OFFSET 90 /* offsetof(mbr_sector, mbr_bootcode) */
#define MBR_BS_OFFSET 400 /* offsetof(mbr_sector, mbr_bootsel) */
#define MBR_DSN_OFFSET 440 /* offsetof(mbr_sector, mbr_dsn) */
#define MBR_BS_MAGIC_OFFSET 444 /* offsetof(mbr_sector, mbr_bootsel_magic) */
#define MBR_PART_OFFSET 446 /* offsetof(mbr_sector, mbr_part[0]) */
#define MBR_MAGIC_OFFSET 510 /* offsetof(mbr_sector, mbr_magic) */
#define MBR_MAGIC 0xaa55 /* MBR magic number */
#define MBR_BS_MAGIC 0xb5e1 /* mbr_bootsel magic number */
#define MBR_PART_COUNT 4 /* Number of partitions in MBR */
#define MBR_BS_PARTNAMESIZE 8 /* Size of name mbr_bootsel nametab */
/* (excluding trailing NUL) */
/* values for mbr_partition.mbrp_flag */
#define MBR_PFLAG_ACTIVE 0x80 /* The active partition */
/* values for mbr_partition.mbrp_type */
#define MBR_PTYPE_FAT12 0x01 /* 12-bit FAT */
#define MBR_PTYPE_FAT16S 0x04 /* 16-bit FAT, less than 32M */
#define MBR_PTYPE_EXT 0x05 /* extended partition */
#define MBR_PTYPE_FAT16B 0x06 /* 16-bit FAT, more than 32M */
#define MBR_PTYPE_NTFS 0x07 /* OS/2 HPFS, NTFS, QNX2, Adv. UNIX */
#define MBR_PTYPE_FAT32 0x0b /* 32-bit FAT */
#define MBR_PTYPE_FAT32L 0x0c /* 32-bit FAT, LBA-mapped */
#define MBR_PTYPE_FAT16L 0x0e /* 16-bit FAT, LBA-mapped */
#define MBR_PTYPE_EXT_LBA 0x0f /* extended partition, LBA-mapped */
#define MBR_PTYPE_ONTRACK 0x54
#define MBR_PTYPE_LNXSWAP 0x82 /* Linux swap or Solaris */
#define MBR_PTYPE_LNXEXT2 0x83 /* Linux native */
#define MBR_PTYPE_EXT_LNX 0x85 /* Linux extended partition */
#define MBR_PTYPE_NTFSVOL 0x87 /* NTFS volume set or HPFS mirrored */
#define MBR_PTYPE_PREP 0x41 /* PReP */
#define MBR_PTYPE_386BSD 0xa5 /* 386BSD partition type */
#define MBR_PTYPE_APPLEUFS 0xa8 /* Apple UFS */
#define MBR_PTYPE_NETBSD 0xa9 /* NetBSD partition type */
#define MBR_PTYPE_OPENBSD 0xa6 /* OpenBSD partition type */
#define MBR_PSECT(s) ((s) & 0x3f)
#define MBR_PCYL(c, s) ((c) + (((s) & 0xc0) << 2))
#define MBR_IS_EXTENDED(x) ((x) == MBR_PTYPE_EXT || \
(x) == MBR_PTYPE_EXT_LBA || \
(x) == MBR_PTYPE_EXT_LNX)
/* values for mbr_bootsel.mbrbs_flags */
#define MBR_BS_ACTIVE 0x01 /* Bootselector active (or code present) */
#define MBR_BS_EXTINT13 0x02 /* Set by fdisk if LBA needed (deprecated) */
#define MBR_BS_READ_LBA 0x04 /* Force LBA reads - even for low numbers */
#define MBR_BS_EXTLBA 0x08 /* Extended ptn capable (LBA reads) */
#define MBR_BS_NEWMBR 0x80 /* New bootsel at offset 440 */
#if !defined(__ASSEMBLER__) /* { */
#pragma pack(1)
/*
* (x86) BIOS Parameter Block for FAT12
*/
struct mbr_bpbFAT12 {
uint16_t bpbBytesPerSec; /* bytes per sector */
uint8_t bpbSecPerClust; /* sectors per cluster */
uint16_t bpbResSectors; /* number of reserved sectors */
uint8_t bpbFATs; /* number of FATs */
uint16_t bpbRootDirEnts; /* number of root directory entries */
uint16_t bpbSectors; /* total number of sectors */
uint8_t bpbMedia; /* media descriptor */
uint16_t bpbFATsecs; /* number of sectors per FAT */
uint16_t bpbSecPerTrack; /* sectors per track */
uint16_t bpbHeads; /* number of heads */
uint16_t bpbHiddenSecs; /* # of hidden sectors */
}; /* __attribute__((__packed__)); */
/*
* (x86) BIOS Parameter Block for FAT16
*/
struct mbr_bpbFAT16 {
uint16_t bpbBytesPerSec; /* bytes per sector */
uint8_t bpbSecPerClust; /* sectors per cluster */
uint16_t bpbResSectors; /* number of reserved sectors */
uint8_t bpbFATs; /* number of FATs */
uint16_t bpbRootDirEnts; /* number of root directory entries */
uint16_t bpbSectors; /* total number of sectors */
uint8_t bpbMedia; /* media descriptor */
uint16_t bpbFATsecs; /* number of sectors per FAT */
uint16_t bpbSecPerTrack; /* sectors per track */
uint16_t bpbHeads; /* number of heads */
uint32_t bpbHiddenSecs; /* # of hidden sectors */
uint32_t bpbHugeSectors; /* # of sectors if bpbSectors == 0 */
uint8_t bsDrvNum; /* Int 0x13 drive number (e.g. 0x80) */
uint8_t bsReserved1; /* Reserved; set to 0 */
uint8_t bsBootSig; /* 0x29 if next 3 fields are present */
uint8_t bsVolID[4]; /* Volume serial number */
uint8_t bsVolLab[11]; /* Volume label */
uint8_t bsFileSysType[8];
/* "FAT12 ", "FAT16 ", "FAT " */
}; /* __attribute__((__packed__)); */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -