mirror of
https://github.com/gnif/LookingGlass.git
synced 2024-11-22 05:27:20 +00:00
[doc] module: Touchups
This commit is contained in:
parent
6f5e5aa0c2
commit
acac8b40cb
154
doc/module.rst
154
doc/module.rst
@ -1,50 +1,84 @@
|
|||||||
|
.. _kernel_module:
|
||||||
|
|
||||||
Kernel Module
|
Kernel Module
|
||||||
#############
|
#############
|
||||||
|
|
||||||
This kernel module implements a basic interface to the IVSHMEM device
|
This kernel module implements a basic interface to the IVSHMEM device
|
||||||
for LookingGlass when using LookingGlass in VM->VM mode.
|
for Looking Glass in VM->VM mode.
|
||||||
|
|
||||||
Additionally, in VM->host mode, it can be used to generate a shared
|
Additionally in VM->host mode, it can be used to generate a shared
|
||||||
memory device on the host machine that supports dmabuf.
|
memory device on the host machine that supports dmabuf.
|
||||||
|
|
||||||
Compiling (Manual)
|
Prerequisites
|
||||||
------------------
|
-------------
|
||||||
|
|
||||||
Make sure you have your kernel headers installed first, on Debian/Ubuntu
|
The linux kernel headers for your kernel version are required for building.
|
||||||
use the following command::
|
Install them with ``apt-get``
|
||||||
|
|
||||||
|
.. code:: bash
|
||||||
|
|
||||||
apt-get install linux-headers-$(uname -r)
|
apt-get install linux-headers-$(uname -r)
|
||||||
|
|
||||||
Then simply run ``make`` and you're done.
|
Then switch to the ``module/`` directory
|
||||||
|
|
||||||
|
.. code:: bash
|
||||||
|
|
||||||
|
cd module/
|
||||||
|
|
||||||
|
.. _module_manual:
|
||||||
|
|
||||||
|
Compiling & Loading (Manual)
|
||||||
|
----------------------------
|
||||||
|
|
||||||
|
To compile the module manually, run ``make`` in the module directory.
|
||||||
|
|
||||||
|
.. _module_manual_loading:
|
||||||
|
|
||||||
Loading
|
Loading
|
||||||
~~~~~~~
|
~~~~~~~
|
||||||
|
|
||||||
For VM->VM mode, simply run::
|
For VM->VM mode, run:
|
||||||
|
|
||||||
|
.. code:: bash
|
||||||
|
|
||||||
insmod kvmfr.ko
|
insmod kvmfr.ko
|
||||||
|
|
||||||
For VM->host mode with dmabuf, instead of creating a shared memory file,
|
For VM->host mode with dmabuf, instead of creating a shared memory file,
|
||||||
load this module with the parameter ``static_size_mb``. For example, a
|
load this module with the parameter ``static_size_mb``. For example, a
|
||||||
128 MB shared memory device can be created with::
|
32 MB shared memory device can be created with:
|
||||||
|
|
||||||
insmod kvmfr.ko static_size_mb=128
|
.. code:: bash
|
||||||
|
|
||||||
|
insmod kvmfr.ko static_size_mb=32
|
||||||
|
|
||||||
Multiple devices can be created by separating the sizes with commas. For
|
Multiple devices can be created by separating the sizes with commas. For
|
||||||
example, ``static_size_mb=128,64`` would create two kvmfr devices:
|
example, ``static_size_mb=128,64`` would create two kvmfr devices:
|
||||||
``kvmfr0`` would be 128 MB and ``kvmfr1`` would be 64 MB.
|
``kvmfr0`` would be 128 MB and ``kvmfr1`` would be 64 MB.
|
||||||
|
|
||||||
.. _compiling--installing-dkms:
|
.. _module_dkms:
|
||||||
|
|
||||||
Compiling & Installing (DKMS)
|
Using DKMS
|
||||||
-----------------------------
|
----------
|
||||||
|
|
||||||
You can install this module into DKMS so that it persists across kernel
|
You can use the kernel's DKMS feature to keep the module across upgrades.
|
||||||
upgrades. Simply run::
|
``dkms`` must be installed.
|
||||||
|
|
||||||
|
.. code:: bash
|
||||||
|
|
||||||
|
apt-get install dkms
|
||||||
|
|
||||||
|
.. _module_dkms_install:
|
||||||
|
|
||||||
|
Installing
|
||||||
|
~~~~~~~~~~
|
||||||
|
|
||||||
|
To install the module into DKMS, run
|
||||||
|
|
||||||
|
.. code:: bash
|
||||||
|
|
||||||
dkms install .
|
dkms install .
|
||||||
|
|
||||||
.. _loading-1:
|
.. _module_dkms_loading:
|
||||||
|
|
||||||
Loading
|
Loading
|
||||||
~~~~~~~
|
~~~~~~~
|
||||||
@ -54,31 +88,40 @@ For VM->VM, simply modprobe the module::
|
|||||||
modprobe kvmfr
|
modprobe kvmfr
|
||||||
|
|
||||||
For VM->host with dmabuf, modprobe with the parameter
|
For VM->host with dmabuf, modprobe with the parameter
|
||||||
``static_size_mb``::
|
``static_size_mb``:
|
||||||
|
|
||||||
modprobe kvmfr static_size_mb=128
|
.. code:: bash
|
||||||
|
|
||||||
|
modprobe kvmfr static_size_mb=32
|
||||||
|
|
||||||
Just like above, multiple devices can be created by separating the sizes
|
Just like above, multiple devices can be created by separating the sizes
|
||||||
with commas.
|
with commas.
|
||||||
|
|
||||||
|
.. _module_usage:
|
||||||
|
|
||||||
Usage
|
Usage
|
||||||
-----
|
-----
|
||||||
|
|
||||||
This will create the ``/dev/kvmfr0`` node that represents the KVMFR
|
The module will create the ``/dev/kvmfr0`` node, which represents the KVMFR
|
||||||
interface. To use the interface you need permission to access it by
|
interface. To use the interface, you need permission to access it by
|
||||||
either creating a udev rule to ensure your user can read and write to
|
either: creating a udev rule to ensure your user can read and write to
|
||||||
it, or simply change its ownership manually, ie::
|
it, or simply change its ownership manually, ie:
|
||||||
|
|
||||||
|
.. code:: bash
|
||||||
|
|
||||||
sudo chown user:user /dev/kvmfr0
|
sudo chown user:user /dev/kvmfr0
|
||||||
|
|
||||||
An example udev rule, which you can put in
|
As an example, you can create a new file in ``/etc/udev/rules.d/99-kvmfr.rules``
|
||||||
``/etc/udev/rules.d/99-kvmfr.rules``, is (replace ``user`` with your
|
with the following contents::
|
||||||
username)::
|
|
||||||
|
|
||||||
SUBSYSTEM=="kvmfr", OWNER="user", GROUP="kvm", MODE="0660"
|
SUBSYSTEM=="kvmfr", OWNER="user", GROUP="kvm", MODE="0660"
|
||||||
|
|
||||||
Usage with looking glass is simple, you only need to specify the path to
|
(replace ``user`` with your username)
|
||||||
the device node, for example::
|
|
||||||
|
Usage with Looking Glass is simple, you only need to specify the path to
|
||||||
|
the device node, for example:
|
||||||
|
|
||||||
|
.. code:: bash
|
||||||
|
|
||||||
./looking-glass-client -f /dev/kvmfr0
|
./looking-glass-client -f /dev/kvmfr0
|
||||||
|
|
||||||
@ -90,23 +133,30 @@ You may also use a config file: ``~/.looking-glass-client.ini``, or
|
|||||||
[app]
|
[app]
|
||||||
shmFile=/dev/kvmfr0
|
shmFile=/dev/kvmfr0
|
||||||
|
|
||||||
|
.. _module_vm_to_host:
|
||||||
|
|
||||||
VM->Host
|
VM->Host
|
||||||
~~~~~~~~
|
~~~~~~~~
|
||||||
|
|
||||||
In VM->host mode, use this device in place of the shared memory file.
|
In VM->host mode, use this device in place of the shared memory file.
|
||||||
|
|
||||||
For example, with ``qemu``, you would use the following arguments::
|
QEMU
|
||||||
|
^^^^
|
||||||
|
|
||||||
|
Add the following arguments to your ``qemu`` command line::
|
||||||
|
|
||||||
-device ivshmem-plain,id=shmem0,memdev=looking-glass
|
-device ivshmem-plain,id=shmem0,memdev=looking-glass
|
||||||
-object memory-backend-file,id=looking-glass,mem-path=/dev/kvmfr0,size=128M,share=yes
|
-object memory-backend-file,id=looking-glass,mem-path=/dev/kvmfr0,size=32M,share=yes
|
||||||
|
|
||||||
Note that the ``size`` argument must be the same size as what you passed
|
.. note::
|
||||||
to ``static_size_mb`` argument for the kernel module.
|
|
||||||
|
|
||||||
``libvirt``
|
The ``size`` argument must be the same size you passed
|
||||||
^^^^^^^^^^^
|
to the ``static_size_mb`` argument when loading the kernel module.
|
||||||
|
|
||||||
With ``libvirt``, you can use the following XML block:
|
libvirt
|
||||||
|
^^^^^^^
|
||||||
|
|
||||||
|
Create the following XML block in your domain:
|
||||||
|
|
||||||
.. code:: xml
|
.. code:: xml
|
||||||
|
|
||||||
@ -114,25 +164,29 @@ With ``libvirt``, you can use the following XML block:
|
|||||||
<qemu:arg value='-device'/>
|
<qemu:arg value='-device'/>
|
||||||
<qemu:arg value='ivshmem-plain,id=shmem0,memdev=looking-glass'/>
|
<qemu:arg value='ivshmem-plain,id=shmem0,memdev=looking-glass'/>
|
||||||
<qemu:arg value='-object'/>
|
<qemu:arg value='-object'/>
|
||||||
<qemu:arg value='memory-backend-file,id=looking-glass,mem-path=/dev/kvmfr0,size=128M,share=yes'/>
|
<qemu:arg value='memory-backend-file,id=looking-glass,mem-path=/dev/kvmfr0,size=32M,share=yes'/>
|
||||||
</qemu:commandline>
|
</qemu:commandline>
|
||||||
|
|
||||||
Remember to add
|
.. note::
|
||||||
``xmlns:qemu='http://libvirt.org/schemas/domain/qemu/1.0'`` to the
|
|
||||||
``<domain>``.
|
|
||||||
|
|
||||||
On certain distros, running libvirt this way poses issues with apparmor
|
Remember to add ``xmlns:qemu='http://libvirt.org/schemas/domain/qemu/1.0'``
|
||||||
and cgroups.
|
to the ``<domain>`` tag.
|
||||||
|
|
||||||
For apparmor, create ``/etc/apparmor.d/local/abstractions/libvirt-qemu`` if
|
Running libvirt this way violates AppArmor and cgroups policies, which will
|
||||||
|
block the VM from running. These policies must be amended to allow the VM
|
||||||
|
to start.
|
||||||
|
|
||||||
|
For AppArmor, create ``/etc/apparmor.d/local/abstractions/libvirt-qemu`` if
|
||||||
it doesn't exist, and add the following::
|
it doesn't exist, and add the following::
|
||||||
|
|
||||||
# Looking Glass
|
# Looking Glass
|
||||||
/dev/kvmfr0 rw,
|
/dev/kvmfr0 rw,
|
||||||
|
|
||||||
For cgroups, in ``/etc/libvirt/qemu.conf``, uncomment the
|
For cgroups, edit ``/etc/libvirt/qemu.conf``, uncomment the
|
||||||
``cgroup_device_acl`` block and add ``/dev/kvmfr0`` to the list. Then
|
``cgroup_device_acl`` block, and add ``/dev/kvmfr0`` to the list.
|
||||||
restart ``libvirtd``::
|
Then restart ``libvirtd``:
|
||||||
|
|
||||||
|
.. code:: bash
|
||||||
|
|
||||||
sudo systemctl restart libvirtd.service
|
sudo systemctl restart libvirtd.service
|
||||||
|
|
||||||
@ -144,7 +198,7 @@ systemd-modules-load
|
|||||||
For convenience, you may load the KVMFR module when starting your computer.
|
For convenience, you may load the KVMFR module when starting your computer.
|
||||||
We can use the ``systemd-modules-load.service(8)`` service for this task.
|
We can use the ``systemd-modules-load.service(8)`` service for this task.
|
||||||
|
|
||||||
Create a file as ``/etc/modules-load.d/kvmfr.conf`` with the following
|
Create the file ``/etc/modules-load.d/kvmfr.conf`` with the following
|
||||||
contents::
|
contents::
|
||||||
|
|
||||||
#KVMFR Looking Glass module
|
#KVMFR Looking Glass module
|
||||||
@ -152,9 +206,13 @@ contents::
|
|||||||
|
|
||||||
This will now run the next time you start your machine.
|
This will now run the next time you start your machine.
|
||||||
|
|
||||||
If you are running in VM->host mode, you must additionally add another file in
|
If you are running in VM->host mode, you must additionally create another file
|
||||||
``/etc/modprobe.d/kvmfr.conf`` to properly set the size. It should have the
|
``/etc/modprobe.d/kvmfr.conf`` to properly set the size. It should have the
|
||||||
following contents, while adjusting ``static_size_mb`` to your needs::
|
following contents::
|
||||||
|
|
||||||
#KVMFR Looking Glass module
|
#KVMFR Looking Glass module
|
||||||
options kvmfr static_size_mb=128
|
options kvmfr static_size_mb=32
|
||||||
|
|
||||||
|
.. note::
|
||||||
|
|
||||||
|
Don't forget to adjust ``static_size_mb`` to your needs.
|
||||||
|
Loading…
Reference in New Issue
Block a user