Skip to main content

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.

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.2.0.tar.gz (44.6 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.2.0-py3-none-any.whl (34.8 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: eva_kernel_image-0.2.0.tar.gz
  • Upload date:
  • Size: 44.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/7.0.0 CPython/3.13.14

File hashes

Hashes for eva_kernel_image-0.2.0.tar.gz
Algorithm Hash digest
SHA256 2dca3198c7bcc7129ba1d056bfe15693e0cce5695f677fbdf915300790522827
MD5 f764d1130701dd8721fa17ad3a20667d
BLAKE2b-256 810677df9a2b97a887702abe03f910a42d21cca4fea3248ec27ffc375a907b8b

See more details on using hashes here.

Provenance

The following attestation bundles were made for eva_kernel_image-0.2.0.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.2.0-py3-none-any.whl.

File metadata

File hashes

Hashes for eva_kernel_image-0.2.0-py3-none-any.whl
Algorithm Hash digest
SHA256 a2484b28affdc17f7da70d79697d8e457c04470a847f4193a5d819aacc4897a4
MD5 e3038e7007fd1e64cc570db578eacfad
BLAKE2b-256 a6aa39ed8125ca0b2f2ca9ebbeca63c062a0985adf15b48b4af25c8730edf6b3

See more details on using hashes here.

Provenance

The following attestation bundles were made for eva_kernel_image-0.2.0-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.

Release history Release notifications | RSS feed

This release

0.2.0 This release

2 files

0.1.2

2 files

Supported by

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