On 26.09.18 07:55, [email protected] wrote:
I have two questions:

1) For Jailhouse images: is there any way I can rebuild Jailhouse one inside 
the x86 image? When I clone jailhouse inside the image and try to make it, the 
necessary linux-header stuff isn't there, and there doesn't seem to be a 
linux-header package for 4.14.50.

Yeah, we do not install the build dependencies into the demo images, only runtime dependencies - keeps them smaller. But the packages are there, and you can either modify the IMAGE_INSTALL rule to include linux-headers-jailhouse or transfer the package manually from out/build/tmp/deploy/apt/jailhouse-demo/pool/main/l/linux-4.14.70/ to the target and install it manually. Other build dependencies can simply be pulled from upstream Debian on the target (apt-get update; apt-get install ...).


2) For running Jailhouse on my real x86 machine: I'm trying to run a basic 
inmate based off of the apic-demo, but my workflow doesn't seem to work. My 
machine hangs when I try to load the cell. Here is what I am doing on an x86 
Ubuntu 18.04 (kernel 4.15.0-34-generic). Is the following correct? (Bazooka is 
the name of my machine):

Do you get any messages from Jailhouse on the serial console while creating the apic-demo cell?


<set intel_iommu=on in the kernel command line and reboot>
cd ~
git clone https://github.com/siemens/jailhouse
cd ~/jailhouse
make
sudo ./tools/jailhouse config create ./configs/x86/bazooka.c
make
<set intel_iommu=off in the kernel command line and reboot>
cd ~/jailhouse
sudo insmod ./driver/jailhouse.ko
sudo ./tools/jailhouse enable ./configs/x86/bazooka.cell
sudo ./tools/jailhouse cell create ./configs/x86/bazooka-demo.cell
sudo ./tools/jailhouse cell load bazooka-demo 
./inmates/demos/x86/bazooka-demo.bin
<**This is where Jailhouse hangs and my Linux starts to crash**>
sudo ./tools/jailhouse cell start bazooka-demo
sudo ./tools/jailhouse cell destroy bazooka-demo
sudo ./tools/jailhouse disable

My inmate "bazooka-demo" is defined by ./inmates/demos/x86/bazooka-demo.c. I stripped 
down the "apic-demo.c" file to create a basic inmate.

#include <inmate.h>
void inmate_main(void)
{
     bool terminate = false;
     comm_region->cell_state = JAILHOUSE_CELL_RUNNING_LOCKED;
     while (!terminate) {
         switch (comm_region->msg_to_cell) {
         case JAILHOUSE_MSG_SHUTDOWN_REQUEST:
             printk("MGH: Shutting down bazooka-demo cell");
             terminate = true;
             break;
         default:
             printk("MGH: Sending reply from bazooka-demo cell");
             jailhouse_send_reply_from_cell(comm_region,
                     JAILHOUSE_MSG_UNKNOWN);
             break;
         }
     }
printk("MGH: Stopped APIC demo\n");
     comm_region->cell_state = JAILHOUSE_CELL_SHUT_DOWN;
}

And here is ./configs/x86/bazooka-demo.c (based off of apic-demo.c):

#include <jailhouse/types.h>
#include <jailhouse/cell-config.h>

#define ARRAY_SIZE(a) sizeof(a) / sizeof(a[0])

struct {
        struct jailhouse_cell_desc cell;
        __u64 cpus[1];
        struct jailhouse_memory mem_regions[2];
        struct jailhouse_cache cache_regions[1];
        __u8 pio_bitmap[0x2000];
} __attribute__((packed)) config = {
        .cell = {
                .signature = JAILHOUSE_CELL_DESC_SIGNATURE,
                .revision = JAILHOUSE_CONFIG_REVISION,
                .name = "bazooka-demo",

                .cpu_set_size = sizeof(config.cpus),
                .num_memory_regions = ARRAY_SIZE(config.mem_regions),
                .num_cache_regions = ARRAY_SIZE(config.cache_regions),
                .num_irqchips = 0,
                .pio_bitmap_size = ARRAY_SIZE(config.pio_bitmap),
                .num_pci_devices = 0,

                .console = {
                        .type = JAILHOUSE_CON_TYPE_8250,
                        .flags = JAILHOUSE_CON_ACCESS_PIO,
                        .address = 0x3f8,
                },
        },

        .cpus = {
                0x8,
        },

        .mem_regions = {
                /* RAM */ {
                        .phys_start = 0x3f000000,
                        .virt_start = 0,
                        .size = 0x00100000,
                        .flags = JAILHOUSE_MEM_READ | JAILHOUSE_MEM_WRITE |
                                JAILHOUSE_MEM_EXECUTE | JAILHOUSE_MEM_LOADABLE,
                },
                /* communication region */ {
                        .virt_start = 0x00100000,
                        .size = 0x00001000,
                        .flags = JAILHOUSE_MEM_READ | JAILHOUSE_MEM_WRITE |
                                JAILHOUSE_MEM_COMM_REGION,
                },
        },

        .cache_regions = {
                {
                        .start = 0,
                        .size = 2,
                        .type = JAILHOUSE_CACHE_L3,
                },
        },

        .pio_bitmap = {
                [     0/8 ...  0x2f7/8] = -1,
                [ 0x2f8/8 ...  0x2ff/8] = 0, /* serial2 */
                [ 0x300/8 ...  0x3f7/8] = -1,
                [ 0x3f8/8 ...  0x3ff/8] = 0, /* serial1 */
                [ 0x400/8 ... 0xe00f/8] = -1,
                [0xe010/8 ... 0xe017/8] = 0, /* OXPCIe952 serial1 */
                [0xe018/8 ... 0xffff/8] = -1,
        },
};


What am I doing wrong? I'm guessing that I need to change the bazooka-demo 
config somehow, but I'm not sure where to begin.

Compare the original apic-demo.c against the qemu-x86.c and your generated system config /wrt memory layout, specifically inmate reservations. By default, "jailhouse config create" uses less inmate reservation than we do in the qemu-x86 setup (now I remember what I also wanted to adjust prior to releasing...), and that may shift things around.

Jan

--
Siemens AG, Corporate Technology, CT RDA IOT SES-DE
Corporate Competence Center Embedded Linux

--
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.

Reply via email to