Hello,

I am trying to experiment the "vm-tz" example on the Freescale i.mx6 SDB board.

At first, my goal is to understand the example, thus I am interested in running
a simple test kernel instead of a full linux kernel.
 
Specifically, I am trying to reproduce the experimentation of the article related to the trustzone
implementation on Fiasco.OC L4re, "ARM Trustzone as a Virtualization Technique in Embedded Systems". 
In particular, it is mentioned in the article at the "Implementation" paragraph that "Multiplexing two or more OS is supported by our design."
I would like to investigate this point.

I created a new entry to generate the vm-tz binary.
I added the following entry to the "src/l4/conf/modules.list" file :

entry tz_vm                                 
roottask moe --init=rom/vm-tz                 
module l4re
module vm-tz

Is my configuration entry correct, is there any missing modules that are required by the example?

I tested the binary on the board using tftp, and I obtained the following results:

L4 Bootstrapper
  Build: #12 Tue Mar 17 12:10:02 CET 2015, 4.8.3 20140320 (prerelease)
  Scanning up to 1024 MB RAM, starting at offset 32MB
  Memory size is 1024MB (10000000 - 4fffffff)
  RAM: 0000000010000000 - 000000004fffffff: 1048576kB
  Total RAM: 1024MB
  Scanning fiasco
  Scanning sigma0
  Scanning moe
  Moving up to 5 modules behind 11100000
  moving module 02 { 110a5000-110de63f } -> { 11195000-111ce63f } [235072]
  moving module 01 { 1109b000-110a438b } -> { 1118b000-1119438b } [37772]
  moving module 00 { 11044000-1109a0c7 } -> { 11134000-1118a0c7 } [352456]
  moving module 04 { 1102a000-11043597 } -> { 1111a000-11133597 } [103832]
  moving module 03 { 11010000-11029473 } -> { 11100000-11119473 } [103540]
  Loading fiasco
  Loading sigma0
  Loading moe
  find kernel info page...
  found kernel info page at 0x10002000
Regions of list 'regions'
    [ 10000000,  100000e3] {       e4} Root   mbi_rt
    [ 10001000,  10001aff] {      b00} Kern   fiasco
    [ 10002000,  10062fff] {    61000} Kern   fiasco
    [ 10090000,  10096edf] {     6ee0} Sigma0 sigma0
    [ 10098000,  1009e177] {     6178} Sigma0 sigma0
    [ 10140000,  10171d77] {    31d78} Root   moe
    [ 10178000,  101934ab] {    1b4ac} Root   moe
    [ 11000000,  1100f4ff] {     f500} Boot   bootstrap
    [ 11100000,  11133fff] {    34000} Root   Module
  API Version: (87) experimental
  Sigma0 config    ip:10090100 sp:00000000
  Roottask config  ip:10140260 sp:00000000
  Starting kernel fiasco at 100012c8
Number of IRQs available at this GIC: 160
FPU0: Arch: VFPv3(3), Part: VFPv3(30), r: 4, v: 9, i: 41, t: hard, p: dbl/sngl
L2: ID=410000c7 Type=9e340340 Aux=02070000 WMask=ffff S=0
L2: Type L2C-310 Size = 1024kB  Ways=16 Waysize=64
SERIAL ESC: allocated IRQ 58 for serial uart
Not using serial hack in slow timer handler.
Welcome to Fiasco.OC (arm)!
L4/Fiasco.OC arm microkernel (C) 1998-2013 TU Dresden
Rev: rexported compiled with gcc 4.8.3 for i.MX6    []
Build: #3 Wed Mar 11 16:43:41 CET 2015

Calibrating timer loop... done.
MDB: use page size: 20
MDB: use page size: 12
SIGMA0: Hello!
  KIP @ 10002000
  allocated 4KB for maintenance structures
SIGMA0: Dump of all resource maps
RAM:------------------------
[4:10000000;10000fff]
[0:10063000;1008ffff]
[0:10097000;10097fff]
[0:1009f000;1013ffff]
[4:10140000;10171fff]
[0:10172000;10177fff]
[4:10178000;10193fff]
[0:10194000;110fffff]
[4:11100000;11133fff]
[0:11134000;4effffff]
IOMEM:----------------------
[0:0;fffffff]
[0:50000000;ffffffff]
MOE: Hello world
MOE: found 1031220 KByte free memory
MOE: found RAM from 10000000 to 4f000000
MOE: allocated 1008 KByte for the page array @0x10194000
MOE: virtual user address space [0-bfffffff]
MOE: rom name space cap -> [C:501000]
  BOOTFS: [11100000-11119474] [C:503000] l4re
  BOOTFS: [1111a000-11133598] [C:504000] vm-tz
MOE: cmdline: moe --init=rom/vm-tz
MOE: Starting: rom/vm-tz 
MOE: loading 'rom/vm-tz'
Vmm started
terminate called after throwing an instance of 'N2L413Runtime_errorE'
MOE: task 270000679 exited with 127

The code stops at the beginning when it tries to create a VM :

L4Re::chksys(env->factory()->create_vm(vm));

After reading through the code, I saw that the code example is expecting a linux-image and an initrd to be provided. Is it possible to tell me where these should be added in the build directory? In my test case, the linux-image will be replaced by a simple kernel image.

Could someone help me to correct my test case.

Many thanks in advance.

Best regards,
Mahdi