On Wednesday, September 26, 2018 at 1:00:29 AM UTC-6, J. Kiszka wrote:
> On 26.09.18 08:51, Jan Kiszka wrote:
> > 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.
> 
> Actually, also the default reservation for the hypervisor itself is
> different. We should really try to adjust them. Could you check if this
> gives a better experience by default?
> 
> diff --git a/tools/jailhouse-config-create b/tools/jailhouse-config-create
> index 6673f46c..5f21a349 100755
> --- a/tools/jailhouse-config-create
> +++ b/tools/jailhouse-config-create
> @@ -70,8 +70,8 @@ parser.add_argument('-c', '--console',
>                      action='store',
>                      type=str)
>  
> -memargs = [['--mem-inmates', '2M', 'inmate'],
> -           ['--mem-hv', '64M', 'hypervisor']]
> +memargs = [['--mem-inmates', '82M', 'inmate'],
> +           ['--mem-hv', '6M', 'hypervisor']]
>  
>  for entry in memargs:
>      parser.add_argument(entry[0],
> 
> 
> Thanks
> Jan
> 
> -- 
> Siemens AG, Corporate Technology, CT RDA IOT SES-DE
> Corporate Competence Center Embedded Linux

Jan,

I applied the patch to Jailhouse, regenerated the config, and it seems to work! 
It no longer crashes on `sudo ./tools/jailhouse cell destroy bazooka-demo`. 
Thanks a lot!

I'll try what you said regarding build dependencies inside the QEMU image.

I just learned about debugging through the serial console in the FAQ, so I'm 
still waiting on Amazon for my serial port cables to arrive :)

Thanks,
-Michael

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