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
Install pyjailhouse using pip when running `make install`
Add .pyc files to .gitignore
Signed-off-by: Chris Goldsworthy <
christopher...@outlook.com>
---
.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 <
jan.k...@siemens.com>
+#
+# 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="
jailho...@googlegroups.com",
+ 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
--
2.7.4