From: "Gabriel L. Somlo" <gsomlo@gmail.com>
To: edk2-devel@ml01.01.org
Cc: lersek@redhat.com, jordan.l.justen@intel.com,
reza.jelveh@tuhh.de, agraf@suse.de, kraxel@redhat.com
Subject: [RFC PATCH 0/6] OVMF: HFS+ (and Mac OS X boot)
Date: Mon, 6 Mar 2017 22:14:19 -0500 [thread overview]
Message-ID: <1488856465-8965-1-git-send-email-gsomlo@gmail.com> (raw)
This series is intended to restart the conversation re. adding
boot support for Mac OS X to QEMU via OVMF.
The *last* three patches represent what's left of Reza's excellent
work on getting OVMF to support booting OS X. They are rebased to
the point where they still apply cleanly and work, but I haven't
made any significant changes to them beyond that.
The *first* three patches (1-3 of 6) provide the BSD-licensed HFS+
filesystem support required by Reza's work:
- patch 1/6: After a bit of archaeology, I managed to isolate
the original EFI "File System Wrapper" (FSW) files
released under the BSD by the "rEFIt" project; One
additional file, also BSD-licensed, was imported
from the "rEFInd" project.
The FSW is an abstraction layer that facilitates
the creation of a file system driver by providing
a set methods for mount/unmount/readdir/etc.
- patch 2/6: fix a few compiler errors and other discrepancies to
facilitate integrating FSW into EDK2/OVMF.
- patch 3/6: A BSD-licensed implementation of an FSW HFS+ driver.
Based on Apple's HFS+ specification (TN1150), this is
a minimalistic, bare-bones set of FSW methods capable
of locating and loading files from an HFS+ volume.
Lots of functionality (e.g. stat, readdir, hard/sym
links, or accessing files with more than 8 fragments)
is unimplemented at this time. I only implemented the
methods necessary to support loading Apple's boot.efi
and kernel.
For any extra features (such as stat, readdir, etc.)
I'd need to figure out how to navigate around on a
mounted volume (e.g. from the UEFI shell ?) to cause
the rest of the methods to be called, so I could test
whether they work or not. Particularly support for
fragmented files -- I'd have to create one somehow
(against OS X and HFS's best efforts to prevent it),
then cause it to be accessed from the UEFI shell to
test that whatever I'm implementing actually works.
Any "EDK2 filesystem developer's primer" on how to
do those things would be immensely helpful at this point.
Also, I would like some feedback and advice on where to go from here.
At this time, neither the FSW wrapper nor the HFS+ driver I wrote comply
with EDK2's coding standards. Before I start working on that, it would
be helpful to find out whether the FSW layer is of any interest to EDK2
as a way to facilitate adding support for arbitrary new filesystems.
If not, it might be worth factoring out the common bits and roll the
the whole thing up into a standalone HFS+ driver, which would be a
significantly different direction to go.
The series is also available on GitHub, in my "macboot" branch:
https://github.com/gsomlo/edk2/tree/macboot
A set of instructions on how to get things working is available here:
http://www.contrib.andrew.cmu.edu/~somlo/OSXKVM/
Thanks in advance for any feedback, advice, etc.
--Gabriel
Gabriel L. Somlo (6):
FswHfsPlus: add File System Wrapper (FSW) interface code
FswHfsPlus: connect FSW code to EDK2, fix compile discrepancies
FswHfsPlus: implement FSW driver for the HFS+ file system
EdkCompatibilityPkg: allow ConsoleControl protocol to be used
OvmfPkg: add Apple boot support
OvmfPkg: enable AppleSupport library for Ovmf firmware
EdkCompatibilityPkg/EdkCompatibilityPkg.dec | 2 +
OvmfPkg/FswHfsPlus/FswHfsPlus.inf | 57 ++
OvmfPkg/FswHfsPlus/fsw_base.h | 158 +++
OvmfPkg/FswHfsPlus/fsw_core.c | 929 +++++++++++++++++
OvmfPkg/FswHfsPlus/fsw_core.h | 517 ++++++++++
OvmfPkg/FswHfsPlus/fsw_efi.c | 1040 ++++++++++++++++++++
OvmfPkg/FswHfsPlus/fsw_efi.h | 102 ++
OvmfPkg/FswHfsPlus/fsw_efi_base.h | 81 ++
OvmfPkg/FswHfsPlus/fsw_efi_edk2_base.h | 76 ++
OvmfPkg/FswHfsPlus/fsw_efi_lib.c | 129 +++
OvmfPkg/FswHfsPlus/fsw_hfsplus.c | 535 ++++++++++
OvmfPkg/FswHfsPlus/fsw_hfsplus.h | 238 +++++
OvmfPkg/FswHfsPlus/fsw_lib.c | 294 ++++++
OvmfPkg/FswHfsPlus/fsw_strfunc.h | 453 +++++++++
OvmfPkg/Include/Library/AppleSupportLib.h | 28 +
OvmfPkg/Library/AppleSupportLib/AppleSupport.c | 107 ++
.../Library/AppleSupportLib/AppleSupportLib.inf | 50 +
OvmfPkg/Library/AppleSupportLib/Bds.c | 151 +++
OvmfPkg/Library/AppleSupportLib/Bds.h | 21 +
OvmfPkg/Library/AppleSupportLib/Common.h | 24 +
OvmfPkg/Library/AppleSupportLib/Console.c | 86 ++
OvmfPkg/Library/AppleSupportLib/Console.h | 28 +
OvmfPkg/Library/AppleSupportLib/Datahub.c | 104 ++
OvmfPkg/Library/AppleSupportLib/Datahub.h | 32 +
.../Library/PlatformBootManagerLib/BdsPlatform.c | 10 +
.../Library/PlatformBootManagerLib/BdsPlatform.h | 1 +
.../PlatformBootManagerLib.inf | 1 +
OvmfPkg/OvmfPkgIa32.dsc | 8 +
OvmfPkg/OvmfPkgIa32.fdf | 3 +
OvmfPkg/OvmfPkgIa32X64.dsc | 8 +
OvmfPkg/OvmfPkgIa32X64.fdf | 3 +
OvmfPkg/OvmfPkgX64.dsc | 8 +
OvmfPkg/OvmfPkgX64.fdf | 3 +
33 files changed, 5287 insertions(+)
create mode 100644 OvmfPkg/FswHfsPlus/FswHfsPlus.inf
create mode 100644 OvmfPkg/FswHfsPlus/fsw_base.h
create mode 100644 OvmfPkg/FswHfsPlus/fsw_core.c
create mode 100644 OvmfPkg/FswHfsPlus/fsw_core.h
create mode 100644 OvmfPkg/FswHfsPlus/fsw_efi.c
create mode 100644 OvmfPkg/FswHfsPlus/fsw_efi.h
create mode 100644 OvmfPkg/FswHfsPlus/fsw_efi_base.h
create mode 100644 OvmfPkg/FswHfsPlus/fsw_efi_edk2_base.h
create mode 100644 OvmfPkg/FswHfsPlus/fsw_efi_lib.c
create mode 100644 OvmfPkg/FswHfsPlus/fsw_hfsplus.c
create mode 100644 OvmfPkg/FswHfsPlus/fsw_hfsplus.h
create mode 100644 OvmfPkg/FswHfsPlus/fsw_lib.c
create mode 100644 OvmfPkg/FswHfsPlus/fsw_strfunc.h
create mode 100644 OvmfPkg/Include/Library/AppleSupportLib.h
create mode 100644 OvmfPkg/Library/AppleSupportLib/AppleSupport.c
create mode 100644 OvmfPkg/Library/AppleSupportLib/AppleSupportLib.inf
create mode 100644 OvmfPkg/Library/AppleSupportLib/Bds.c
create mode 100644 OvmfPkg/Library/AppleSupportLib/Bds.h
create mode 100644 OvmfPkg/Library/AppleSupportLib/Common.h
create mode 100644 OvmfPkg/Library/AppleSupportLib/Console.c
create mode 100644 OvmfPkg/Library/AppleSupportLib/Console.h
create mode 100644 OvmfPkg/Library/AppleSupportLib/Datahub.c
create mode 100644 OvmfPkg/Library/AppleSupportLib/Datahub.h
--
2.7.4
next reply other threads:[~2017-03-07 3:14 UTC|newest]
Thread overview: 12+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-03-07 3:14 Gabriel L. Somlo [this message]
2017-03-07 3:14 ` [RFC PATCH 1/6] FswHfsPlus: add File System Wrapper (FSW) interface code Gabriel L. Somlo
2017-03-07 3:14 ` [RFC PATCH 2/6] FswHfsPlus: connect FSW code to EDK2, fix compile discrepancies Gabriel L. Somlo
2017-03-07 3:14 ` [RFC PATCH 3/6] FswHfsPlus: implement FSW driver for the HFS+ file system Gabriel L. Somlo
2017-03-07 3:14 ` [RFC PATCH 4/6] EdkCompatibilityPkg: allow ConsoleControl protocol to be used Gabriel L. Somlo
2017-03-07 3:14 ` [RFC PATCH 5/6] OvmfPkg: add Apple boot support Gabriel L. Somlo
2017-03-07 16:14 ` Laszlo Ersek
2017-03-07 3:14 ` [RFC PATCH 6/6] OvmfPkg: enable AppleSupport library for Ovmf firmware Gabriel L. Somlo
2017-03-07 16:21 ` Laszlo Ersek
2017-03-07 15:41 ` [RFC PATCH 0/6] OVMF: HFS+ (and Mac OS X boot) Laszlo Ersek
2017-03-29 23:22 ` Phil Dennis-Jordan
2017-03-31 20:01 ` Gabriel L. Somlo
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-list from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1488856465-8965-1-git-send-email-gsomlo@gmail.com \
--to=devel@edk2.groups.io \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox