On 2018-05-19 14:53, Christopher Goldsworthy wrote: > Create a project folder jailhouse/python_module and related files, such that > any python package placed in here is installable by pip > > Create a python package jailhouse/python_module/pyjailhouse, move > JailhouseCell > class used in jailhouse/tools/jailhouse-cell-linux into > jailhouse/python_module/pyjailhouse/cell.py, import JailhouseCell from cell.py > when in jailhouse-cell-linux
Thanks for moving on with this! Will try it out ASAP. I would suggest a different structuring of the patches, though: 1. introduce module infrastructure, maybe just the module with installation but without developer mode 2. add developer mode 3. move existing code into the pyjailhouse module Jan > > Install pyjailhouse using pip when running `make install` > > Add .pyc files to .gitignore > > Signed-off-by: Chris Goldsworthy <[email protected]> > --- > .gitignore | 1 + > Makefile | 3 +++ > python_module/pyjailhouse/__init__.py | 0 > python_module/pyjailhouse/cell.py | 49 > +++++++++++++++++++++++++++++++++++ > python_module/setup.py | 15 +++++++++++ > tools/jailhouse-cell-linux | 39 ++-------------------------- > 6 files changed, 70 insertions(+), 37 deletions(-) > create mode 100644 python_module/pyjailhouse/__init__.py > create mode 100644 python_module/pyjailhouse/cell.py > create mode 100644 python_module/setup.py > > diff --git a/.gitignore b/.gitignore > index 8bd7a16..36bee48 100644 > --- a/.gitignore > +++ b/.gitignore > @@ -26,3 +26,4 @@ hypervisor/arch/*/include/generated > *.s > ci/out > ci/*.tar.xz > +*.pyc > diff --git a/Makefile b/Makefile > index ce19d1a..1028098 100644 > --- a/Makefile > +++ b/Makefile > @@ -48,8 +48,11 @@ firmware_install: $(DESTDIR)$(firmwaredir) modules > tool_inmates_install: $(DESTDIR)$(libexecdir)/jailhouse > $(INSTALL_DATA) inmates/tools/$(ARCH)/*.bin $< > > +# --upgrade forces a re-install, if package is already installed > install: modules_install firmware_install tool_inmates_install > $(Q)$(MAKE) -C tools $@ src=. > + pip install --upgrade ./python_module > + > > .PHONY: modules_install install clean firmware_install modules tools docs \ > docs_clean > diff --git a/python_module/pyjailhouse/__init__.py > b/python_module/pyjailhouse/__init__.py > new file mode 100644 > index 0000000..e69de29 > diff --git a/python_module/pyjailhouse/cell.py > b/python_module/pyjailhouse/cell.py > new file mode 100644 > index 0000000..20e8848 > --- /dev/null > +++ b/python_module/pyjailhouse/cell.py > @@ -0,0 +1,49 @@ > + > +# Jailhouse, a Linux-based partitioning hypervisor > +# > +# Copyright (c) Siemens AG, 2015-2016 > +# > +# Authors: > +# Jan Kiszka <[email protected]> > +# > +# This work is licensed under the terms of the GNU GPL, version 2. See > +# the COPYING file in the top-level directory. > + > +import ctypes > +import errno > +import fcntl > +import struct > + > + > +class JailhouseCell: > + JAILHOUSE_CELL_CREATE = 0x40100002 > + JAILHOUSE_CELL_LOAD = 0x40300003 > + JAILHOUSE_CELL_START = 0x40280004 > + > + JAILHOUSE_CELL_ID_UNUSED = -1 > + > + def __init__(self, config): > + self.name = config.name.encode() > + > + self.dev = open('/dev/jailhouse') > + > + cbuf = ctypes.c_buffer(config.data) > + create = struct.pack('QI4x', ctypes.addressof(cbuf), > len(config.data)) > + try: > + fcntl.ioctl(self.dev, JailhouseCell.JAILHOUSE_CELL_CREATE, > create) > + except IOError as e: > + if e.errno != errno.EEXIST: > + raise e > + > + def load(self, image, address): > + cbuf = ctypes.create_string_buffer(bytes(image)) > + > + load = struct.pack('i4x32sI4xQQQ8x', > + JailhouseCell.JAILHOUSE_CELL_ID_UNUSED, self.name, > + 1, ctypes.addressof(cbuf), len(image), address) > + fcntl.ioctl(self.dev, self.JAILHOUSE_CELL_LOAD, load) > + > + def start(self): > + start = struct.pack('i4x32s', JailhouseCell.JAILHOUSE_CELL_ID_UNUSED, > + self.name) > + fcntl.ioctl(self.dev, JailhouseCell.JAILHOUSE_CELL_START, start) > diff --git a/python_module/setup.py b/python_module/setup.py > new file mode 100644 > index 0000000..55f8e04 > --- /dev/null > +++ b/python_module/setup.py > @@ -0,0 +1,15 @@ > + > +# pyjailhouse, a python interface for the Jailhouse hypervisor > +# > +# Copyright (c) Christopher Goldsworthy, 2018 > +# > +# This script is used to create project metadata when installing pyjailhouse > +# using pip. > + > +from setuptools import setup, find_packages > + > +setup(name="pyjailhouse", version="0.1", > + description="A Python interface for the Jailhouse Hypervisor", > + license="GPLv2", url="https://github.com/siemens/jailhouse", > + author_email="[email protected]", > + packages=find_packages()) > diff --git a/tools/jailhouse-cell-linux b/tools/jailhouse-cell-linux > index 913b5db..23a3ab5 100755 > --- a/tools/jailhouse-cell-linux > +++ b/tools/jailhouse-cell-linux > @@ -12,14 +12,13 @@ > > from __future__ import print_function > import argparse > -import ctypes > -import errno > -import fcntl > import gzip > import os > import struct > import sys > > +from pyjailhouse.cell import JailhouseCell > + > libexecdir = None > > > @@ -759,40 +758,6 @@ class X86ZeroPage: > return data + bytearray(0x1000 - len(data)) > > > -class JailhouseCell: > - JAILHOUSE_CELL_CREATE = 0x40100002 > - JAILHOUSE_CELL_LOAD = 0x40300003 > - JAILHOUSE_CELL_START = 0x40280004 > - > - JAILHOUSE_CELL_ID_UNUSED = -1 > - > - def __init__(self, config): > - self.name = config.name.encode() > - > - self.dev = open('/dev/jailhouse') > - > - cbuf = ctypes.c_buffer(config.data) > - create = struct.pack('QI4x', ctypes.addressof(cbuf), > len(config.data)) > - try: > - fcntl.ioctl(self.dev, JailhouseCell.JAILHOUSE_CELL_CREATE, > create) > - except IOError as e: > - if e.errno != errno.EEXIST: > - raise e > - > - def load(self, image, address): > - cbuf = ctypes.create_string_buffer(bytes(image)) > - > - load = struct.pack('i4x32sI4xQQQ8x', > - JailhouseCell.JAILHOUSE_CELL_ID_UNUSED, self.name, > - 1, ctypes.addressof(cbuf), len(image), address) > - fcntl.ioctl(self.dev, self.JAILHOUSE_CELL_LOAD, load) > - > - def start(self): > - start = struct.pack('i4x32s', JailhouseCell.JAILHOUSE_CELL_ID_UNUSED, > - self.name) > - fcntl.ioctl(self.dev, JailhouseCell.JAILHOUSE_CELL_START, start) > - > - > def x86_gen_setup_data(config): > SETUP_TYPE_JAILHOUSE = 6 > MAX_CPUS = 255 > -- You received this message because you are subscribed to the Google Groups "Jailhouse" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. For more options, visit https://groups.google.com/d/optout.
