Mount your laptop as a UEFI volume. Serve UEFI files over HTTP.
mount — workstation folder appears as FSn: in the UEFI Shell.
serve — UEFI volumes browsable from any browser or curl.
axl-webfs is a UEFI toolkit for bidirectional file transfer between a
workstation and a UEFI host. No USB sticks, no BMC virtual media, no
.efi shuffling — build on your workstation, run immediately in the
UEFI Shell.
Two commands:
mount <url>— mount a workstation directory as a UEFI volume (FSn:). The Shell can read, write, and execute files in real time.serve— run an HTTP file server on the UEFI host, exposing local volumes tocurl, browsers, or network drive mounts.
Plus umount and list-nics.
On the workstation, serve a directory:
./scripts/xfer-server.py --root /path/to/efi/toolsIn the UEFI Shell, mount it and run something off it:
FS0:\> axl-webfs.efi mount http://10.0.0.5:8080/
FS0:\> ls fs1:
FS0:\> fs1:\IpmiTool.efi
axl-webfs builds against AximCode's AXL SDK
(no EDK2). Install a prebuilt SDK package — this gives you axl-cc,
headers, and the UEFI target libs for x64 and aa64.
Debian / Ubuntu:
curl -LO https://github.com/aximcode/axl-sdk-releases/releases/latest/download/axl-sdk.deb
sudo apt install ./axl-sdk.debFedora / RHEL:
curl -LO https://github.com/aximcode/axl-sdk-releases/releases/latest/download/axl-sdk.rpm
sudo dnf install ./axl-sdk.rpmPackages install under /usr. To build against a local SDK checkout
instead:
AXL_SDK=~/src/axl-sdk-releases/out makemake # axl-webfs.efi and axl-webfs-dxe.efi for x64
make ARCH=aa64 # AArch64
make cleanOutput lands in build/axl/<arch>/.
flowchart LR
WS["Workstation<br/>xfer-server.py"]
CURL["curl / browser"]
subgraph UEFI["UEFI Host"]
APP["axl-webfs.efi<br/>(application)<br/>serve · mount · umount · list-nics"]
DXE["axl-webfs-dxe.efi<br/>(DXE driver)<br/>EFI_FILE_PROTOCOL over HTTP"]
FS["FSn: volume"]
APP -. "loads on mount" .-> DXE
DXE --> FS
end
WS <-->|"HTTP (mount)"| DXE
CURL <-->|"HTTP (serve)"| APP
Two binaries, both built with axl-cc. All HTTP, JSON, event loop,
hash table, and network functionality comes from the AXL SDK.
See docs/Design.md for the full design.
- Live development — mount build output, run freshly compiled
.efifiles without manual transfer. - ARM64 server bootstrapping — mount tools on ARM64 servers where virtual media is unreliable.
- Log extraction —
servelets you pull crash dumps, SMBIOS tables, or any file from the EFI System Partition viacurl. - Bulk deployment — upload or download entire directory trees.
axl-webfs.efi mount <url>
axl-webfs.efi umount [handle]
axl-webfs.efi serve [-p port] [-n nic] [-t timeout]
[--read-only] [--write-only] [-v]
Flag details
| Flag | Default | Description |
|---|---|---|
-p |
8080 | Listen port |
-n |
auto | NIC index (use list-nics to find) |
-t |
0 | Idle timeout in seconds (0 = never) |
--read-only |
off | Block uploads and deletes |
--write-only |
off | Block downloads |
-v |
off | Verbose logging |
Prints NIC index, MAC, link status, and IP for every interface
axl-webfs can see. Use this to pick a -n value for serve or to
diagnose connectivity.
The companion for mount. Python 3 stdlib only, no external deps.
./scripts/xfer-server.py # current directory
./scripts/xfer-server.py --root /path --port 9090 # custom root/port
./scripts/xfer-server.py --read-only # block uploads/deletesscripts/test.sh # host-side tests against xfer-server.py
scripts/test.sh --qemu # add QEMU integration tests (X64)
scripts/test.sh --aarch64 # add AARCH64 QEMU testsQEMU tests use run-qemu.sh, which ships with the AXL SDK source
tree but not the .deb/.rpm. Point AXL_SDK_SRC at an
axl-sdk-releases
checkout to enable them:
AXL_SDK_SRC=~/src/axl-sdk-releases scripts/test.sh --qemuSome ARM64 server firmware doesn't auto-connect the network stack.
axl-webfs handles this by calling ConnectController on SNP handles
before NIC discovery. Use list-nics to verify link status if
networking isn't working.
Both GIFs are checked in and regenerable:
demo-mount.gif— rendered by vhs from docs/assets/demo-mount.tape, using the narrative scripts under scripts/demo-pane-*.sh.demo-serve.gif— realaxl-webfs.efi servebooted in QEMU; pages captured with headless Chrome and stitched by ffmpeg. See scripts/demo-serve.sh.
make demo # regenerate both
make demo-mount # just the mount GIF (vhs, ttyd, tmux, ffmpeg)
AXL_SDK_SRC=~/src/axl-sdk-releases make demo-serve
# just the serve GIF (QEMU, google-chrome, ffmpeg)- CONTRIBUTING.md — build, test, and patch-review conventions.
- SECURITY.md — how to report vulnerabilities.
Apache-2.0 — see LICENSE and NOTICE.
Built on the AXL SDK.