Skip to main content

Parser, builder, and CLI for the Fritz!Box EVA kernel image format

Project description

eva-image-tool

PyPI Python License

Parser, builder, and CLI for the Fritz!Box EVA kernel image format — the TI record container used by AVM's EVA bootloader to hold LZMA-compressed Linux kernels. Pure Python standard library, zero runtime dependencies.

See docs/format-spec.md for the full format specification and docs/format-quickref.md for a one-page summary.

Install

pipx install eva-kernel-image     # recommended for CLI-only use
pip  install eva-kernel-image     # for library use

No external binaries required — everything runs on Python's stdlib lzma, zlib, struct, and argparse.

CLI quickstart

# Inspect an image
eva-image info kernel.image

# Verify checksums (exit 0 if valid, non-zero otherwise)
eva-image verify kernel.image

# Extract kernels + metadata.json to a directory
eva-image extract kernel.image -o extracted/

# Rebuild an image, optionally replacing kernel(s)
eva-image repack kernel.image -o new.image
eva-image repack kernel.image -o new.image \
    --kernel1 patched-primary.bin

# Pack an image from raw kernel binaries
eva-image pack -o new.image \
    --kernel1 kernel1.bin --load1 0x80500000 --entry1 0x80C8B500 \
    --kernel2 kernel2.bin --load2 0x8DFFFFFC --entry2 0x8E691770

Library quickstart

from pathlib import Path
from eva_kernel_image import parse_image, build_image

image = parse_image(Path("kernel.image").read_bytes())

print(f"dual-kernel: {image.dual_header is not None}")
print(f"primary entry: 0x{image.primary.entry_addr:08X}")
print(f"primary uncompressed size: {image.primary.lzma.uncompressed_len}")

# Validate checksums (parser itself does not auto-validate)
for issue in image.validate():
    print(f"warning: {issue}")

# Decompress a kernel
Path("kernel1.bin").write_bytes(image.primary.decompress())

# Replace a kernel and rebuild
image.primary.replace_kernel(Path("patched.bin").read_bytes())
Path("patched.kernel.image").write_bytes(build_image(image))

Supported models

Verified against 18 reference images spanning six product lines:

Model Firmware versions tested
7530 08.02
7560 07.00, 07.12, 07.27, 07.29, 07.30
7580 06.92, 07.27, 07.30
7583 08.03
7590 08.03, 08.10
7590 AX 08.02

Both single-kernel (FEED1281) and dual-kernel (FEED9112) variants are handled, including the legacy inner-signature quirk found on older Fritz!Box 7560 and 7580 builds.

License

see LICENSE.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

eva_kernel_image-0.1.2.tar.gz (56.7 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

eva_kernel_image-0.1.2-py3-none-any.whl (46.4 kB view details)

Uploaded Python 3

File details

Details for the file eva_kernel_image-0.1.2.tar.gz.

File metadata

  • Download URL: eva_kernel_image-0.1.2.tar.gz
  • Upload date:
  • Size: 56.7 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.13

File hashes

Hashes for eva_kernel_image-0.1.2.tar.gz
Algorithm Hash digest
SHA256 ee27736b7a273238fcfc112b30ef1ee1b76ace8627ea80c9b96a25e0e477ff08
MD5 2fcc8eda0d941ed1a0e27b2d6da26ac4
BLAKE2b-256 1f1016f51b0e29e30aec541f3448e704d85a155f1f2295c95ec58a2a9af4a786

See more details on using hashes here.

Provenance

The following attestation bundles were made for eva_kernel_image-0.1.2.tar.gz:

Publisher: publish.yml on grische/eva-kernel-image

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file eva_kernel_image-0.1.2-py3-none-any.whl.

File metadata

File hashes

Hashes for eva_kernel_image-0.1.2-py3-none-any.whl
Algorithm Hash digest
SHA256 b5b2a09605c121429ac5c1800aa31ce5b512c8dc9bd43a0f96ea5b163265c6e1
MD5 003b934a50be2dc0bcd9f022a43ed07d
BLAKE2b-256 fb816cc2469d7df574d4ea5705473b3324bac527c724390ef828e5f637e3d458

See more details on using hashes here.

Provenance

The following attestation bundles were made for eva_kernel_image-0.1.2-py3-none-any.whl:

Publisher: publish.yml on grische/eva-kernel-image

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page