mirror of
https://github.com/CloverHackyColor/CloverBootloader.git
synced 2024-11-29 12:35:53 +01:00
150 lines
6.1 KiB
INI
150 lines
6.1 KiB
INI
## @file
|
|
# Ext4 Package
|
|
#
|
|
# UEFI Driver that produces the Simple File System Protocol for a partition that is formatted
|
|
# with the EXT4 file system.
|
|
# More details are available at: https://www.kernel.org/doc/html/v5.4/filesystems/ext4/index.html
|
|
#
|
|
# Copyright (c) 2021 Pedro Falcato
|
|
# SPDX-License-Identifier: BSD-2-Clause-Patent
|
|
#
|
|
# Layout of an EXT2/3/4 filesystem:
|
|
# (note: this driver has been developed using
|
|
# https://www.kernel.org/doc/html/latest/filesystems/ext4/index.html as
|
|
# documentation).
|
|
#
|
|
# An ext2/3/4 filesystem (here on out referred to as simply an ext4 filesystem,
|
|
# due to the similarities) is composed of various concepts:
|
|
#
|
|
# 1) Superblock
|
|
# The superblock is the structure near (1024 bytes offset from the start)
|
|
# the start of the partition, and describes the filesystem in general.
|
|
# Here, we get to know the size of the filesystem's blocks, which features
|
|
# it supports or not, whether it's been cleanly unmounted, how many blocks
|
|
# we have, etc.
|
|
#
|
|
# 2) Block groups
|
|
# EXT4 filesystems are divided into block groups, and each block group covers
|
|
# s_blocks_per_group(8 * Block Size) blocks. Each block group has an
|
|
# associated block group descriptor; these are present directly after the
|
|
# superblock. Each block group descriptor contains the location of the
|
|
# inode table, and the inode and block bitmaps (note these bitmaps are only
|
|
# a block long, which gets us the 8 * Block Size formula covered previously).
|
|
#
|
|
# 3) Blocks
|
|
# The ext4 filesystem is divided in blocks, of size s_log_block_size ^ 1024.
|
|
# Blocks can be allocated using individual block groups's bitmaps. Note
|
|
# that block 0 is invalid and its presence on extents/block tables means
|
|
# it's part of a file hole, and that particular location must be read as
|
|
# a block full of zeros.
|
|
#
|
|
# 4) Inodes
|
|
# The ext4 filesystem divides files/directories into inodes (originally
|
|
# index nodes). Each file/socket/symlink/directory/etc (here on out referred
|
|
# to as a file, since there is no distinction under the ext4 filesystem) is
|
|
# stored as a /nameless/ inode, that is stored in some block group's inode
|
|
# table. Each inode has s_inode_size size (or GOOD_OLD_INODE_SIZE if it's
|
|
# an old filesystem), and holds various metadata about the file. Since the
|
|
# largest inode structure right now is ~160 bytes, the rest of the inode
|
|
# contains inline extended attributes. Inodes' data is stored using either
|
|
# data blocks (under ext2/3) or extents (under ext4).
|
|
#
|
|
# 5) Extents
|
|
# Ext4 inodes store data in extents. These let N contiguous logical blocks
|
|
# that are represented by N contiguous physical blocks be represented by a
|
|
# single extent structure, which minimizes filesystem metadata bloat and
|
|
# speeds up block mapping (particularly due to the fact that high-quality
|
|
# ext4 implementations like linux's try /really/ hard to make the file
|
|
# contiguous, so it's common to have files with almost 0 fragmentation).
|
|
# Inodes that use extents store them in a tree, and the top of the tree
|
|
# is stored on i_data. The tree's leaves always start with an
|
|
# EXT4_EXTENT_HEADER and contain EXT4_EXTENT_INDEX on eh_depth != 0 and
|
|
# EXT4_EXTENT on eh_depth = 0; these entries are always sorted by logical
|
|
# block.
|
|
#
|
|
# 6) Directories
|
|
# Ext4 directories are files that store name -> inode mappings for the
|
|
# logical directory; this is where files get their names, which means ext4
|
|
# inodes do not themselves have names, since they can be linked (present)
|
|
# multiple times with different names. Directories can store entries in two
|
|
# different ways:
|
|
# 1) Classical linear directories: They store entries as a mostly-linked
|
|
# mostly-list of EXT4_DIR_ENTRY.
|
|
# 2) Hash tree directories: These are used for larger directories, with
|
|
# hundreds of entries, and are designed in a backwards compatible way.
|
|
# These are not yet implemented in the Ext4Dxe driver.
|
|
#
|
|
# 7) Journal
|
|
# Ext3/4 filesystems have a journal to help protect the filesystem against
|
|
# system crashes. This is not yet implemented in Ext4Dxe but is described
|
|
# in detail in the Linux kernel's documentation.
|
|
##
|
|
|
|
|
|
[Defines]
|
|
INF_VERSION = 0x00010005
|
|
BASE_NAME = Ext4Dxe
|
|
MODULE_UNI_FILE = Ext4Dxe.uni
|
|
FILE_GUID = 75F2B676-D73B-45CB-B7C1-303C7F4E6FD6
|
|
MODULE_TYPE = UEFI_DRIVER
|
|
VERSION_STRING = 1.0
|
|
|
|
ENTRY_POINT = Ext4EntryPoint
|
|
UNLOAD_IMAGE = Ext4Unload
|
|
|
|
#
|
|
# The following information is for reference only and not required by the build tools.
|
|
#
|
|
# VALID_ARCHITECTURES = IA32 X64 EBC
|
|
#
|
|
|
|
[Sources]
|
|
Ext4Dxe.c
|
|
Partition.c
|
|
DiskUtil.c
|
|
Superblock.c
|
|
BlockGroup.c
|
|
Inode.c
|
|
Directory.c
|
|
Extents.c
|
|
File.c
|
|
Symlink.c
|
|
Collation.c
|
|
Ext4Disk.h
|
|
Ext4Dxe.h
|
|
BlockMap.c
|
|
|
|
[Packages]
|
|
MdePkg/MdePkg.dec
|
|
RedfishPkg/RedfishPkg.dec
|
|
|
|
[LibraryClasses]
|
|
UefiRuntimeServicesTableLib
|
|
UefiBootServicesTableLib
|
|
MemoryAllocationLib
|
|
BaseMemoryLib
|
|
BaseLib
|
|
UefiLib
|
|
UefiDriverEntryPoint
|
|
DebugLib
|
|
PcdLib
|
|
OrderedCollectionLib
|
|
BaseUcs2Utf8Lib
|
|
|
|
[Guids]
|
|
gEfiFileInfoGuid ## SOMETIMES_CONSUMES ## UNDEFINED
|
|
gEfiFileSystemInfoGuid ## SOMETIMES_CONSUMES ## UNDEFINED
|
|
gEfiFileSystemVolumeLabelInfoIdGuid ## SOMETIMES_CONSUMES ## UNDEFINED
|
|
|
|
[Protocols]
|
|
gEfiDiskIoProtocolGuid ## TO_START
|
|
gEfiDiskIo2ProtocolGuid ## TO_START
|
|
gEfiBlockIoProtocolGuid ## TO_START
|
|
gEfiSimpleFileSystemProtocolGuid ## BY_START
|
|
gEfiUnicodeCollationProtocolGuid ## TO_START
|
|
gEfiUnicodeCollation2ProtocolGuid ## TO_START
|
|
|
|
[Pcd]
|
|
gEfiMdePkgTokenSpaceGuid.PcdUefiVariableDefaultLang ## SOMETIMES_CONSUMES
|
|
gEfiMdePkgTokenSpaceGuid.PcdUefiVariableDefaultPlatformLang ## SOMETIMES_CONSUMES
|