Hello Adam,
Thank you again for your answer.
Please find below the execution's log from the start of L4 kernel until the stop of the vm-tz test:
L4 Bootstrapper Build: #21 Tue Mar 17 15:28:32 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 { 110a6000-110df63f } -> { 11196000-111cf63f } [235072] moving module 01 { 1109c000-110a538b } -> { 1118c000-1119538b } [37772] moving module 00 { 11044000-1109bb17 } -> { 11134000-1118bb17 } [359192] moving module 04 { 1102a000-1104365b } -> { 1111a000-1113365b } [104028] 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, 10066fff] { 65000} 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 GIC: Switching IRQ 58 to secure 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: #4 Tue Mar 17 14:55:01 CET 2015
GIC: Switching IRQ 29 to secure 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:10067000;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 1031204 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-1113365c] [C:504000] vm-tz MOE: cmdline: moe --init=rom/vm-tz MOE: Starting: rom/vm-tz MOE: loading 'rom/vm-tz' Vmm started Cannot map nonsecure memory No fpage received MOE: task 270000679 exited with 1
Kindest regards,
Mahdi
On Mon, Mar 23, 2015 at 11:33 AM, Mahdi Aichouch foxmehdi@gmail.com wrote:
Hello Adam,
Thank you very much for your answer!
I configured the Ram_base to 0x20000000 for the normal-world OS and the Ram_size to 0x10000000 (256 MB).
The secure world OS is loaded at 0x10000000 according to the link address of fiasco kernel on the i.mx6, and has 256 MB of Ram.
When I start the vm-tz example, the reserve_area( ) method is executed successfully,
...
l4_addr_t v = Ram_base; L4Re::chksys(env->rm()->reserve_area(&v, Ram_size, L4Re::Rm::Reserved));
fault = l4sigma0_map_iomem(sigma0_cap.cap(), Ram_base, Ram_base, Ram_size, 1); if (fault) { printf("Cannot map nonsecure memory: %s\n", l4sigma0_map_errstr(fault)); exit(1); }
...
but the l4sigma0_map_iomem( ) returns an error:
... Vmm started Cannot map nonsecure memory No fpage received MOE: task 270000679 exited with 1
Then the programs stops executing, the setup_linux(vmstate) function is not executed, and the ATAG data structure is not copied.
Do you have an idea of what might cause this fault.
Thank you very much in advance.
Best regars, Mahdi
On Fri, Mar 20, 2015 at 9:48 AM, Mahdi Aichouch foxmehdi@gmail.com wrote:
Hello,
I am trying to test the "vm-tz", and I created a new entry in the "/src/l4/conf/modules.list".
entry tz_vm roottask moe --init=rom/vm-tz module l4re module vm-tz
Is my entry correct? Or there is some missing modules? How to know what modules should be included?
Does someone has a successful running configuration. Is it possible to share with us a working configuration.
Thank you very much in advance.
Best regards,
Mahdi
On Tue, Mar 17, 2015 at 4:39 PM, Mahdi Aichouch foxmehdi@gmail.com wrote:
Hello,
I was able to correct the error related to the creation of the VM, by recompiling the fiasco kernel using the "trustzone secure side" as an Execution Model option instead of the "Standard Mode".
Now the code goes further and it stops at
l4sigma0_map_iomem(sigma0_cap.cap(), Ram_base, Ram_base, Ram_size, 1);
which return the following error:
MOE: Hello world MOE: found 1031204 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-1113365c] [C:504000] vm-tz MOE: cmdline: moe --init=rom/vm-tz MOE: Starting: rom/vm-tz MOE: loading 'rom/vm-tz' Vmm started Cannot map nonsecure memory No fpage received
I used the same memory parameters of the example, that is, the RAM base of the non secure world is 0x20000000, and the RAM size is 0x00100000.
Could someone help me to correct this.
Thank you very much in advance.
Best regards, Mahdi
On Tue, Mar 17, 2015 at 2:46 PM, Mahdi Aichouch foxmehdi@gmail.com wrote:
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