Hi all,
I’m trying to make Vchan work on camkes-arm-vm in the process I encountered a couple problems. Hope you can give me some advice. I knew that Vchan is out dated and never finished on ARM. But it seems the only option for now (please correct me
 if I’m wrong).
Here is what I did so far:
1. modified tk1_vmlinux.c by adding the virtual device and fault handler and installed it to guest linux with
vm_add_device(vm, &vchan_dev);
---------------------------------------------------
vchan_device_fault_handler(struct device* d UNUSED, vm_t* vm, fault_t* fault){
    //uint32_t data = fault_get_data(fault);
    uint32_t data = fault_get_ctx(fault)->r1;
    vchan_entry_point(vm, data);
    // fflush(stdout);
    advance_fault(fault);
    return 0;
}
struct device vchan_dev = {
        .devid = DEV_CUSTOM,
        .name = "vchan-driver",
        .pstart = 0x2040000,
        .size = 0x1000,
        .handle_page_fault = &vchan_device_fault_handler,
        .priv = NULL,
    }; 
---------------------------------------------------
2. compiled linux-tegra using buildroot (by the way the current linux-tegra is 4.9.0 which is not supported by buildroot-2016, the earliest version works for me is buildroot-2017-2), added a vmm-manager kernel driver similar to the one in camkes-x86-vm.
 But I changed the call_into_hypervisor() to the following:
---------------------------------------------------
int call_into_hypervisor(int cmd, void *data, size_t sz, vmcall_args_t *vmcall) {
    int res = 0;
    int err;
    unsigned phys_ptr = virt_to_phys(vmcall);
    vmcall->data = data;
    vmcall->cmd = cmd;
    vmcall->phys_data = virt_to_phys(data);
    vmcall->size = sz;
    down(&hyp_sem);
    /*
        Set up arguments for the ARM hyp call
    */
    asm volatile ("mov r0, %0; mov r1, %1" : : "r" (VMM_MANAGER_TOKEN), "r" (phys_ptr): "%r0", "%r1");
    asm volatile (".arch_extension virt\n\t” "hvc #0");
    asm volatile ("mov %0, r0" : "=r" (res) : : );
    err = vargs->err;
    up(&hyp_sem);
    return err;
 
}
---------------------------------------------------
The kernel built and run correctly. But when I try to install the kernel driver. It crashed with following information.
---------------------------------------------------
# modprobe driver.ko
[81.826621] driver: loading out-of-tree module taints kernel
Bad sys call from [Linux]: scone 0 at PC: 0xbf000214
Assertion failed” !err (/camkes-arm-vm/libs/libsel4arm-vmm/src/vm.c: vm_event: 407)
—————————————————————————
I’m not sure if this error is triggered by the modified  call_into_hypervisor() or by event_thread_run()->eventfd_signal(). 
Any help would be appreciated! Thanks in advance.
Best Regards
-Daniel Wang