Skip to main content

Open Source library for manipulating with U-Boot images and environment variables

Project description

Build Status Coverage Status PyPI Status Python Version

pyUBoot is an Open Source python based library for manipulating with U-Boot images and environment variables. Is distributed with following command-line utilities (tools):

  • envimg - a tool for editing environment variables inside U-Boot image

  • mkenv - a tool to generate/extract U-Boot environment variables into/from a binary blob

  • mkimg - a tool for manipulation with U-Boot executable images (zImage, Scripts, …)

Dependencies

  • Python - Python 3.x interpreter

  • Click - Python package for creating beautiful command line interface.

  • pyFDT - Python package for manipulation with Device Tree images.

Installation

$ pip install uboot

To install the latest version from master branch execute in shell following commands:

$ pip install -r https://raw.githubusercontent.com/molejar/pyUBoot/master/requirements.txt
$ pip install -U https://github.com/molejar/pyUBoot/archive/master.zip

In case of development, install it from cloned sources:

$ git clone https://github.com/molejar/pyUBoot.git
$ cd pyUBoot
$ pip install -r requirements.txt
$ pip install -U -e .

NOTE: You may run into a permissions issues running these commands. Here are a few options how to fix it:

  1. Run with sudo to install pyUBoot and dependencies globally

  2. Specify the --user option to install locally into your home directory (export “~/.local/bin” into PATH variable if haven’t).

  3. Run the command in a virtualenv local to a specific project working set.

Usage

The first example is showing how to use EnvBlob class from uboot module in your code.

import uboot

# --------------------------------------------------------------------------------
# create env blob
# --------------------------------------------------------------------------------
env = uboot.EnvBlob(name="U-Boot Variables")
env.redundant = True
env.set("bootdelay", "3")
env.set("stdin", "serial")
env.set("stdout", "serial")

# --------------------------------------------------------------------------------
# save env blob as binary file
# --------------------------------------------------------------------------------
with open("env.img", 'wb') as f:
    f.write(env.export())

# --------------------------------------------------------------------------------
# save env blob in readable format as text file
# --------------------------------------------------------------------------------
with open("env.txt", 'w') as f:
    f.write(env.store())

# --------------------------------------------------------------------------------
# parse env blob from binary file
# --------------------------------------------------------------------------------
with open("env.img", 'rb') as f:
    env.parse(f.read())

# print env blob info
print("U-Boot enviroment blob loaded from env.img file:")
print(env)
print()

# --------------------------------------------------------------------------------
# load env blob from text file
# --------------------------------------------------------------------------------
with open("env.txt", 'r') as f:
    env.load(f.read())

# print env blob info
print("U-Boot enviroment blob loaded from env.txt file:")
print(env)

The second example is showing how to create Multi-File U-Boot image with uboot module.

import uboot

# --------------------------------------------------------------------------------
# create dummy firmware image (u-boot executable image)
# --------------------------------------------------------------------------------
fwimg = uboot.StdImage(bytes([1]*512),
                       name="Firmware Test Image",
                       laddr=0,
                       eaddr=0,
                       arch=uboot.EnumArchType.ARM,
                       os=uboot.EnumOsType.LINUX,
                       image=uboot.EnumImageType.FIRMWARE,
                       compress=uboot.EnumCompressionType.NONE)

# --------------------------------------------------------------------------------
# create script image (u-boot executable image)
# --------------------------------------------------------------------------------
scimg = uboot.ScriptImage()
scimg.Name = "Test Script Image"
scimg.OsType = uboot.EnumOsType.LINUX
scimg.ArchType = uboot.EnumArchType.ARM
scimg.Compression = uboot.EnumCompressionType.NONE
scimg.EntryAddress = 0
scimg.LoadAddress = 0
scimg.append("echo", "'===== U-Boot settings ====='")
scimg.append("setenv", "stdin serial")
scimg.append("setenv", "stdout serial")
scimg.append("setenv", "rootdev mmcblk2p2")

# --------------------------------------------------------------------------------
# create multi-file image
# --------------------------------------------------------------------------------
mimg = uboot.MultiImage(name="Multi-File Test Image",
                        laddr=0,
                        eaddr=0,
                        arch=uboot.EnumArchType.ARM,
                        os=uboot.EnumOsType.LINUX,
                        compress=uboot.EnumCompressionType.NONE)
mimg.append(fwimg)
mimg.append(scimg)
# print created image info
print(mimg)

# --------------------------------------------------------------------------------
# save created image into file: uboot_mimg.img
# --------------------------------------------------------------------------------
with open("uboot_mimg.img", "wb") as f:
    f.write(mimg.export())

# --------------------------------------------------------------------------------
# open and read image file: uboot_mimg.img
# --------------------------------------------------------------------------------
with open("uboot_mimg.img", "rb") as f:
    data = f.read()

# --------------------------------------------------------------------------------
# parse binary data into new img object of specific image type
# --------------------------------------------------------------------------------
img = uboot.parse_img(data)

# print parsed image info
print(img)

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

uboot-0.1.1.tar.gz (20.1 kB view details)

Uploaded Source

Built Distribution

uboot-0.1.1-py3-none-any.whl (28.1 kB view details)

Uploaded Python 3

File details

Details for the file uboot-0.1.1.tar.gz.

File metadata

  • Download URL: uboot-0.1.1.tar.gz
  • Upload date:
  • Size: 20.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.13.0 pkginfo/1.5.0.1 requests/2.18.4 setuptools/39.0.1 requests-toolbelt/0.8.0 tqdm/4.19.5 CPython/3.6.8

File hashes

Hashes for uboot-0.1.1.tar.gz
Algorithm Hash digest
SHA256 1b50f3d1653ebdf8269c715ab718f245eac082ebd41d6ac1e25c386e75a090a7
MD5 ebc48586e6500d4c70fbc7a3c152b957
BLAKE2b-256 b45faaf85e1680f7e075550943fe7a84a1759448aab5338185ff8c2b479ce796

See more details on using hashes here.

File details

Details for the file uboot-0.1.1-py3-none-any.whl.

File metadata

  • Download URL: uboot-0.1.1-py3-none-any.whl
  • Upload date:
  • Size: 28.1 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.13.0 pkginfo/1.5.0.1 requests/2.18.4 setuptools/39.0.1 requests-toolbelt/0.8.0 tqdm/4.19.5 CPython/3.6.8

File hashes

Hashes for uboot-0.1.1-py3-none-any.whl
Algorithm Hash digest
SHA256 55b703df4dcce1eb4dad42c427dc71d64f3fba25db3cae8ad2647b738e5a8369
MD5 1ef7e8af51d9a26455ba48c153fd8719
BLAKE2b-256 b70e989c8b041ed265efa20c9e49ae20f103c5c41de66556cd2eed2a792758cd

See more details on using hashes here.

Supported by

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