Hello,
I am trying to port the bare-hw trustzone to the Freescale i.MX 6 quad-core Sabre SD board.
I started from the source code given in this repository: https://github.com/decaprox/genode
I adapted the TSC-380 driver from the versatile express version as a TZASC to the i.MX-6 board.
At this moment, I just configure the existing TSC-380 with the right base address, but I did not yet configured it to secure any memory region.
Also, I did not yet used the CSU that was implemented for the i.MX53 to secure any device.
I partitioned the the memory space into two parts:
0x1000 0000 - 0x2000 0000 : as a secure memory space 0x2000 0000 - 0x4000 0000 : as a non secure memory space
I implemented a small kernel in order to test the implementation.
My simple kernel is just an assembly code that call C function, that prints a message on the serial port.
I get an error after running the run/vmm test case. Here are the debug messages that I get
void Kernel::trustzone_initialization(Kernel::Pic*): --- IMX6 trustzone INIT --- Core memory allocator --------------------- Allocator 102d46c0 dump: Block: [10000000,1000001c) size=0000001c avail=00000000 max_avail=00000000 Block: [1000001c,10000038) size=0000001c avail=00000000 max_avail=00000000 Block: [10000038,10000054) size=0000001c avail=00000000 max_avail=1fd28000 Block: [10000054,10000070) size=0000001c avail=00000000 max_avail=00000000 Block: [10000070,1000008c) size=0000001c avail=00000000 max_avail=00000000 Block: [1000008c,10001000) size=00000f74 avail=00000f74 max_avail=1fd28000 Block: [102d8000,30000000) size=1fd28000 avail=1fd28000 max_avail=1fd28000 => mem_size=533893120 (509 MB) / mem_avail=533892980 (509 MB)
IO memory allocator ------------------- Allocator 102d4b1c dump: Block: [00000000,02020000) size=02020000 avail=02020000 max_avail=02020000 Block: [02024000,020d0000) size=000ac000 avail=000ac000 max_avail=0df2c000 Block: [020d4000,10000000) size=0df2c000 avail=0df2c000 max_avail=0df2c000 Block: [100ec000,100f0000) size=00004000 avail=00004000 max_avail=20000000 Block: [20000000,40000000) size=20000000 avail=20000000 max_avail=20000000 => mem_size=805289984 (767 MB) / mem_avail=805289984 (767 MB)
IRQ allocator ------------------- Allocator 102d53d4 dump: Block: [00000000,0000003a) size=0000003a avail=0000003a max_avail=0000003a Block: [0000003b,00000058) size=0000001d avail=0000001d max_avail=000003a7 Block: [00000059,00000400) size=000003a7 avail=000003a7 max_avail=000003a7 => mem_size=1022 (0 MB) / mem_avail=1022 (0 MB)
ROM filesystem -------------- Rom_fs 102d5814 dump: Rom: [100a5000,100a5358) linux Rom: [1004f000,1007fedc) init Rom: [100a7000,100a71ef) config Rom: [100a6000,100a601f) initrd.gz Rom: [10080000,100a409c) vmm
int main(): --- create local services --- int main(): --- start init --- int main(): transferred 508 MB to init int main(): --- init created, waiting for exit condition --- [init] Could not open file "ld.lib.so" [init] parent provides [init] service "ROM" [init] service "RAM" [init] service "IRQ" [init] service "IO_MEM" [init] service "CAP" [init] service "PD" [init] service "RM" [init] service "CPU" [init] service "LOG" [init] service "SIGNAL" [init] service "VM" [init] child "vmm" [init] RAM quota: 3932160 [init] ELF binary: vmm [init] priority: 0 [init -> vmm] Start virtual machine [init -> vmm] Curious exception occurred [init -> vmm] Cpu state: [init -> vmm] r0 = 00000000 [init -> vmm] r1 = 000008e0 [init -> vmm] r2 = 20000100 [init -> vmm] r3 = 00000000 [init -> vmm] r4 = 00000000 [init -> vmm] r5 = 00000000 [init -> vmm] r6 = 00000000 [init -> vmm] r7 = 00000000 [init -> vmm] r8 = 00000000 [init -> vmm] r9 = 00000000 [init -> vmm] r10 = 00000000 [init -> vmm] r11 = 00000000 [init -> vmm] r12 = 00000000 [init -> vmm] sp = 00000000 [init -> vmm] lr = 00000000 [init -> vmm] ip = 20000100 [init -> vmm] cpsr = 00000093 [init -> vmm] sp_und = 00000000 [init -> vmm] lr_und = 00000000 [init -> vmm] spsr_und = 00000000 [init -> vmm] sp_svc = 00000000 [init -> vmm] lr_svc = 00000000 [init -> vmm] spsr_svc = 00000000 [init -> vmm] sp_abt = 00000000 [init -> vmm] lr_abt = 00000000 [init -> vmm] spsr_abt = 00000000 [init -> vmm] sp_irq = 00000000 [init -> vmm] lr_irq = 00000000 [init -> vmm] spsr_irq = 00000000 [init -> vmm] sp_fiq = 00000000 [init -> vmm] lr_fiq = 00000000 [init -> vmm] spsr_fiq = 00000000 [init -> vmm] exception = reset virtual void Genode::Signal_session_component::free_context(Genode::Signal_context_capability): Not implemented
Note: The file linux and initrd.gz showed here are not real. I named my simple kernel as linux, and the initrd.gz file is an empty file.
The VMM version I am using loads an elf binary kernel.
I attached the assembly file of my simple kernel. From the dump of the CPU state, we can see that the IP register shows the first instruction of the kernel, which apparently generates an exception.
Could someone tell me how to track down the source of the error and help me to debug it.
Thanks very much in advance.
Kind regards, Mahdi
Chirag, my Master's student should be able to help you.since he is using an identical environment. He has not completely succeeded but should be ahead of you. Hopefully two heads are better than one!
Chirag, See how we can help Mahdi out. On Jan 6, 2015 6:55 PM, "Mahdi Aichouch" <foxmehdi@...9...> wrote:
Hello,
I am trying to port the bare-hw trustzone to the Freescale i.MX 6 quad-core Sabre SD board.
I started from the source code given in this repository: https://github.com/decaprox/genode
I adapted the TSC-380 driver from the versatile express version as a TZASC to the i.MX-6 board.
At this moment, I just configure the existing TSC-380 with the right base address, but I did not yet configured it to secure any memory region.
Also, I did not yet used the CSU that was implemented for the i.MX53 to secure any device.
I partitioned the the memory space into two parts:
0x1000 0000 - 0x2000 0000 : as a secure memory space 0x2000 0000 - 0x4000 0000 : as a non secure memory space
I implemented a small kernel in order to test the implementation.
My simple kernel is just an assembly code that call C function, that prints a message on the serial port.
I get an error after running the run/vmm test case. Here are the debug messages that I get
void Kernel::trustzone_initialization(Kernel::Pic*): --- IMX6 trustzone INIT --- Core memory allocator
Allocator 102d46c0 dump: Block: [10000000,1000001c) size=0000001c avail=00000000 max_avail=00000000 Block: [1000001c,10000038) size=0000001c avail=00000000 max_avail=00000000 Block: [10000038,10000054) size=0000001c avail=00000000 max_avail=1fd28000 Block: [10000054,10000070) size=0000001c avail=00000000 max_avail=00000000 Block: [10000070,1000008c) size=0000001c avail=00000000 max_avail=00000000 Block: [1000008c,10001000) size=00000f74 avail=00000f74 max_avail=1fd28000 Block: [102d8000,30000000) size=1fd28000 avail=1fd28000 max_avail=1fd28000 => mem_size=533893120 (509 MB) / mem_avail=533892980 (509 MB)
IO memory allocator
Allocator 102d4b1c dump: Block: [00000000,02020000) size=02020000 avail=02020000 max_avail=02020000 Block: [02024000,020d0000) size=000ac000 avail=000ac000 max_avail=0df2c000 Block: [020d4000,10000000) size=0df2c000 avail=0df2c000 max_avail=0df2c000 Block: [100ec000,100f0000) size=00004000 avail=00004000 max_avail=20000000 Block: [20000000,40000000) size=20000000 avail=20000000 max_avail=20000000 => mem_size=805289984 (767 MB) / mem_avail=805289984 (767 MB)
IRQ allocator
Allocator 102d53d4 dump: Block: [00000000,0000003a) size=0000003a avail=0000003a max_avail=0000003a Block: [0000003b,00000058) size=0000001d avail=0000001d max_avail=000003a7 Block: [00000059,00000400) size=000003a7 avail=000003a7 max_avail=000003a7 => mem_size=1022 (0 MB) / mem_avail=1022 (0 MB)
ROM filesystem
Rom_fs 102d5814 dump: Rom: [100a5000,100a5358) linux Rom: [1004f000,1007fedc) init Rom: [100a7000,100a71ef) config Rom: [100a6000,100a601f) initrd.gz Rom: [10080000,100a409c) vmm
int main(): --- create local services --- int main(): --- start init --- int main(): transferred 508 MB to init int main(): --- init created, waiting for exit condition --- [init] Could not open file "ld.lib.so" [init] parent provides [init] service "ROM" [init] service "RAM" [init] service "IRQ" [init] service "IO_MEM" [init] service "CAP" [init] service "PD" [init] service "RM" [init] service "CPU" [init] service "LOG" [init] service "SIGNAL" [init] service "VM" [init] child "vmm" [init] RAM quota: 3932160 [init] ELF binary: vmm [init] priority: 0 [init -> vmm] Start virtual machine [init -> vmm] Curious exception occurred [init -> vmm] Cpu state: [init -> vmm] r0 = 00000000 [init -> vmm] r1 = 000008e0 [init -> vmm] r2 = 20000100 [init -> vmm] r3 = 00000000 [init -> vmm] r4 = 00000000 [init -> vmm] r5 = 00000000 [init -> vmm] r6 = 00000000 [init -> vmm] r7 = 00000000 [init -> vmm] r8 = 00000000 [init -> vmm] r9 = 00000000 [init -> vmm] r10 = 00000000 [init -> vmm] r11 = 00000000 [init -> vmm] r12 = 00000000 [init -> vmm] sp = 00000000 [init -> vmm] lr = 00000000 [init -> vmm] ip = 20000100 [init -> vmm] cpsr = 00000093 [init -> vmm] sp_und = 00000000 [init -> vmm] lr_und = 00000000 [init -> vmm] spsr_und = 00000000 [init -> vmm] sp_svc = 00000000 [init -> vmm] lr_svc = 00000000 [init -> vmm] spsr_svc = 00000000 [init -> vmm] sp_abt = 00000000 [init -> vmm] lr_abt = 00000000 [init -> vmm] spsr_abt = 00000000 [init -> vmm] sp_irq = 00000000 [init -> vmm] lr_irq = 00000000 [init -> vmm] spsr_irq = 00000000 [init -> vmm] sp_fiq = 00000000 [init -> vmm] lr_fiq = 00000000 [init -> vmm] spsr_fiq = 00000000 [init -> vmm] exception = reset virtual void Genode::Signal_session_component::free_context(Genode::Signal_context_capability): Not implemented
Note: The file linux and initrd.gz showed here are not real. I named my simple kernel as linux, and the initrd.gz file is an empty file.
The VMM version I am using loads an elf binary kernel.
I attached the assembly file of my simple kernel. From the dump of the CPU state, we can see that the IP register shows the first instruction of the kernel, which apparently generates an exception.
Could someone tell me how to track down the source of the error and help me to debug it.
Thanks very much in advance.
Kind regards, Mahdi
Dive into the World of Parallel Programming! The Go Parallel Website, sponsored by Intel and developed in partnership with Slashdot Media, is your hub for all things parallel software development, from weekly thought leadership blogs to news, videos, case studies, tutorials and more. Take a look and join the conversation now. http://goparallel.sourceforge.net _______________________________________________ genode-main mailing list genode-main@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/genode-main
Sir,
I would be happy to work together with Chirag on this project. Thank you very much for your answer.
Kind regards, Mahdi
On Tue, Jan 6, 2015 at 3:50 PM, Madhu (Macaque Labs) <madhu@...275...> wrote:
Chirag, my Master's student should be able to help you.since he is using an identical environment. He has not completely succeeded but should be ahead of you. Hopefully two heads are better than one!
Chirag, See how we can help Mahdi out. On Jan 6, 2015 6:55 PM, "Mahdi Aichouch" <foxmehdi@...9...> wrote:
Hello,
I am trying to port the bare-hw trustzone to the Freescale i.MX 6 quad-core Sabre SD board.
I started from the source code given in this repository: https://github.com/decaprox/genode
I adapted the TSC-380 driver from the versatile express version as a TZASC to the i.MX-6 board.
At this moment, I just configure the existing TSC-380 with the right base address, but I did not yet configured it to secure any memory region.
Also, I did not yet used the CSU that was implemented for the i.MX53 to secure any device.
I partitioned the the memory space into two parts:
0x1000 0000 - 0x2000 0000 : as a secure memory space 0x2000 0000 - 0x4000 0000 : as a non secure memory space
I implemented a small kernel in order to test the implementation.
My simple kernel is just an assembly code that call C function, that prints a message on the serial port.
I get an error after running the run/vmm test case. Here are the debug messages that I get
void Kernel::trustzone_initialization(Kernel::Pic*): --- IMX6 trustzone INIT --- Core memory allocator
Allocator 102d46c0 dump: Block: [10000000,1000001c) size=0000001c avail=00000000 max_avail=00000000 Block: [1000001c,10000038) size=0000001c avail=00000000 max_avail=00000000 Block: [10000038,10000054) size=0000001c avail=00000000 max_avail=1fd28000 Block: [10000054,10000070) size=0000001c avail=00000000 max_avail=00000000 Block: [10000070,1000008c) size=0000001c avail=00000000 max_avail=00000000 Block: [1000008c,10001000) size=00000f74 avail=00000f74 max_avail=1fd28000 Block: [102d8000,30000000) size=1fd28000 avail=1fd28000 max_avail=1fd28000 => mem_size=533893120 (509 MB) / mem_avail=533892980 (509 MB)
IO memory allocator
Allocator 102d4b1c dump: Block: [00000000,02020000) size=02020000 avail=02020000 max_avail=02020000 Block: [02024000,020d0000) size=000ac000 avail=000ac000 max_avail=0df2c000 Block: [020d4000,10000000) size=0df2c000 avail=0df2c000 max_avail=0df2c000 Block: [100ec000,100f0000) size=00004000 avail=00004000 max_avail=20000000 Block: [20000000,40000000) size=20000000 avail=20000000 max_avail=20000000 => mem_size=805289984 (767 MB) / mem_avail=805289984 (767 MB)
IRQ allocator
Allocator 102d53d4 dump: Block: [00000000,0000003a) size=0000003a avail=0000003a max_avail=0000003a Block: [0000003b,00000058) size=0000001d avail=0000001d max_avail=000003a7 Block: [00000059,00000400) size=000003a7 avail=000003a7 max_avail=000003a7 => mem_size=1022 (0 MB) / mem_avail=1022 (0 MB)
ROM filesystem
Rom_fs 102d5814 dump: Rom: [100a5000,100a5358) linux Rom: [1004f000,1007fedc) init Rom: [100a7000,100a71ef) config Rom: [100a6000,100a601f) initrd.gz Rom: [10080000,100a409c) vmm
int main(): --- create local services --- int main(): --- start init --- int main(): transferred 508 MB to init int main(): --- init created, waiting for exit condition --- [init] Could not open file "ld.lib.so" [init] parent provides [init] service "ROM" [init] service "RAM" [init] service "IRQ" [init] service "IO_MEM" [init] service "CAP" [init] service "PD" [init] service "RM" [init] service "CPU" [init] service "LOG" [init] service "SIGNAL" [init] service "VM" [init] child "vmm" [init] RAM quota: 3932160 [init] ELF binary: vmm [init] priority: 0 [init -> vmm] Start virtual machine [init -> vmm] Curious exception occurred [init -> vmm] Cpu state: [init -> vmm] r0 = 00000000 [init -> vmm] r1 = 000008e0 [init -> vmm] r2 = 20000100 [init -> vmm] r3 = 00000000 [init -> vmm] r4 = 00000000 [init -> vmm] r5 = 00000000 [init -> vmm] r6 = 00000000 [init -> vmm] r7 = 00000000 [init -> vmm] r8 = 00000000 [init -> vmm] r9 = 00000000 [init -> vmm] r10 = 00000000 [init -> vmm] r11 = 00000000 [init -> vmm] r12 = 00000000 [init -> vmm] sp = 00000000 [init -> vmm] lr = 00000000 [init -> vmm] ip = 20000100 [init -> vmm] cpsr = 00000093 [init -> vmm] sp_und = 00000000 [init -> vmm] lr_und = 00000000 [init -> vmm] spsr_und = 00000000 [init -> vmm] sp_svc = 00000000 [init -> vmm] lr_svc = 00000000 [init -> vmm] spsr_svc = 00000000 [init -> vmm] sp_abt = 00000000 [init -> vmm] lr_abt = 00000000 [init -> vmm] spsr_abt = 00000000 [init -> vmm] sp_irq = 00000000 [init -> vmm] lr_irq = 00000000 [init -> vmm] spsr_irq = 00000000 [init -> vmm] sp_fiq = 00000000 [init -> vmm] lr_fiq = 00000000 [init -> vmm] spsr_fiq = 00000000 [init -> vmm] exception = reset virtual void Genode::Signal_session_component::free_context(Genode::Signal_context_capability): Not implemented
Note: The file linux and initrd.gz showed here are not real. I named my simple kernel as linux, and the initrd.gz file is an empty file.
The VMM version I am using loads an elf binary kernel.
I attached the assembly file of my simple kernel. From the dump of the CPU state, we can see that the IP register shows the first instruction of the kernel, which apparently generates an exception.
Could someone tell me how to track down the source of the error and help me to debug it.
Thanks very much in advance.
Kind regards, Mahdi
Dive into the World of Parallel Programming! The Go Parallel Website, sponsored by Intel and developed in partnership with Slashdot Media, is your hub for all things parallel software development, from weekly thought leadership blogs to news, videos, case studies, tutorials and more. Take a look and join the conversation now. http://goparallel.sourceforge.net _______________________________________________ genode-main mailing list genode-main@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/genode-main
Dive into the World of Parallel Programming! The Go Parallel Website, sponsored by Intel and developed in partnership with Slashdot Media, is your hub for all things parallel software development, from weekly thought leadership blogs to news, videos, case studies, tutorials and more. Take a look and join the conversation now. http://goparallel.sourceforge.net _______________________________________________ genode-main mailing list genode-main@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/genode-main
Hi Mahdi,
I am glad to know that you are also working on same problem with the same environment.I would be happy to work with you.
Regarding your error Message, Please try to look the following thread may be you will get better insight from this. https://github.com/genodelabs/genode/issues/567
I am able to run switch from secure world to the Normal world. And i am using two separate Genode OS image in the both the world. And as much I know you should need CSU for imx6 to be implemented.
Regards Chirag Garg IIT Madras , Rise Lab
On Tue, Jan 6, 2015 at 9:22 PM, Mahdi Aichouch <foxmehdi@...9...> wrote:
Sir,
I would be happy to work together with Chirag on this project. Thank you very much for your answer.
Kind regards, Mahdi
On Tue, Jan 6, 2015 at 3:50 PM, Madhu (Macaque Labs) <madhu@...275...> wrote:
Chirag, my Master's student should be able to help you.since he is using an identical environment. He has not completely succeeded but should be ahead of you. Hopefully two heads are better than one!
Chirag, See how we can help Mahdi out. On Jan 6, 2015 6:55 PM, "Mahdi Aichouch" <foxmehdi@...9...> wrote:
Hello,
I am trying to port the bare-hw trustzone to the Freescale i.MX 6 quad-core Sabre SD board.
I started from the source code given in this repository: https://github.com/decaprox/genode
I adapted the TSC-380 driver from the versatile express version as a TZASC to the i.MX-6 board.
At this moment, I just configure the existing TSC-380 with the right base address, but I did not yet configured it to secure any memory region.
Also, I did not yet used the CSU that was implemented for the i.MX53 to secure any device.
I partitioned the the memory space into two parts:
0x1000 0000 - 0x2000 0000 : as a secure memory space 0x2000 0000 - 0x4000 0000 : as a non secure memory space
I implemented a small kernel in order to test the implementation.
My simple kernel is just an assembly code that call C function, that prints a message on the serial port.
I get an error after running the run/vmm test case. Here are the debug messages that I get
void Kernel::trustzone_initialization(Kernel::Pic*): --- IMX6 trustzone INIT --- Core memory allocator
Allocator 102d46c0 dump: Block: [10000000,1000001c) size=0000001c avail=00000000 max_avail=00000000 Block: [1000001c,10000038) size=0000001c avail=00000000 max_avail=00000000 Block: [10000038,10000054) size=0000001c avail=00000000 max_avail=1fd28000 Block: [10000054,10000070) size=0000001c avail=00000000 max_avail=00000000 Block: [10000070,1000008c) size=0000001c avail=00000000 max_avail=00000000 Block: [1000008c,10001000) size=00000f74 avail=00000f74 max_avail=1fd28000 Block: [102d8000,30000000) size=1fd28000 avail=1fd28000 max_avail=1fd28000 => mem_size=533893120 (509 MB) / mem_avail=533892980 (509 MB)
IO memory allocator
Allocator 102d4b1c dump: Block: [00000000,02020000) size=02020000 avail=02020000 max_avail=02020000 Block: [02024000,020d0000) size=000ac000 avail=000ac000 max_avail=0df2c000 Block: [020d4000,10000000) size=0df2c000 avail=0df2c000 max_avail=0df2c000 Block: [100ec000,100f0000) size=00004000 avail=00004000 max_avail=20000000 Block: [20000000,40000000) size=20000000 avail=20000000 max_avail=20000000 => mem_size=805289984 (767 MB) / mem_avail=805289984 (767 MB)
IRQ allocator
Allocator 102d53d4 dump: Block: [00000000,0000003a) size=0000003a avail=0000003a max_avail=0000003a Block: [0000003b,00000058) size=0000001d avail=0000001d max_avail=000003a7 Block: [00000059,00000400) size=000003a7 avail=000003a7 max_avail=000003a7 => mem_size=1022 (0 MB) / mem_avail=1022 (0 MB)
ROM filesystem
Rom_fs 102d5814 dump: Rom: [100a5000,100a5358) linux Rom: [1004f000,1007fedc) init Rom: [100a7000,100a71ef) config Rom: [100a6000,100a601f) initrd.gz Rom: [10080000,100a409c) vmm
int main(): --- create local services --- int main(): --- start init --- int main(): transferred 508 MB to init int main(): --- init created, waiting for exit condition --- [init] Could not open file "ld.lib.so" [init] parent provides [init] service "ROM" [init] service "RAM" [init] service "IRQ" [init] service "IO_MEM" [init] service "CAP" [init] service "PD" [init] service "RM" [init] service "CPU" [init] service "LOG" [init] service "SIGNAL" [init] service "VM" [init] child "vmm" [init] RAM quota: 3932160 [init] ELF binary: vmm [init] priority: 0 [init -> vmm] Start virtual machine [init -> vmm] Curious exception occurred [init -> vmm] Cpu state: [init -> vmm] r0 = 00000000 [init -> vmm] r1 = 000008e0 [init -> vmm] r2 = 20000100 [init -> vmm] r3 = 00000000 [init -> vmm] r4 = 00000000 [init -> vmm] r5 = 00000000 [init -> vmm] r6 = 00000000 [init -> vmm] r7 = 00000000 [init -> vmm] r8 = 00000000 [init -> vmm] r9 = 00000000 [init -> vmm] r10 = 00000000 [init -> vmm] r11 = 00000000 [init -> vmm] r12 = 00000000 [init -> vmm] sp = 00000000 [init -> vmm] lr = 00000000 [init -> vmm] ip = 20000100 [init -> vmm] cpsr = 00000093 [init -> vmm] sp_und = 00000000 [init -> vmm] lr_und = 00000000 [init -> vmm] spsr_und = 00000000 [init -> vmm] sp_svc = 00000000 [init -> vmm] lr_svc = 00000000 [init -> vmm] spsr_svc = 00000000 [init -> vmm] sp_abt = 00000000 [init -> vmm] lr_abt = 00000000 [init -> vmm] spsr_abt = 00000000 [init -> vmm] sp_irq = 00000000 [init -> vmm] lr_irq = 00000000 [init -> vmm] spsr_irq = 00000000 [init -> vmm] sp_fiq = 00000000 [init -> vmm] lr_fiq = 00000000 [init -> vmm] spsr_fiq = 00000000 [init -> vmm] exception = reset virtual void Genode::Signal_session_component::free_context(Genode::Signal_context_capability): Not implemented
Note: The file linux and initrd.gz showed here are not real. I named my simple kernel as linux, and the initrd.gz file is an empty file.
The VMM version I am using loads an elf binary kernel.
I attached the assembly file of my simple kernel. From the dump of the CPU state, we can see that the IP register shows the first instruction of the kernel, which apparently generates an exception.
Could someone tell me how to track down the source of the error and help me to debug it.
Thanks very much in advance.
Kind regards, Mahdi
Dive into the World of Parallel Programming! The Go Parallel Website, sponsored by Intel and developed in partnership with Slashdot Media, is your hub for all things parallel software development, from weekly thought leadership blogs to news, videos, case studies, tutorials and more. Take a look and join the conversation now. http://goparallel.sourceforge.net _______________________________________________ genode-main mailing list genode-main@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/genode-main
Dive into the World of Parallel Programming! The Go Parallel Website, sponsored by Intel and developed in partnership with Slashdot Media, is your hub for all things parallel software development, from weekly thought leadership blogs to news, videos, case studies, tutorials and more. Take a look and join the conversation now. http://goparallel.sourceforge.net _______________________________________________ genode-main mailing list genode-main@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/genode-main
Dive into the World of Parallel Programming! The Go Parallel Website, sponsored by Intel and developed in partnership with Slashdot Media, is your hub for all things parallel software development, from weekly thought leadership blogs to news, videos, case studies, tutorials and more. Take a look and join the conversation now. http://goparallel.sourceforge.net _______________________________________________ genode-main mailing list genode-main@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/genode-main
Hi,
On 01/06/2015 02:24 PM, Mahdi Aichouch wrote:
Hello,
I am trying to port the bare-hw trustzone to the Freescale i.MX 6 quad-core Sabre SD board.
I started from the source code given in this repository: https://github.com/decaprox/genode
I adapted the TSC-380 driver from the versatile express version as a TZASC to the i.MX-6 board.
At this moment, I just configure the existing TSC-380 with the right base address, but I did not yet configured it to secure any memory region.
Also, I did not yet used the CSU that was implemented for the i.MX53 to secure any device.
I partitioned the the memory space into two parts:
0x1000 0000 - 0x2000 0000 : as a secure memory space 0x2000 0000 - 0x4000 0000 : as a non secure memory space
I implemented a small kernel in order to test the implementation.
I like your approach to start with a minimal kernel so that you really know what shall be going on. However, did you tested your small kernel without Genode by directly loading it via u-boot?
My simple kernel is just an assembly code that call C function, that prints a message on the serial port.
I get an error after running the run/vmm test case. Here are the debug messages that I get
void Kernel::trustzone_initialization(Kernel::Pic*): --- IMX6 trustzone INIT --- Core memory allocator
Allocator 102d46c0 dump: Block: [10000000,1000001c) size=0000001c avail=00000000 max_avail=00000000 Block: [1000001c,10000038) size=0000001c avail=00000000 max_avail=00000000 Block: [10000038,10000054) size=0000001c avail=00000000 max_avail=1fd28000 Block: [10000054,10000070) size=0000001c avail=00000000 max_avail=00000000 Block: [10000070,1000008c) size=0000001c avail=00000000 max_avail=00000000 Block: [1000008c,10001000) size=00000f74 avail=00000f74 max_avail=1fd28000 Block: [102d8000,30000000) size=1fd28000 avail=1fd28000 max_avail=1fd28000 => mem_size=533893120 (509 MB) / mem_avail=533892980 (509 MB)
IO memory allocator
Allocator 102d4b1c dump: Block: [00000000,02020000) size=02020000 avail=02020000 max_avail=02020000 Block: [02024000,020d0000) size=000ac000 avail=000ac000 max_avail=0df2c000 Block: [020d4000,10000000) size=0df2c000 avail=0df2c000 max_avail=0df2c000 Block: [100ec000,100f0000) size=00004000 avail=00004000 max_avail=20000000 Block: [20000000,40000000) size=20000000 avail=20000000 max_avail=20000000 => mem_size=805289984 (767 MB) / mem_avail=805289984 (767 MB)
IRQ allocator
Allocator 102d53d4 dump: Block: [00000000,0000003a) size=0000003a avail=0000003a max_avail=0000003a Block: [0000003b,00000058) size=0000001d avail=0000001d max_avail=000003a7 Block: [00000059,00000400) size=000003a7 avail=000003a7 max_avail=000003a7 => mem_size=1022 (0 MB) / mem_avail=1022 (0 MB)
ROM filesystem
Rom_fs 102d5814 dump: Rom: [100a5000,100a5358) linux Rom: [1004f000,1007fedc) init Rom: [100a7000,100a71ef) config Rom: [100a6000,100a601f) initrd.gz Rom: [10080000,100a409c) vmm
int main(): --- create local services --- int main(): --- start init --- int main(): transferred 508 MB to init int main(): --- init created, waiting for exit condition --- [init] Could not open file "ld.lib.so http://ld.lib.so" [init] parent provides [init] service "ROM" [init] service "RAM" [init] service "IRQ" [init] service "IO_MEM" [init] service "CAP" [init] service "PD" [init] service "RM" [init] service "CPU" [init] service "LOG" [init] service "SIGNAL" [init] service "VM" [init] child "vmm" [init] RAM quota: 3932160 [init] ELF binary: vmm [init] priority: 0 [init -> vmm] Start virtual machine [init -> vmm] Curious exception occurred [init -> vmm] Cpu state: [init -> vmm] r0 = 00000000 [init -> vmm] r1 = 000008e0 [init -> vmm] r2 = 20000100 [init -> vmm] r3 = 00000000 [init -> vmm] r4 = 00000000 [init -> vmm] r5 = 00000000 [init -> vmm] r6 = 00000000 [init -> vmm] r7 = 00000000 [init -> vmm] r8 = 00000000 [init -> vmm] r9 = 00000000 [init -> vmm] r10 = 00000000 [init -> vmm] r11 = 00000000 [init -> vmm] r12 = 00000000 [init -> vmm] sp = 00000000 [init -> vmm] lr = 00000000 [init -> vmm] ip = 20000100 [init -> vmm] cpsr = 00000093 [init -> vmm] sp_und = 00000000 [init -> vmm] lr_und = 00000000 [init -> vmm] spsr_und = 00000000 [init -> vmm] sp_svc = 00000000 [init -> vmm] lr_svc = 00000000 [init -> vmm] spsr_svc = 00000000 [init -> vmm] sp_abt = 00000000 [init -> vmm] lr_abt = 00000000 [init -> vmm] spsr_abt = 00000000 [init -> vmm] sp_irq = 00000000 [init -> vmm] lr_irq = 00000000 [init -> vmm] spsr_irq = 00000000 [init -> vmm] sp_fiq = 00000000 [init -> vmm] lr_fiq = 00000000 [init -> vmm] spsr_fiq = 00000000 [init -> vmm] exception = reset virtual void Genode::Signal_session_component::free_context(Genode::Signal_context_capability): Not implemented
Note: The file linux and initrd.gz showed here are not real. I named my simple kernel as linux, and the initrd.gz file is an empty file.
The VMM version I am using loads an elf binary kernel.
I attached the assembly file of my simple kernel. From the dump of the CPU state, we can see that the IP register shows the first instruction of the kernel, which apparently generates an exception.
Could someone tell me how to track down the source of the error and help me to debug it.
When looking at your disassemly I'm wondering why your kernel is linked to 0x70000000 whereby it is loaded to 0x20000100? And is it really loaded to 0x20000100 where the IP points to? To be able to reproduce your results and possibly help you, it would be fine if you provide a branch, which contains your simple kernel and a complete run-script that shows above results.
BTW. I don't think the CSU is a problem at this stage. It comes into play when firstly touching a peripheral (e.g.: the UART). Whereby I don't know how it behaves in reset state on i.MX6, whether it grants or denies access for the non-secure world by default.
Regards Stefan
Thanks very much in advance.
Kind regards, Mahdi
Dive into the World of Parallel Programming! The Go Parallel Website, sponsored by Intel and developed in partnership with Slashdot Media, is your hub for all things parallel software development, from weekly thought leadership blogs to news, videos, case studies, tutorials and more. Take a look and join the conversation now. http://goparallel.sourceforge.net
genode-main mailing list genode-main@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/genode-main
Hello,
First, thank you very much Chirag and Stefan for your answers.
I tried to debug my simple kernel on the i.MX6 through the DS5 JTAG debugger. Prior to running the kernel using the debugger, the imx6 board is configured to run u-boot from an SD card and after the initialization u-boot holds and waits to execute the kernel code.
As we can see in the debug messages below, I was able to do a step by step walk through the source code from the assembler to the C code. It seems that it is working...
Also I tested this kernel on the Qemu Realview Baseboard Platform explorer for cortex-a9 and it worked.
I also created a repository in which I added the sources of the simple kernel. https://github.com/macdi/simple-arm-kernel
*>a complete run-script that shows above results.*
In my test case I used the command $>make run/vmm to run the bare-hw and vmm. I attached the generated file boot_modules.s. Is this the run script you request or another one? Could you please tell where to look for it?
*>When looking at your disassemly I'm wondering why your kernel is linked>to 0x70000000 whereby it is loaded to 0x20000100?*
Could you please tell me how did you figure out that it is linked to the address 0x70000000?
*>And is it really loaded to 0x20000100 where the IP points to?*
Is it possible to tell me how to verify that it is loaded to the address 0x20000100?
Thanks very much in advance.
Best regards,
Mahdi
Loaded section .text: S:0x20000100 ~ S:0x2000026F (size 0x170) Loaded section .rodata: S:0x20000270 ~ S:0x2000028F (size 0x20) Entry point S:0x20000100 cd "/home/aichouch/DS-5-Workspace-examples" Working directory "/home/aichouch/DS-5-Workspace-examples" directory "/home/aichouch/dev/bare_metal_arm" Source directories searched: /home/aichouch/dev/bare_metal_arm:$cdir:$cwd:$idir set debug-from main start Starting target with image /home/aichouch/dev/bare_metal/simple-arm-kernel/kernel.elf Running from entry point WARNING(CMD399-COR168): ! Failed to start the target ! No function named "main" could be found WARNING(CMD407): Trying the entry point instead wait Execution stopped at: S:0x20000100 In kernel.elf (no debug info) S:0x20000100 LDR sp,[pc,#4] ; [0x2000010C] = 0x20001290 wait next Execution stopped at: S:0x20000104 S:0x20000104 BL _init ; 0x20000258 wait step Execution stopped at: S:0x20000258 In kernel.c S:0x20000258 16,0 { wait next Execution stopped at: S:0x20000260 S:0x20000260 17,0 print_uart0("bare metal: Hello world!\n"); wait next Execution stopped at: S:0x2000026C S:0x2000026C 19,0 while(1); wait next Execution stopped at: S:0x2000026C S:0x2000026C 19,0 while(1); wait next Execution stopped at: S:0x2000026C S:0x2000026C 19,0 while(1); wait continue interrupt Execution stopped at: S:0x2000026C S:0x2000026C 19,0 while(1); wait continue interrupt Execution stopped at: S:0x2000026C S:0x2000026C 19,0 while(1);
On Wed, Jan 7, 2015 at 10:35 AM, Stefan Kalkowski < stefan.kalkowski@...1...> wrote:
Hi,
On 01/06/2015 02:24 PM, Mahdi Aichouch wrote:
Hello,
I am trying to port the bare-hw trustzone to the Freescale i.MX 6 quad-core Sabre SD board.
I started from the source code given in this repository: https://github.com/decaprox/genode
I adapted the TSC-380 driver from the versatile express version as a TZASC to the i.MX-6 board.
At this moment, I just configure the existing TSC-380 with the right base address, but I did not yet configured it to secure any memory
region.
Also, I did not yet used the CSU that was implemented for the i.MX53 to secure any device.
I partitioned the the memory space into two parts:
0x1000 0000 - 0x2000 0000 : as a secure memory space 0x2000 0000 - 0x4000 0000 : as a non secure memory space
I implemented a small kernel in order to test the implementation.
I like your approach to start with a minimal kernel so that you really know what shall be going on. However, did you tested your small kernel without Genode by directly loading it via u-boot?
My simple kernel is just an assembly code that call C function, that prints a message on the serial port.
I get an error after running the run/vmm test case. Here are the debug messages that I get
void Kernel::trustzone_initialization(Kernel::Pic*): --- IMX6 trustzone INIT --- Core memory allocator
Allocator 102d46c0 dump: Block: [10000000,1000001c) size=0000001c avail=00000000
max_avail=00000000
Block: [1000001c,10000038) size=0000001c avail=00000000
max_avail=00000000
Block: [10000038,10000054) size=0000001c avail=00000000
max_avail=1fd28000
Block: [10000054,10000070) size=0000001c avail=00000000
max_avail=00000000
Block: [10000070,1000008c) size=0000001c avail=00000000
max_avail=00000000
Block: [1000008c,10001000) size=00000f74 avail=00000f74
max_avail=1fd28000
Block: [102d8000,30000000) size=1fd28000 avail=1fd28000
max_avail=1fd28000
=> mem_size=533893120 (509 MB) / mem_avail=533892980 (509 MB)
IO memory allocator
Allocator 102d4b1c dump: Block: [00000000,02020000) size=02020000 avail=02020000
max_avail=02020000
Block: [02024000,020d0000) size=000ac000 avail=000ac000
max_avail=0df2c000
Block: [020d4000,10000000) size=0df2c000 avail=0df2c000
max_avail=0df2c000
Block: [100ec000,100f0000) size=00004000 avail=00004000
max_avail=20000000
Block: [20000000,40000000) size=20000000 avail=20000000
max_avail=20000000
=> mem_size=805289984 (767 MB) / mem_avail=805289984 (767 MB)
IRQ allocator
Allocator 102d53d4 dump: Block: [00000000,0000003a) size=0000003a avail=0000003a
max_avail=0000003a
Block: [0000003b,00000058) size=0000001d avail=0000001d
max_avail=000003a7
Block: [00000059,00000400) size=000003a7 avail=000003a7
max_avail=000003a7
=> mem_size=1022 (0 MB) / mem_avail=1022 (0 MB)
ROM filesystem
Rom_fs 102d5814 dump: Rom: [100a5000,100a5358) linux Rom: [1004f000,1007fedc) init Rom: [100a7000,100a71ef) config Rom: [100a6000,100a601f) initrd.gz Rom: [10080000,100a409c) vmm
int main(): --- create local services --- int main(): --- start init --- int main(): transferred 508 MB to init int main(): --- init created, waiting for exit condition --- [init] Could not open file "ld.lib.so http://ld.lib.so" [init] parent provides [init] service "ROM" [init] service "RAM" [init] service "IRQ" [init] service "IO_MEM" [init] service "CAP" [init] service "PD" [init] service "RM" [init] service "CPU" [init] service "LOG" [init] service "SIGNAL" [init] service "VM" [init] child "vmm" [init] RAM quota: 3932160 [init] ELF binary: vmm [init] priority: 0 [init -> vmm] Start virtual machine [init -> vmm] Curious exception occurred [init -> vmm] Cpu state: [init -> vmm] r0 = 00000000 [init -> vmm] r1 = 000008e0 [init -> vmm] r2 = 20000100 [init -> vmm] r3 = 00000000 [init -> vmm] r4 = 00000000 [init -> vmm] r5 = 00000000 [init -> vmm] r6 = 00000000 [init -> vmm] r7 = 00000000 [init -> vmm] r8 = 00000000 [init -> vmm] r9 = 00000000 [init -> vmm] r10 = 00000000 [init -> vmm] r11 = 00000000 [init -> vmm] r12 = 00000000 [init -> vmm] sp = 00000000 [init -> vmm] lr = 00000000 [init -> vmm] ip = 20000100 [init -> vmm] cpsr = 00000093 [init -> vmm] sp_und = 00000000 [init -> vmm] lr_und = 00000000 [init -> vmm] spsr_und = 00000000 [init -> vmm] sp_svc = 00000000 [init -> vmm] lr_svc = 00000000 [init -> vmm] spsr_svc = 00000000 [init -> vmm] sp_abt = 00000000 [init -> vmm] lr_abt = 00000000 [init -> vmm] spsr_abt = 00000000 [init -> vmm] sp_irq = 00000000 [init -> vmm] lr_irq = 00000000 [init -> vmm] spsr_irq = 00000000 [init -> vmm] sp_fiq = 00000000 [init -> vmm] lr_fiq = 00000000 [init -> vmm] spsr_fiq = 00000000 [init -> vmm] exception = reset virtual void
Genode::Signal_session_component::free_context(Genode::Signal_context_capability):
Not implemented
Note: The file linux and initrd.gz showed here are not real. I named my simple kernel as linux, and the initrd.gz file is an empty file.
The VMM version I am using loads an elf binary kernel.
I attached the assembly file of my simple kernel. From the dump of the CPU state, we can see that the IP register shows the first instruction of the kernel, which apparently generates an exception.
Could someone tell me how to track down the source of the error and help me to debug it.
When looking at your disassemly I'm wondering why your kernel is linked to 0x70000000 whereby it is loaded to 0x20000100? And is it really loaded to 0x20000100 where the IP points to? To be able to reproduce your results and possibly help you, it would be fine if you provide a branch, which contains your simple kernel and a complete run-script that shows above results.
BTW. I don't think the CSU is a problem at this stage. It comes into play when firstly touching a peripheral (e.g.: the UART). Whereby I don't know how it behaves in reset state on i.MX6, whether it grants or denies access for the non-secure world by default.
Regards Stefan
Thanks very much in advance.
Kind regards, Mahdi
Dive into the World of Parallel Programming! The Go Parallel Website, sponsored by Intel and developed in partnership with Slashdot Media, is
your
hub for all things parallel software development, from weekly thought leadership blogs to news, videos, case studies, tutorials and more. Take
a
look and join the conversation now. http://goparallel.sourceforge.net
genode-main mailing list genode-main@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/genode-main
-- Stefan Kalkowski Genode Labs
http://www.genode-labs.com/ · http://genode.org/
Dive into the World of Parallel Programming! The Go Parallel Website, sponsored by Intel and developed in partnership with Slashdot Media, is your hub for all things parallel software development, from weekly thought leadership blogs to news, videos, case studies, tutorials and more. Take a look and join the conversation now. http://goparallel.sourceforge.net _______________________________________________ genode-main mailing list genode-main@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/genode-main
Hi,
On 01/07/2015 03:54 PM, Mahdi Aichouch wrote:
Hello,
First, thank you very much Chirag and Stefan for your answers.
I tried to debug my simple kernel on the i.MX6 through the DS5 JTAG debugger. Prior to running the kernel using the debugger, the imx6 board is configured to run u-boot from an SD card and after the initialization u-boot holds and waits to execute the kernel code.
As we can see in the debug messages below, I was able to do a step by step walk through the source code from the assembler to the C code. It seems that it is working...
Also I tested this kernel on the Qemu Realview Baseboard Platform explorer for cortex-a9 and it worked.
I also created a repository in which I added the sources of the simple kernel. https://github.com/macdi/simple-arm-kernel
/>a complete run-script that shows above results./ / / In my test case I used the command $>make run/vmm to run the bare-hw and vmm. I attached the generated file boot_modules.s. Is this the run script you request or another one? Could you please tell where to look for it?
Ok, I see, thanks for providing the source of your simple kernel.
With a complete run-script I meant a script that builds everything needed to execute your failing scenario. You already used such a script under the hood when doing "make run/vmm". Whenever you trigger "make run/XXX" the build system of Genode searches for a XXX.run script in the "repos/*/run/" directories of the enabled repositories. A run-script is a small TCL script that is used by Genode's "run" tool. It defines what needs to be build, it defines the configuration of the system, and everything else that needs to be done to prepare e.g. a system image that can be loaded via u-boot. It very much simplifies communication between us developers, because if I've a problem I want another developer to look at, I use a run-script that exactly reproduces the issue and the other developer just needs to execute the script to look at. For more information about the run tool, please have a look at:
http://genode.org/documentation/developer-resources/build_system#Automated_i...
Given your above explanations I assume you are using some vmm.run script you are not aware of. But the current Genode repository doesn't has a vmm.run script, only a tz_vmm.run script. So I assume you need some older Genode sources as base.
The even more interesting part for me is not only the run script, but all modifications you did to the VMM as well as the base platform to enable your scenario on i.MX6. Therefore I've asked for the branch you are using to compile your scenario. As a precaution, I reminded you to include the run-script you are using into that branch.
/>When looking at your disassemly I'm wondering why your kernel is linked
to 0x70000000 whereby it is loaded to 0x20000100?
/ / / Could you please tell me how did you figure out that it is linked to the address 0x70000000?
I just looked at the disassembly output you attached to your first mail. There the addresses are starting at 0x70000000 in contrast to the sources you provided in your last mail.
/ / />And is it really loaded to 0x20000100 where the IP points to?// / / / Is it possible to tell me how to verify that it is loaded to the address 0x20000100?
You have to look and respectively instrument the code of the virtual machine monitor (VMM), which normally is defined at "os/src/server/tz_vmm" (probably "os/src/server/vmm" in your older branch). All parameters like: the position of the normal world's RAM used by the guest OS is hardcoded within the VMM. So you need to adapt the VMM according to the needs of your scenario.
I hope that helps a bit.
Regards Stefan
Thanks very much in advance.
Best regards,
Mahdi
Loaded section .text: S:0x20000100 ~ S:0x2000026F (size 0x170) Loaded section .rodata: S:0x20000270 ~ S:0x2000028F (size 0x20) Entry point S:0x20000100 cd "/home/aichouch/DS-5-Workspace-examples" Working directory "/home/aichouch/DS-5-Workspace-examples" directory "/home/aichouch/dev/bare_metal_arm" Source directories searched: /home/aichouch/dev/bare_metal_arm:$cdir:$cwd:$idir set debug-from main start Starting target with image /home/aichouch/dev/bare_metal/simple-arm-kernel/kernel.elf Running from entry point WARNING(CMD399-COR168): ! Failed to start the target ! No function named "main" could be found WARNING(CMD407): Trying the entry point instead wait Execution stopped at: S:0x20000100 In kernel.elf (no debug info) S:0x20000100 LDR sp,[pc,#4] ; [0x2000010C] = 0x20001290 wait next Execution stopped at: S:0x20000104 S:0x20000104 BL _init ; 0x20000258 wait step Execution stopped at: S:0x20000258 In kernel.c S:0x20000258 16,0 { wait next Execution stopped at: S:0x20000260 S:0x20000260 17,0 print_uart0("bare metal: Hello world!\n"); wait next Execution stopped at: S:0x2000026C S:0x2000026C 19,0 while(1); wait next Execution stopped at: S:0x2000026C S:0x2000026C 19,0 while(1); wait next Execution stopped at: S:0x2000026C S:0x2000026C 19,0 while(1); wait continue interrupt Execution stopped at: S:0x2000026C S:0x2000026C 19,0 while(1); wait continue interrupt Execution stopped at: S:0x2000026C S:0x2000026C 19,0 while(1);
On Wed, Jan 7, 2015 at 10:35 AM, Stefan Kalkowski <stefan.kalkowski@...1... mailto:stefan.kalkowski@...1...> wrote:
Hi, On 01/06/2015 02:24 PM, Mahdi Aichouch wrote: > Hello, > > I am trying to port the bare-hw trustzone to the Freescale i.MX 6 > quad-core Sabre SD board. > > I started from the source code given in this > repository: https://github.com/decaprox/genode > > I adapted the TSC-380 driver from the versatile express version as a > TZASC to the i.MX-6 board. > > At this moment, I just configure the existing TSC-380 with the right > base address, but I did not yet configured it to secure any memory region. > > Also, I did not yet used the CSU that was implemented for the i.MX53 to > secure any device. > > I partitioned the the memory space into two parts: > > 0x1000 0000 - 0x2000 0000 : as a secure memory space > 0x2000 0000 - 0x4000 0000 : as a non secure memory space > > I implemented a small kernel in order to test the implementation. I like your approach to start with a minimal kernel so that you really know what shall be going on. However, did you tested your small kernel without Genode by directly loading it via u-boot? > > My simple kernel is just an assembly code that call C function, that > prints a message on > the serial port. > > I get an error after running the run/vmm test case. > Here are the debug messages that I get > > void Kernel::trustzone_initialization(Kernel::Pic*): --- IMX6 trustzone > INIT --- > Core memory allocator > --------------------- > Allocator 102d46c0 dump: > Block: [10000000,1000001c) size=0000001c avail=00000000 max_avail=00000000 > Block: [1000001c,10000038) size=0000001c avail=00000000 max_avail=00000000 > Block: [10000038,10000054) size=0000001c avail=00000000 max_avail=1fd28000 > Block: [10000054,10000070) size=0000001c avail=00000000 max_avail=00000000 > Block: [10000070,1000008c) size=0000001c avail=00000000 max_avail=00000000 > Block: [1000008c,10001000) size=00000f74 avail=00000f74 max_avail=1fd28000 > Block: [102d8000,30000000) size=1fd28000 avail=1fd28000 max_avail=1fd28000 > => mem_size=533893120 (509 MB) / mem_avail=533892980 (509 MB) > > IO memory allocator > ------------------- > Allocator 102d4b1c dump: > Block: [00000000,02020000) size=02020000 avail=02020000 max_avail=02020000 > Block: [02024000,020d0000) size=000ac000 avail=000ac000 max_avail=0df2c000 > Block: [020d4000,10000000) size=0df2c000 avail=0df2c000 max_avail=0df2c000 > Block: [100ec000,100f0000) size=00004000 avail=00004000 max_avail=20000000 > Block: [20000000,40000000) size=20000000 avail=20000000 max_avail=20000000 > => mem_size=805289984 (767 MB) / mem_avail=805289984 (767 MB) > > IRQ allocator > ------------------- > Allocator 102d53d4 dump: > Block: [00000000,0000003a) size=0000003a avail=0000003a max_avail=0000003a > Block: [0000003b,00000058) size=0000001d avail=0000001d max_avail=000003a7 > Block: [00000059,00000400) size=000003a7 avail=000003a7 max_avail=000003a7 > => mem_size=1022 (0 MB) / mem_avail=1022 (0 MB) > > ROM filesystem > -------------- > Rom_fs 102d5814 dump: > Rom: [100a5000,100a5358) linux > Rom: [1004f000,1007fedc) init > Rom: [100a7000,100a71ef) config > Rom: [100a6000,100a601f) initrd.gz > Rom: [10080000,100a409c) vmm > > int main(): --- create local services --- > int main(): --- start init --- > int main(): transferred 508 MB to init > int main(): --- init created, waiting for exit condition --- > [init] Could not open file "ld.lib.so <http://ld.lib.so> <http://ld.lib.so>" > [init] parent provides > [init] service "ROM" > [init] service "RAM" > [init] service "IRQ" > [init] service "IO_MEM" > [init] service "CAP" > [init] service "PD" > [init] service "RM" > [init] service "CPU" > [init] service "LOG" > [init] service "SIGNAL" > [init] service "VM" > [init] child "vmm" > [init] RAM quota: 3932160 > [init] ELF binary: vmm > [init] priority: 0 > [init -> vmm] Start virtual machine > [init -> vmm] Curious exception occurred > [init -> vmm] Cpu state: > [init -> vmm] r0 = 00000000 > [init -> vmm] r1 = 000008e0 > [init -> vmm] r2 = 20000100 > [init -> vmm] r3 = 00000000 > [init -> vmm] r4 = 00000000 > [init -> vmm] r5 = 00000000 > [init -> vmm] r6 = 00000000 > [init -> vmm] r7 = 00000000 > [init -> vmm] r8 = 00000000 > [init -> vmm] r9 = 00000000 > [init -> vmm] r10 = 00000000 > [init -> vmm] r11 = 00000000 > [init -> vmm] r12 = 00000000 > [init -> vmm] sp = 00000000 > [init -> vmm] lr = 00000000 > [init -> vmm] ip = 20000100 > [init -> vmm] cpsr = 00000093 > [init -> vmm] sp_und = 00000000 > [init -> vmm] lr_und = 00000000 > [init -> vmm] spsr_und = 00000000 > [init -> vmm] sp_svc = 00000000 > [init -> vmm] lr_svc = 00000000 > [init -> vmm] spsr_svc = 00000000 > [init -> vmm] sp_abt = 00000000 > [init -> vmm] lr_abt = 00000000 > [init -> vmm] spsr_abt = 00000000 > [init -> vmm] sp_irq = 00000000 > [init -> vmm] lr_irq = 00000000 > [init -> vmm] spsr_irq = 00000000 > [init -> vmm] sp_fiq = 00000000 > [init -> vmm] lr_fiq = 00000000 > [init -> vmm] spsr_fiq = 00000000 > [init -> vmm] exception = reset > virtual void > Genode::Signal_session_component::free_context(Genode::Signal_context_capability): > Not implemented > > Note: > The file linux and initrd.gz showed here are not real. I named my simple > kernel as linux, and the initrd.gz file is an empty file. > > The VMM version I am using loads an elf binary kernel. > > I attached the assembly file of my simple kernel. From the dump of the > CPU state, we can see that the IP register shows the first instruction > of the kernel, which apparently generates an exception. > > Could someone tell me how to track down the source of the error and help > me to debug it. When looking at your disassemly I'm wondering why your kernel is linked to 0x70000000 whereby it is loaded to 0x20000100? And is it really loaded to 0x20000100 where the IP points to? To be able to reproduce your results and possibly help you, it would be fine if you provide a branch, which contains your simple kernel and a complete run-script that shows above results. BTW. I don't think the CSU is a problem at this stage. It comes into play when firstly touching a peripheral (e.g.: the UART). Whereby I don't know how it behaves in reset state on i.MX6, whether it grants or denies access for the non-secure world by default. Regards Stefan > > Thanks very much in advance. > > Kind regards, > Mahdi > > > > ------------------------------------------------------------------------------ > Dive into the World of Parallel Programming! The Go Parallel Website, > sponsored by Intel and developed in partnership with Slashdot Media, is your > hub for all things parallel software development, from weekly thought > leadership blogs to news, videos, case studies, tutorials and more. Take a > look and join the conversation now. http://goparallel.sourceforge.net > > > > _______________________________________________ > genode-main mailing list > genode-main@lists.sourceforge.net <mailto:genode-main@lists.sourceforge.net> > https://lists.sourceforge.net/lists/listinfo/genode-main > -- Stefan Kalkowski Genode Labs http://www.genode-labs.com/ · http://genode.org/ ------------------------------------------------------------------------------ Dive into the World of Parallel Programming! The Go Parallel Website, sponsored by Intel and developed in partnership with Slashdot Media, is your hub for all things parallel software development, from weekly thought leadership blogs to news, videos, case studies, tutorials and more. Take a look and join the conversation now. http://goparallel.sourceforge.net _______________________________________________ genode-main mailing list genode-main@lists.sourceforge.net <mailto:genode-main@lists.sourceforge.net> https://lists.sourceforge.net/lists/listinfo/genode-main
Dive into the World of Parallel Programming! The Go Parallel Website, sponsored by Intel and developed in partnership with Slashdot Media, is your hub for all things parallel software development, from weekly thought leadership blogs to news, videos, case studies, tutorials and more. Take a look and join the conversation now. http://goparallel.sourceforge.net
genode-main mailing list genode-main@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/genode-main
Hello Stefan,
Thank you very much for your answer.
I created a branch that contains an adaptation of bare-hw with trustzone to i.MX6, and also an adaptation of the VMM.
https://github.com/macdi/genode-barehw-imx6-tz Could you please give it a look and tell what 's not correctly configured in my scenario.
I tried multiple runs of the test case and the symptoms are not stable, as we can see in the logs below. I also attached the assembly of the simple kernel.
Do you think that is related to this issue https://github.com/genodelabs/genode/issues/567 as Chirag has previously suggested.
Thank you in advance,
best regards Mahdi
[init -> vmm] Start virtual machine [init -> vmm] Vm tried to access 2000000c which isn't allowed [init -> vmm] Cpu state: [init -> vmm] r0 = 20000174 [init -> vmm] r1 = 000008e0 [init -> vmm] r2 = 20000100 [init -> vmm] r3 = 00000000 [init -> vmm] r4 = 00000000 [init -> vmm] r5 = 00000000 [init -> vmm] r6 = 00000000 [init -> vmm] r7 = 00000000 [init -> vmm] r8 = 00000000 [init -> vmm] r9 = 00000000 [init -> vmm] r10 = 00000000 [init -> vmm] r11 = 2000118c [init -> vmm] r12 = 00000000 [init -> vmm] sp = 00000000 [init -> vmm] lr = 00000000 [init -> vmm] ip = 20000118 [init -> vmm] cpsr = 00000093 [init -> vmm] sp_und = 00000000 [init -> vmm] lr_und = 00000000 [init -> vmm] spsr_und = 00000000 [init -> vmm] sp_svc = 20001188 [init -> vmm] lr_svc = 2000016c [init -> vmm] spsr_svc = 00000000 [init -> vmm] sp_abt = 00000000 [init -> vmm] lr_abt = 00000000 [init -> vmm] spsr_abt = 00000000 [init -> vmm] sp_irq = 00000000 [init -> vmm] lr_irq = 00000000 [init -> vmm] spsr_irq = 00000000 [init -> vmm] sp_fiq = 00000000 [init -> vmm] lr_fiq = 00000000 [init -> vmm] spsr_fiq = 00000000 [init -> vmm] exception = irq [init -> vmm] Could not handle data-abort will exit!
[init -> vmm] Start virtual machine [init -> vmm] Curious exception occurred [init -> vmm] Cpu state: [init -> vmm] r0 = 20000174 [init -> vmm] r1 = 000008e0 [init -> vmm] r2 = 20000100 [init -> vmm] r3 = 00000000 [init -> vmm] r4 = 00000000 [init -> vmm] r5 = 00000000 [init -> vmm] r6 = 00000000 [init -> vmm] r7 = 00000000 [init -> vmm] r8 = 00000000 [init -> vmm] r9 = 00000000 [init -> vmm] r10 = 00000000 [init -> vmm] r11 = 00000000 [init -> vmm] r12 = 00000000 [init -> vmm] sp = 00000000 [init -> vmm] lr = 00000000 [init -> vmm] ip = 20000000 [init -> vmm] cpsr = 00000093 [init -> vmm] sp_und = 00000000 [init -> vmm] lr_und = 00000000 [init -> vmm] spsr_und = 00000000 [init -> vmm] sp_svc = 00000000 [init -> vmm] lr_svc = 00000000 [init -> vmm] spsr_svc = 00000000 [init -> vmm] sp_abt = 00000000 [init -> vmm] lr_abt = 00000000 [init -> vmm] spsr_abt = 00000000 [init -> vmm] sp_irq = 00000000 [init -> vmm] lr_irq = 00000000 [init -> vmm] spsr_irq = 00000000 [init -> vmm] sp_fiq = 00000000 [init -> vmm] lr_fiq = 00000000 [init -> vmm] spsr_fiq = 00000000 [init -> vmm] exception = reset virtual void Genode::Signal_session_component::free_context(Genode::Signal_context_capability): Not implemented
[init -> vmm] Start virtual machine [init -> vmm] Vm tried to access 2000000c which isn't allowed [init -> vmm] Cpu state: [init -> vmm] r0 = 20000174 [init -> vmm] r1 = 000008e0 [init -> vmm] r2 = 20000100 [init -> vmm] r3 = 00000000 [init -> vmm] r4 = 00000000 [init -> vmm] r5 = 00000000 [init -> vmm] r6 = 00000000 [init -> vmm] r7 = 00000000 [init -> vmm] r8 = 00000000 [init -> vmm] r9 = 00000000 [init -> vmm] r10 = 00000000 [init -> vmm] r11 = 00000000 [init -> vmm] r12 = 00000000 [init -> vmm] sp = 00000000 [init -> vmm] lr = 00000000 [init -> vmm] ip = 20000000 [init -> vmm] cpsr = 00000093 [init -> vmm] sp_und = 00000000 [init -> vmm] lr_und = 00000000 [init -> vmm] spsr_und = 00000000 [init -> vmm] sp_svc = 20001188 [init -> vmm] lr_svc = 2000016c [init -> vmm] spsr_svc = 00000000 [init -> vmm] sp_abt = 00000000 [init -> vmm] lr_abt = 00000000 [init -> vmm] spsr_abt = 00000000 [init -> vmm] sp_irq = 00000000 [init -> vmm] lr_irq = 00000000 [init -> vmm] spsr_irq = 00000000 [init -> vmm] sp_fiq = 00000000 [init -> vmm] lr_fiq = 00000000 [init -> vmm] spsr_fiq = 00000000 [init -> vmm] exception = irq [init -> vmm] Could not handle data-abort will exit!
On Thu, Jan 8, 2015 at 11:47 AM, Stefan Kalkowski < stefan.kalkowski@...1...> wrote:
Hi,
On 01/07/2015 03:54 PM, Mahdi Aichouch wrote:
Hello,
First, thank you very much Chirag and Stefan for your answers.
I tried to debug my simple kernel on the i.MX6 through the DS5 JTAG debugger. Prior to running the kernel using the debugger, the imx6 board is configured to run u-boot from an SD card and after the initialization u-boot holds and waits to execute the kernel code.
As we can see in the debug messages below, I was able to do a step by step walk through the source code from the assembler to the C code. It seems that it is working...
Also I tested this kernel on the Qemu Realview Baseboard Platform explorer for cortex-a9 and it worked.
I also created a repository in which I added the sources of the simple kernel. https://github.com/macdi/simple-arm-kernel
/>a complete run-script that shows above results./ / / In my test case I used the command $>make run/vmm to run the bare-hw and vmm. I attached the generated file boot_modules.s. Is this the run script you request or another one? Could you please tell where to look for it?
Ok, I see, thanks for providing the source of your simple kernel.
With a complete run-script I meant a script that builds everything needed to execute your failing scenario. You already used such a script under the hood when doing "make run/vmm". Whenever you trigger "make run/XXX" the build system of Genode searches for a XXX.run script in the "repos/*/run/" directories of the enabled repositories. A run-script is a small TCL script that is used by Genode's "run" tool. It defines what needs to be build, it defines the configuration of the system, and everything else that needs to be done to prepare e.g. a system image that can be loaded via u-boot. It very much simplifies communication between us developers, because if I've a problem I want another developer to look at, I use a run-script that exactly reproduces the issue and the other developer just needs to execute the script to look at. For more information about the run tool, please have a look at:
http://genode.org/documentation/developer-resources/build_system#Automated_i...
Given your above explanations I assume you are using some vmm.run script you are not aware of. But the current Genode repository doesn't has a vmm.run script, only a tz_vmm.run script. So I assume you need some older Genode sources as base.
The even more interesting part for me is not only the run script, but all modifications you did to the VMM as well as the base platform to enable your scenario on i.MX6. Therefore I've asked for the branch you are using to compile your scenario. As a precaution, I reminded you to include the run-script you are using into that branch.
/>When looking at your disassemly I'm wondering why your kernel is linked
to 0x70000000 whereby it is loaded to 0x20000100?
/ / / Could you please tell me how did you figure out that it is linked to the address 0x70000000?
I just looked at the disassembly output you attached to your first mail. There the addresses are starting at 0x70000000 in contrast to the sources you provided in your last mail.
/ / />And is it really loaded to 0x20000100 where the IP points to?// / / / Is it possible to tell me how to verify that it is loaded to the address 0x20000100?
You have to look and respectively instrument the code of the virtual machine monitor (VMM), which normally is defined at "os/src/server/tz_vmm" (probably "os/src/server/vmm" in your older branch). All parameters like: the position of the normal world's RAM used by the guest OS is hardcoded within the VMM. So you need to adapt the VMM according to the needs of your scenario.
I hope that helps a bit.
Regards Stefan
Thanks very much in advance.
Best regards,
Mahdi
Loaded section .text: S:0x20000100 ~ S:0x2000026F (size 0x170) Loaded section .rodata: S:0x20000270 ~ S:0x2000028F (size 0x20) Entry point S:0x20000100 cd "/home/aichouch/DS-5-Workspace-examples" Working directory "/home/aichouch/DS-5-Workspace-examples" directory "/home/aichouch/dev/bare_metal_arm" Source directories searched: /home/aichouch/dev/bare_metal_arm:$cdir:$cwd:$idir set debug-from main start Starting target with image /home/aichouch/dev/bare_metal/simple-arm-kernel/kernel.elf Running from entry point WARNING(CMD399-COR168): ! Failed to start the target ! No function named "main" could be found WARNING(CMD407): Trying the entry point instead wait Execution stopped at: S:0x20000100 In kernel.elf (no debug info) S:0x20000100 LDR sp,[pc,#4] ; [0x2000010C] = 0x20001290 wait next Execution stopped at: S:0x20000104 S:0x20000104 BL _init ; 0x20000258 wait step Execution stopped at: S:0x20000258 In kernel.c S:0x20000258 16,0 { wait next Execution stopped at: S:0x20000260 S:0x20000260 17,0 print_uart0("bare metal: Hello world!\n"); wait next Execution stopped at: S:0x2000026C S:0x2000026C 19,0 while(1); wait next Execution stopped at: S:0x2000026C S:0x2000026C 19,0 while(1); wait next Execution stopped at: S:0x2000026C S:0x2000026C 19,0 while(1); wait continue interrupt Execution stopped at: S:0x2000026C S:0x2000026C 19,0 while(1); wait continue interrupt Execution stopped at: S:0x2000026C S:0x2000026C 19,0 while(1);
On Wed, Jan 7, 2015 at 10:35 AM, Stefan Kalkowski <stefan.kalkowski@...1... mailto:stefan.kalkowski@...1...> wrote:
Hi, On 01/06/2015 02:24 PM, Mahdi Aichouch wrote: > Hello, > > I am trying to port the bare-hw trustzone to the Freescale i.MX 6 > quad-core Sabre SD board. > > I started from the source code given in this > repository: https://github.com/decaprox/genode > > I adapted the TSC-380 driver from the versatile express version as
a
> TZASC to the i.MX-6 board. > > At this moment, I just configure the existing TSC-380 with the
right
> base address, but I did not yet configured it to secure any memory
region.
> > Also, I did not yet used the CSU that was implemented for the
i.MX53 to
> secure any device. > > I partitioned the the memory space into two parts: > > 0x1000 0000 - 0x2000 0000 : as a secure memory space > 0x2000 0000 - 0x4000 0000 : as a non secure memory space > > I implemented a small kernel in order to test the implementation. I like your approach to start with a minimal kernel so that you
really
know what shall be going on. However, did you tested your small
kernel
without Genode by directly loading it via u-boot? > > My simple kernel is just an assembly code that call C function,
that
> prints a message on > the serial port. > > I get an error after running the run/vmm test case. > Here are the debug messages that I get > > void Kernel::trustzone_initialization(Kernel::Pic*): --- IMX6 trustzone > INIT --- > Core memory allocator > --------------------- > Allocator 102d46c0 dump: > Block: [10000000,1000001c) size=0000001c avail=00000000 max_avail=00000000 > Block: [1000001c,10000038) size=0000001c avail=00000000 max_avail=00000000 > Block: [10000038,10000054) size=0000001c avail=00000000 max_avail=1fd28000 > Block: [10000054,10000070) size=0000001c avail=00000000 max_avail=00000000 > Block: [10000070,1000008c) size=0000001c avail=00000000 max_avail=00000000 > Block: [1000008c,10001000) size=00000f74 avail=00000f74 max_avail=1fd28000 > Block: [102d8000,30000000) size=1fd28000 avail=1fd28000 max_avail=1fd28000 > => mem_size=533893120 (509 MB) / mem_avail=533892980 (509 MB) > > IO memory allocator > ------------------- > Allocator 102d4b1c dump: > Block: [00000000,02020000) size=02020000 avail=02020000 max_avail=02020000 > Block: [02024000,020d0000) size=000ac000 avail=000ac000 max_avail=0df2c000 > Block: [020d4000,10000000) size=0df2c000 avail=0df2c000 max_avail=0df2c000 > Block: [100ec000,100f0000) size=00004000 avail=00004000 max_avail=20000000 > Block: [20000000,40000000) size=20000000 avail=20000000 max_avail=20000000 > => mem_size=805289984 (767 MB) / mem_avail=805289984 (767 MB) > > IRQ allocator > ------------------- > Allocator 102d53d4 dump: > Block: [00000000,0000003a) size=0000003a avail=0000003a max_avail=0000003a > Block: [0000003b,00000058) size=0000001d avail=0000001d max_avail=000003a7 > Block: [00000059,00000400) size=000003a7 avail=000003a7 max_avail=000003a7 > => mem_size=1022 (0 MB) / mem_avail=1022 (0 MB) > > ROM filesystem > -------------- > Rom_fs 102d5814 dump: > Rom: [100a5000,100a5358) linux > Rom: [1004f000,1007fedc) init > Rom: [100a7000,100a71ef) config > Rom: [100a6000,100a601f) initrd.gz > Rom: [10080000,100a409c) vmm > > int main(): --- create local services --- > int main(): --- start init --- > int main(): transferred 508 MB to init > int main(): --- init created, waiting for exit condition --- > [init] Could not open file "ld.lib.so <http://ld.lib.so> <http://ld.lib.so>" > [init] parent provides > [init] service "ROM" > [init] service "RAM" > [init] service "IRQ" > [init] service "IO_MEM" > [init] service "CAP" > [init] service "PD" > [init] service "RM" > [init] service "CPU" > [init] service "LOG" > [init] service "SIGNAL" > [init] service "VM" > [init] child "vmm" > [init] RAM quota: 3932160 > [init] ELF binary: vmm > [init] priority: 0 > [init -> vmm] Start virtual machine > [init -> vmm] Curious exception occurred > [init -> vmm] Cpu state: > [init -> vmm] r0 = 00000000 > [init -> vmm] r1 = 000008e0 > [init -> vmm] r2 = 20000100 > [init -> vmm] r3 = 00000000 > [init -> vmm] r4 = 00000000 > [init -> vmm] r5 = 00000000 > [init -> vmm] r6 = 00000000 > [init -> vmm] r7 = 00000000 > [init -> vmm] r8 = 00000000 > [init -> vmm] r9 = 00000000 > [init -> vmm] r10 = 00000000 > [init -> vmm] r11 = 00000000 > [init -> vmm] r12 = 00000000 > [init -> vmm] sp = 00000000 > [init -> vmm] lr = 00000000 > [init -> vmm] ip = 20000100 > [init -> vmm] cpsr = 00000093 > [init -> vmm] sp_und = 00000000 > [init -> vmm] lr_und = 00000000 > [init -> vmm] spsr_und = 00000000 > [init -> vmm] sp_svc = 00000000 > [init -> vmm] lr_svc = 00000000 > [init -> vmm] spsr_svc = 00000000 > [init -> vmm] sp_abt = 00000000 > [init -> vmm] lr_abt = 00000000 > [init -> vmm] spsr_abt = 00000000 > [init -> vmm] sp_irq = 00000000 > [init -> vmm] lr_irq = 00000000 > [init -> vmm] spsr_irq = 00000000 > [init -> vmm] sp_fiq = 00000000 > [init -> vmm] lr_fiq = 00000000 > [init -> vmm] spsr_fiq = 00000000 > [init -> vmm] exception = reset > virtual void >
Genode::Signal_session_component::free_context(Genode::Signal_context_capability):
> Not implemented > > Note: > The file linux and initrd.gz showed here are not real. I named my simple > kernel as linux, and the initrd.gz file is an empty file. > > The VMM version I am using loads an elf binary kernel. > > I attached the assembly file of my simple kernel. From the dump of
the
> CPU state, we can see that the IP register shows the first
instruction
> of the kernel, which apparently generates an exception. > > Could someone tell me how to track down the source of the error and help > me to debug it. When looking at your disassemly I'm wondering why your kernel is
linked
to 0x70000000 whereby it is loaded to 0x20000100? And is it really loaded to 0x20000100 where the IP points to? To be able to reproduce your results and possibly help you, it would be fine if you provide a branch, which contains your simple kernel and a complete run-script
that
shows above results. BTW. I don't think the CSU is a problem at this stage. It comes into play when firstly touching a peripheral (e.g.: the UART). Whereby I don't know how it behaves in reset state on i.MX6, whether it grants
or
denies access for the non-secure world by default. Regards Stefan > > Thanks very much in advance. > > Kind regards, > Mahdi > > > >
> Dive into the World of Parallel Programming! The Go Parallel
Website,
> sponsored by Intel and developed in partnership with Slashdot
Media, is your
> hub for all things parallel software development, from weekly
thought
> leadership blogs to news, videos, case studies, tutorials and
more. Take a
> look and join the conversation now.
http://goparallel.sourceforge.net
> > > > _______________________________________________ > genode-main mailing list > genode-main@lists.sourceforge.net <mailto:genode-main@lists.sourceforge.net> > https://lists.sourceforge.net/lists/listinfo/genode-main > -- Stefan Kalkowski Genode Labs http://www.genode-labs.com/ · http://genode.org/
Dive into the World of Parallel Programming! The Go Parallel Website, sponsored by Intel and developed in partnership with Slashdot Media, is your hub for all things parallel software development, from weekly thought leadership blogs to news, videos, case studies, tutorials and more. Take a look and join the conversation now.
http://goparallel.sourceforge.net
_______________________________________________ genode-main mailing list genode-main@lists.sourceforge.net <mailto:genode-main@lists.sourceforge.net> https://lists.sourceforge.net/lists/listinfo/genode-main
Dive into the World of Parallel Programming! The Go Parallel Website, sponsored by Intel and developed in partnership with Slashdot Media, is
your
hub for all things parallel software development, from weekly thought leadership blogs to news, videos, case studies, tutorials and more. Take
a
look and join the conversation now. http://goparallel.sourceforge.net
genode-main mailing list genode-main@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/genode-main
-- Stefan Kalkowski Genode Labs
http://www.genode-labs.com/ · http://genode.org/
Dive into the World of Parallel Programming! The Go Parallel Website, sponsored by Intel and developed in partnership with Slashdot Media, is your hub for all things parallel software development, from weekly thought leadership blogs to news, videos, case studies, tutorials and more. Take a look and join the conversation now. http://goparallel.sourceforge.net _______________________________________________ genode-main mailing list genode-main@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/genode-main
Hello Mahdi,
On 01/08/2015 04:36 PM, Mahdi Aichouch wrote:
Hello Stefan,
Thank you very much for your answer.
I created a branch that contains an adaptation of bare-hw with trustzone to i.MX6, and also an adaptation of the VMM.
https://github.com/macdi/genode-barehw-imx6-tz Could you please give it a look and tell what 's not correctly configured in my scenario.
Thanks for providing the branch. Sadly, you didn't preserved the commit history. Thereby it is hard for me to distinguish your changes from the initial state provided by the Genode main repository. As I don't know exactly the original revision you started with, it is almost impossible to retrieve your changes.
Outgoing from your first mail I assume you started with this branch?:
https://github.com/decaprox/genode/tree/i.mx6
As I realized right now when looking at that branch: it is really outdated (almost 2 years old). Most work regarding TrustZone was done within this missing range of time including significant bugfixes.
I tried multiple runs of the test case and the symptoms are not stable, as we can see in the logs below. I also attached the assembly of the simple kernel.
Do you think that is related to this issue https://github.com/genodelabs/genode/issues/567 as Chirag has previously suggested.
Maybe it is a caching issue. However, we've solved these caching related issues already month ago. I strongly recommend to start your work by adding the i.MX6 platform support to the up-to-date Genode master branch. The work from decaprox might be a good starting point therefore.
Alternatively, maybe Chirag Garg and the IIT Madras Rise Lab like to share their work on i.MX6 platform with you, or respectively the public in general? AFAIK they already ported that work to the recent Genode release.
Best regards Stefan
Thank you in advance,
best regards Mahdi
[init -> vmm] Start virtual machine [init -> vmm] Vm tried to access 2000000c which isn't allowed [init -> vmm] Cpu state: [init -> vmm] r0 = 20000174 [init -> vmm] r1 = 000008e0 [init -> vmm] r2 = 20000100 [init -> vmm] r3 = 00000000 [init -> vmm] r4 = 00000000 [init -> vmm] r5 = 00000000 [init -> vmm] r6 = 00000000 [init -> vmm] r7 = 00000000 [init -> vmm] r8 = 00000000 [init -> vmm] r9 = 00000000 [init -> vmm] r10 = 00000000 [init -> vmm] r11 = 2000118c [init -> vmm] r12 = 00000000 [init -> vmm] sp = 00000000 [init -> vmm] lr = 00000000 [init -> vmm] ip = 20000118 [init -> vmm] cpsr = 00000093 [init -> vmm] sp_und = 00000000 [init -> vmm] lr_und = 00000000 [init -> vmm] spsr_und = 00000000 [init -> vmm] sp_svc = 20001188 [init -> vmm] lr_svc = 2000016c [init -> vmm] spsr_svc = 00000000 [init -> vmm] sp_abt = 00000000 [init -> vmm] lr_abt = 00000000 [init -> vmm] spsr_abt = 00000000 [init -> vmm] sp_irq = 00000000 [init -> vmm] lr_irq = 00000000 [init -> vmm] spsr_irq = 00000000 [init -> vmm] sp_fiq = 00000000 [init -> vmm] lr_fiq = 00000000 [init -> vmm] spsr_fiq = 00000000 [init -> vmm] exception = irq [init -> vmm] Could not handle data-abort will exit!
[init -> vmm] Start virtual machine [init -> vmm] Curious exception occurred [init -> vmm] Cpu state: [init -> vmm] r0 = 20000174 [init -> vmm] r1 = 000008e0 [init -> vmm] r2 = 20000100 [init -> vmm] r3 = 00000000 [init -> vmm] r4 = 00000000 [init -> vmm] r5 = 00000000 [init -> vmm] r6 = 00000000 [init -> vmm] r7 = 00000000 [init -> vmm] r8 = 00000000 [init -> vmm] r9 = 00000000 [init -> vmm] r10 = 00000000 [init -> vmm] r11 = 00000000 [init -> vmm] r12 = 00000000 [init -> vmm] sp = 00000000 [init -> vmm] lr = 00000000 [init -> vmm] ip = 20000000 [init -> vmm] cpsr = 00000093 [init -> vmm] sp_und = 00000000 [init -> vmm] lr_und = 00000000 [init -> vmm] spsr_und = 00000000 [init -> vmm] sp_svc = 00000000 [init -> vmm] lr_svc = 00000000 [init -> vmm] spsr_svc = 00000000 [init -> vmm] sp_abt = 00000000 [init -> vmm] lr_abt = 00000000 [init -> vmm] spsr_abt = 00000000 [init -> vmm] sp_irq = 00000000 [init -> vmm] lr_irq = 00000000 [init -> vmm] spsr_irq = 00000000 [init -> vmm] sp_fiq = 00000000 [init -> vmm] lr_fiq = 00000000 [init -> vmm] spsr_fiq = 00000000 [init -> vmm] exception = reset virtual void Genode::Signal_session_component::free_context(Genode::Signal_context_capability): Not implemented
[init -> vmm] Start virtual machine [init -> vmm] Vm tried to access 2000000c which isn't allowed [init -> vmm] Cpu state: [init -> vmm] r0 = 20000174 [init -> vmm] r1 = 000008e0 [init -> vmm] r2 = 20000100 [init -> vmm] r3 = 00000000 [init -> vmm] r4 = 00000000 [init -> vmm] r5 = 00000000 [init -> vmm] r6 = 00000000 [init -> vmm] r7 = 00000000 [init -> vmm] r8 = 00000000 [init -> vmm] r9 = 00000000 [init -> vmm] r10 = 00000000 [init -> vmm] r11 = 00000000 [init -> vmm] r12 = 00000000 [init -> vmm] sp = 00000000 [init -> vmm] lr = 00000000 [init -> vmm] ip = 20000000 [init -> vmm] cpsr = 00000093 [init -> vmm] sp_und = 00000000 [init -> vmm] lr_und = 00000000 [init -> vmm] spsr_und = 00000000 [init -> vmm] sp_svc = 20001188 [init -> vmm] lr_svc = 2000016c [init -> vmm] spsr_svc = 00000000 [init -> vmm] sp_abt = 00000000 [init -> vmm] lr_abt = 00000000 [init -> vmm] spsr_abt = 00000000 [init -> vmm] sp_irq = 00000000 [init -> vmm] lr_irq = 00000000 [init -> vmm] spsr_irq = 00000000 [init -> vmm] sp_fiq = 00000000 [init -> vmm] lr_fiq = 00000000 [init -> vmm] spsr_fiq = 00000000 [init -> vmm] exception = irq [init -> vmm] Could not handle data-abort will exit!
On Thu, Jan 8, 2015 at 11:47 AM, Stefan Kalkowski <stefan.kalkowski@...1... mailto:stefan.kalkowski@...1...> wrote:
Hi, On 01/07/2015 03:54 PM, Mahdi Aichouch wrote: > Hello, > > First, thank you very much Chirag and Stefan for your answers. > > I tried to debug my simple kernel on the i.MX6 through the DS5 JTAG > debugger. > Prior to running the kernel using the debugger, the imx6 board is > configured to run u-boot from an SD > card and after the initialization u-boot holds and waits to execute the > kernel code. > > As we can see in the debug messages below, I was able to do a step by > step walk through > the source code from the assembler to the C code. > It seems that it is working... > > Also I tested this kernel on the Qemu Realview Baseboard Platform > explorer for cortex-a9 and it worked. > > I also created a repository in which I added the sources of the simple > kernel. > https://github.com/macdi/simple-arm-kernel > > />a complete run-script that shows above results./ > / > / > In my test case I used the command $>make run/vmm to run the bare-hw and > vmm. > I attached the generated file boot_modules.s. Is this the run script you > request or another one? > Could you please tell where to look for it? > Ok, I see, thanks for providing the source of your simple kernel. With a complete run-script I meant a script that builds everything needed to execute your failing scenario. You already used such a script under the hood when doing "make run/vmm". Whenever you trigger "make run/XXX" the build system of Genode searches for a XXX.run script in the "repos/*/run/" directories of the enabled repositories. A run-script is a small TCL script that is used by Genode's "run" tool. It defines what needs to be build, it defines the configuration of the system, and everything else that needs to be done to prepare e.g. a system image that can be loaded via u-boot. It very much simplifies communication between us developers, because if I've a problem I want another developer to look at, I use a run-script that exactly reproduces the issue and the other developer just needs to execute the script to look at. For more information about the run tool, please have a look at: http://genode.org/documentation/developer-resources/build_system#Automated_integration_and_testing Given your above explanations I assume you are using some vmm.run script you are not aware of. But the current Genode repository doesn't has a vmm.run script, only a tz_vmm.run script. So I assume you need some older Genode sources as base. The even more interesting part for me is not only the run script, but all modifications you did to the VMM as well as the base platform to enable your scenario on i.MX6. Therefore I've asked for the branch you are using to compile your scenario. As a precaution, I reminded you to include the run-script you are using into that branch. > />When looking at your disassemly I'm wondering why your kernel is linked >>to 0x70000000 whereby it is loaded to 0x20000100? > / > / > / > Could you please tell me how did you figure out that it is linked to the > address 0x70000000? I just looked at the disassembly output you attached to your first mail. There the addresses are starting at 0x70000000 in contrast to the sources you provided in your last mail. > / > / > />And is it really loaded to 0x20000100 where the IP points to?// > / > / > / > Is it possible to tell me how to verify that it is loaded to the > address 0x20000100? You have to look and respectively instrument the code of the virtual machine monitor (VMM), which normally is defined at "os/src/server/tz_vmm" (probably "os/src/server/vmm" in your older branch). All parameters like: the position of the normal world's RAM used by the guest OS is hardcoded within the VMM. So you need to adapt the VMM according to the needs of your scenario. I hope that helps a bit. Regards Stefan > > Thanks very much in advance. > > Best regards, > > Mahdi > > Loaded section .text: S:0x20000100 ~ S:0x2000026F (size 0x170) > Loaded section .rodata: S:0x20000270 ~ S:0x2000028F (size 0x20) > Entry point S:0x20000100 > cd "/home/aichouch/DS-5-Workspace-examples" > Working directory "/home/aichouch/DS-5-Workspace-examples" > directory "/home/aichouch/dev/bare_metal_arm" > Source directories searched: > /home/aichouch/dev/bare_metal_arm:$cdir:$cwd:$idir > set debug-from main > start > Starting target with image > /home/aichouch/dev/bare_metal/simple-arm-kernel/kernel.elf > Running from entry point > WARNING(CMD399-COR168): > ! Failed to start the target > ! No function named "main" could be found > WARNING(CMD407): Trying the entry point instead > wait > Execution stopped at: S:0x20000100 > In kernel.elf (no debug info) > S:0x20000100 LDR sp,[pc,#4] ; [0x2000010C] = 0x20001290 > wait > next > Execution stopped at: S:0x20000104 > S:0x20000104 BL _init ; 0x20000258 > wait > step > Execution stopped at: S:0x20000258 > In kernel.c > S:0x20000258 16,0 { > wait > next > Execution stopped at: S:0x20000260 > S:0x20000260 17,0 print_uart0("bare metal: Hello world!\n"); > wait > next > Execution stopped at: S:0x2000026C > S:0x2000026C 19,0 while(1); > wait > next > Execution stopped at: S:0x2000026C > S:0x2000026C 19,0 while(1); > wait > next > Execution stopped at: S:0x2000026C > S:0x2000026C 19,0 while(1); > wait > continue > interrupt > Execution stopped at: S:0x2000026C > S:0x2000026C 19,0 while(1); > wait > continue > interrupt > Execution stopped at: S:0x2000026C > S:0x2000026C 19,0 while(1); > > > On Wed, Jan 7, 2015 at 10:35 AM, Stefan Kalkowski > <stefan.kalkowski@...1... <mailto:stefan.kalkowski@...1...> > <mailto:stefan.kalkowski@...1... <mailto:stefan.kalkowski@...1...>>> wrote: > > Hi, > > On 01/06/2015 02:24 PM, Mahdi Aichouch wrote: > > Hello, > > > > I am trying to port the bare-hw trustzone to the Freescale i.MX 6 > > quad-core Sabre SD board. > > > > I started from the source code given in this > > repository: https://github.com/decaprox/genode > > > > I adapted the TSC-380 driver from the versatile express version as a > > TZASC to the i.MX-6 board. > > > > At this moment, I just configure the existing TSC-380 with the right > > base address, but I did not yet configured it to secure any memory region. > > > > Also, I did not yet used the CSU that was implemented for the i.MX53 to > > secure any device. > > > > I partitioned the the memory space into two parts: > > > > 0x1000 0000 - 0x2000 0000 : as a secure memory space > > 0x2000 0000 - 0x4000 0000 : as a non secure memory space > > > > I implemented a small kernel in order to test the implementation. > > I like your approach to start with a minimal kernel so that you really > know what shall be going on. However, did you tested your small kernel > without Genode by directly loading it via u-boot? > > > > > My simple kernel is just an assembly code that call C function, that > > prints a message on > > the serial port. > > > > I get an error after running the run/vmm test case. > > Here are the debug messages that I get > > > > void Kernel::trustzone_initialization(Kernel::Pic*): --- IMX6 > trustzone > > INIT --- > > Core memory allocator > > --------------------- > > Allocator 102d46c0 dump: > > Block: [10000000,1000001c) size=0000001c avail=00000000 > max_avail=00000000 > > Block: [1000001c,10000038) size=0000001c avail=00000000 > max_avail=00000000 > > Block: [10000038,10000054) size=0000001c avail=00000000 > max_avail=1fd28000 > > Block: [10000054,10000070) size=0000001c avail=00000000 > max_avail=00000000 > > Block: [10000070,1000008c) size=0000001c avail=00000000 > max_avail=00000000 > > Block: [1000008c,10001000) size=00000f74 avail=00000f74 > max_avail=1fd28000 > > Block: [102d8000,30000000) size=1fd28000 avail=1fd28000 > max_avail=1fd28000 > > => mem_size=533893120 (509 MB) / mem_avail=533892980 (509 MB) > > > > IO memory allocator > > ------------------- > > Allocator 102d4b1c dump: > > Block: [00000000,02020000) size=02020000 avail=02020000 > max_avail=02020000 > > Block: [02024000,020d0000) size=000ac000 avail=000ac000 > max_avail=0df2c000 > > Block: [020d4000,10000000) size=0df2c000 avail=0df2c000 > max_avail=0df2c000 > > Block: [100ec000,100f0000) size=00004000 avail=00004000 > max_avail=20000000 > > Block: [20000000,40000000) size=20000000 avail=20000000 > max_avail=20000000 > > => mem_size=805289984 (767 MB) / mem_avail=805289984 (767 MB) > > > > IRQ allocator > > ------------------- > > Allocator 102d53d4 dump: > > Block: [00000000,0000003a) size=0000003a avail=0000003a > max_avail=0000003a > > Block: [0000003b,00000058) size=0000001d avail=0000001d > max_avail=000003a7 > > Block: [00000059,00000400) size=000003a7 avail=000003a7 > max_avail=000003a7 > > => mem_size=1022 (0 MB) / mem_avail=1022 (0 MB) > > > > ROM filesystem > > -------------- > > Rom_fs 102d5814 dump: > > Rom: [100a5000,100a5358) linux > > Rom: [1004f000,1007fedc) init > > Rom: [100a7000,100a71ef) config > > Rom: [100a6000,100a601f) initrd.gz > > Rom: [10080000,100a409c) vmm > > > > int main(): --- create local services --- > > int main(): --- start init --- > > int main(): transferred 508 MB to init > > int main(): --- init created, waiting for exit condition --- > > [init] Could not open file "ld.lib.so <http://ld.lib.so> <http://ld.lib.so> > <http://ld.lib.so>" > > [init] parent provides > > [init] service "ROM" > > [init] service "RAM" > > [init] service "IRQ" > > [init] service "IO_MEM" > > [init] service "CAP" > > [init] service "PD" > > [init] service "RM" > > [init] service "CPU" > > [init] service "LOG" > > [init] service "SIGNAL" > > [init] service "VM" > > [init] child "vmm" > > [init] RAM quota: 3932160 > > [init] ELF binary: vmm > > [init] priority: 0 > > [init -> vmm] Start virtual machine > > [init -> vmm] Curious exception occurred > > [init -> vmm] Cpu state: > > [init -> vmm] r0 = 00000000 > > [init -> vmm] r1 = 000008e0 > > [init -> vmm] r2 = 20000100 > > [init -> vmm] r3 = 00000000 > > [init -> vmm] r4 = 00000000 > > [init -> vmm] r5 = 00000000 > > [init -> vmm] r6 = 00000000 > > [init -> vmm] r7 = 00000000 > > [init -> vmm] r8 = 00000000 > > [init -> vmm] r9 = 00000000 > > [init -> vmm] r10 = 00000000 > > [init -> vmm] r11 = 00000000 > > [init -> vmm] r12 = 00000000 > > [init -> vmm] sp = 00000000 > > [init -> vmm] lr = 00000000 > > [init -> vmm] ip = 20000100 > > [init -> vmm] cpsr = 00000093 > > [init -> vmm] sp_und = 00000000 > > [init -> vmm] lr_und = 00000000 > > [init -> vmm] spsr_und = 00000000 > > [init -> vmm] sp_svc = 00000000 > > [init -> vmm] lr_svc = 00000000 > > [init -> vmm] spsr_svc = 00000000 > > [init -> vmm] sp_abt = 00000000 > > [init -> vmm] lr_abt = 00000000 > > [init -> vmm] spsr_abt = 00000000 > > [init -> vmm] sp_irq = 00000000 > > [init -> vmm] lr_irq = 00000000 > > [init -> vmm] spsr_irq = 00000000 > > [init -> vmm] sp_fiq = 00000000 > > [init -> vmm] lr_fiq = 00000000 > > [init -> vmm] spsr_fiq = 00000000 > > [init -> vmm] exception = reset > > virtual void > > > Genode::Signal_session_component::free_context(Genode::Signal_context_capability): > > Not implemented > > > > Note: > > The file linux and initrd.gz showed here are not real. I named my > simple > > kernel as linux, and the initrd.gz file is an empty file. > > > > The VMM version I am using loads an elf binary kernel. > > > > I attached the assembly file of my simple kernel. From the dump of the > > CPU state, we can see that the IP register shows the first instruction > > of the kernel, which apparently generates an exception. > > > > Could someone tell me how to track down the source of the error > and help > > me to debug it. > > When looking at your disassemly I'm wondering why your kernel is linked > to 0x70000000 whereby it is loaded to 0x20000100? And is it really > loaded to 0x20000100 where the IP points to? To be able to reproduce > your results and possibly help you, it would be fine if you provide a > branch, which contains your simple kernel and a complete run-script that > shows above results. > > BTW. I don't think the CSU is a problem at this stage. It comes into > play when firstly touching a peripheral (e.g.: the UART). Whereby I > don't know how it behaves in reset state on i.MX6, whether it grants or > denies access for the non-secure world by default. > > Regards > Stefan > > > > > Thanks very much in advance. > > > > Kind regards, > > Mahdi > > > > > > > > ------------------------------------------------------------------------------ > > Dive into the World of Parallel Programming! The Go Parallel Website, > > sponsored by Intel and developed in partnership with Slashdot Media, is your > > hub for all things parallel software development, from weekly thought > > leadership blogs to news, videos, case studies, tutorials and more. Take a > > look and join the conversation now. http://goparallel.sourceforge.net > > > > > > > > _______________________________________________ > > genode-main mailing list > > genode-main@lists.sourceforge.net <mailto:genode-main@lists.sourceforge.net> > <mailto:genode-main@lists.sourceforge.net <mailto:genode-main@lists.sourceforge.net>> > > https://lists.sourceforge.net/lists/listinfo/genode-main > > > > -- > Stefan Kalkowski > Genode Labs > > http://www.genode-labs.com/ · http://genode.org/ > > ------------------------------------------------------------------------------ > Dive into the World of Parallel Programming! The Go Parallel Website, > sponsored by Intel and developed in partnership with Slashdot Media, > is your > hub for all things parallel software development, from weekly thought > leadership blogs to news, videos, case studies, tutorials and more. > Take a > look and join the conversation now. http://goparallel.sourceforge.net > _______________________________________________ > genode-main mailing list > genode-main@lists.sourceforge.net <mailto:genode-main@lists.sourceforge.net> > <mailto:genode-main@lists.sourceforge.net <mailto:genode-main@lists.sourceforge.net>> > https://lists.sourceforge.net/lists/listinfo/genode-main > > > > > ------------------------------------------------------------------------------ > Dive into the World of Parallel Programming! The Go Parallel Website, > sponsored by Intel and developed in partnership with Slashdot Media, is your > hub for all things parallel software development, from weekly thought > leadership blogs to news, videos, case studies, tutorials and more. Take a > look and join the conversation now. http://goparallel.sourceforge.net > > > > _______________________________________________ > genode-main mailing list > genode-main@lists.sourceforge.net <mailto:genode-main@lists.sourceforge.net> > https://lists.sourceforge.net/lists/listinfo/genode-main > -- Stefan Kalkowski Genode Labs http://www.genode-labs.com/ · http://genode.org/ ------------------------------------------------------------------------------ Dive into the World of Parallel Programming! The Go Parallel Website, sponsored by Intel and developed in partnership with Slashdot Media, is your hub for all things parallel software development, from weekly thought leadership blogs to news, videos, case studies, tutorials and more. Take a look and join the conversation now. http://goparallel.sourceforge.net _______________________________________________ genode-main mailing list genode-main@lists.sourceforge.net <mailto:genode-main@lists.sourceforge.net> https://lists.sourceforge.net/lists/listinfo/genode-main
Dive into the World of Parallel Programming! The Go Parallel Website, sponsored by Intel and developed in partnership with Slashdot Media, is your hub for all things parallel software development, from weekly thought leadership blogs to news, videos, case studies, tutorials and more. Take a look and join the conversation now. http://goparallel.sourceforge.net
genode-main mailing list genode-main@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/genode-main
Hello,
On Thu, Jan 08, 2015 at 07:17:32PM +0100, Stefan Kalkowski wrote:
Alternatively, maybe Chirag Garg and the IIT Madras Rise Lab like to share their work on i.MX6 platform with you, or respectively the public in general? AFAIK they already ported that work to the recent Genode release.
IIRC IIT Madras shares its work at Bitbucket
https://bitbucket.org/casl/secureos
Unfortunately, they don't preserve Genode commit history from what I understand after a quick look.
Regards
I thought we were ! If it is not happening, I will make sure we do so from today.
On Fri, Jan 9, 2015 at 1:00 AM, Christian Helmuth < christian.helmuth@...1...> wrote:
Hello,
On Thu, Jan 08, 2015 at 07:17:32PM +0100, Stefan Kalkowski wrote:
Alternatively, maybe Chirag Garg and the IIT Madras Rise Lab like to share their work on i.MX6 platform with you, or respectively the public in general? AFAIK they already ported that work to the recent Genode release.
IIRC IIT Madras shares its work at Bitbucket
https://bitbucket.org/casl/secureos
Unfortunately, they don't preserve Genode commit history from what I understand after a quick look.
Regards
Christian Helmuth Genode Labs
http://www.genode-labs.com/ · http://genode.org/ https://twitter.com/GenodeLabs · /ˈdʒiː.nəʊd/
Genode Labs GmbH · Amtsgericht Dresden · HRB 28424 · Sitz Dresden Geschäftsführer: Dr.-Ing. Norman Feske, Christian Helmuth
Dive into the World of Parallel Programming! The Go Parallel Website, sponsored by Intel and developed in partnership with Slashdot Media, is your hub for all things parallel software development, from weekly thought leadership blogs to news, videos, case studies, tutorials and more. Take a look and join the conversation now. http://goparallel.sourceforge.net _______________________________________________ genode-main mailing list genode-main@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/genode-main
Hello,
Thank you very much for your helpful answers.
However, I checked the repository https://bitbucket.org/casl/secureos, but I did not find a support of trustzone on the imx6 platform based on neither older or recent version of genode.
kindest regards, Mahdi
On Fri, Jan 9, 2015 at 2:02 AM, Madhu (Macaque Labs) <madhu@...275...> wrote:
I thought we were ! If it is not happening, I will make sure we do so from today.
On Fri, Jan 9, 2015 at 1:00 AM, Christian Helmuth < christian.helmuth@...1...> wrote:
Hello,
On Thu, Jan 08, 2015 at 07:17:32PM +0100, Stefan Kalkowski wrote:
Alternatively, maybe Chirag Garg and the IIT Madras Rise Lab like to share their work on i.MX6 platform with you, or respectively the public in general? AFAIK they already ported that work to the recent Genode release.
IIRC IIT Madras shares its work at Bitbucket
https://bitbucket.org/casl/secureos
Unfortunately, they don't preserve Genode commit history from what I understand after a quick look.
Regards
Christian Helmuth Genode Labs
http://www.genode-labs.com/ · http://genode.org/ https://twitter.com/GenodeLabs · /ˈdʒiː.nəʊd/
Genode Labs GmbH · Amtsgericht Dresden · HRB 28424 · Sitz Dresden Geschäftsführer: Dr.-Ing. Norman Feske, Christian Helmuth
Dive into the World of Parallel Programming! The Go Parallel Website, sponsored by Intel and developed in partnership with Slashdot Media, is your hub for all things parallel software development, from weekly thought leadership blogs to news, videos, case studies, tutorials and more. Take a look and join the conversation now. http://goparallel.sourceforge.net _______________________________________________ genode-main mailing list genode-main@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/genode-main
-- Regards, Madhu
Dive into the World of Parallel Programming! The Go Parallel Website, sponsored by Intel and developed in partnership with Slashdot Media, is your hub for all things parallel software development, from weekly thought leadership blogs to news, videos, case studies, tutorials and more. Take a look and join the conversation now. http://goparallel.sourceforge.net _______________________________________________ genode-main mailing list genode-main@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/genode-main
Hello,
On 01/09/2015 10:51 AM, Mahdi Aichouch wrote:
Hello,
Thank you very much for your helpful answers.
However, I checked the repository https://bitbucket.org/casl/secureos, but I did not find a support of trustzone on the imx6 platform based on neither older or recent version of genode.
Maybe you didn't checked the right branch?
At least I can see TrustZone related code for i.MX6 in this branch of the same repository:
https://bitbucket.org/casl/secureos/src/e79eef4169050c321aaff38c59e429e2e88f...
Regards Stefan
kindest regards, Mahdi
On Fri, Jan 9, 2015 at 2:02 AM, Madhu (Macaque Labs) <madhu@...275... mailto:madhu@...275...> wrote:
I thought we were ! If it is not happening, I will make sure we do so from today. On Fri, Jan 9, 2015 at 1:00 AM, Christian Helmuth <christian.helmuth@...1... <mailto:christian.helmuth@...1...>> wrote: Hello, On Thu, Jan 08, 2015 at 07:17:32PM +0100, Stefan Kalkowski wrote: > Alternatively, maybe Chirag Garg and the IIT Madras Rise Lab like to > share their work on i.MX6 platform with you, or respectively the public > in general? AFAIK they already ported that work to the recent Genode > release. IIRC IIT Madras shares its work at Bitbucket https://bitbucket.org/casl/secureos Unfortunately, they don't preserve Genode commit history from what I understand after a quick look. Regards -- Christian Helmuth Genode Labs http://www.genode-labs.com/ · http://genode.org/ https://twitter.com/GenodeLabs · /ˈdʒiː.nəʊd/ Genode Labs GmbH · Amtsgericht Dresden · HRB 28424 · Sitz Dresden Geschäftsführer: Dr.-Ing. Norman Feske, Christian Helmuth ------------------------------------------------------------------------------ Dive into the World of Parallel Programming! The Go Parallel Website, sponsored by Intel and developed in partnership with Slashdot Media, is your hub for all things parallel software development, from weekly thought leadership blogs to news, videos, case studies, tutorials and more. Take a look and join the conversation now. http://goparallel.sourceforge.net _______________________________________________ genode-main mailing list genode-main@lists.sourceforge.net <mailto:genode-main@lists.sourceforge.net> https://lists.sourceforge.net/lists/listinfo/genode-main -- Regards, Madhu ------------------------------------------------------------------------------ Dive into the World of Parallel Programming! The Go Parallel Website, sponsored by Intel and developed in partnership with Slashdot Media, is your hub for all things parallel software development, from weekly thought leadership blogs to news, videos, case studies, tutorials and more. Take a look and join the conversation now. http://goparallel.sourceforge.net _______________________________________________ genode-main mailing list genode-main@lists.sourceforge.net <mailto:genode-main@lists.sourceforge.net> https://lists.sourceforge.net/lists/listinfo/genode-main
Dive into the World of Parallel Programming! The Go Parallel Website, sponsored by Intel and developed in partnership with Slashdot Media, is your hub for all things parallel software development, from weekly thought leadership blogs to news, videos, case studies, tutorials and more. Take a look and join the conversation now. http://goparallel.sourceforge.net
genode-main mailing list genode-main@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/genode-main
Ah, yes thank you very much ! You're right I was on the wrong branch.
On Fri, Jan 9, 2015 at 12:14 PM, Stefan Kalkowski < stefan.kalkowski@...1...> wrote:
Hello,
On 01/09/2015 10:51 AM, Mahdi Aichouch wrote:
Hello,
Thank you very much for your helpful answers.
However, I checked the repository https://bitbucket.org/casl/secureos, but I did not find a support of trustzone on the imx6 platform based on neither older or recent version of genode.
Maybe you didn't checked the right branch?
At least I can see TrustZone related code for i.MX6 in this branch of the same repository:
https://bitbucket.org/casl/secureos/src/e79eef4169050c321aaff38c59e429e2e88f...
Regards Stefan
kindest regards, Mahdi
On Fri, Jan 9, 2015 at 2:02 AM, Madhu (Macaque Labs) <madhu@...275... mailto:madhu@...275...> wrote:
I thought we were ! If it is not happening, I will make sure we do so from today. On Fri, Jan 9, 2015 at 1:00 AM, Christian Helmuth <christian.helmuth@...1... <mailto:christian.helmuth@...1...>> wrote: Hello, On Thu, Jan 08, 2015 at 07:17:32PM +0100, Stefan Kalkowski wrote: > Alternatively, maybe Chirag Garg and the IIT Madras Rise Lab
like to
> share their work on i.MX6 platform with you, or respectively
the public
> in general? AFAIK they already ported that work to the recent
Genode
> release. IIRC IIT Madras shares its work at Bitbucket https://bitbucket.org/casl/secureos Unfortunately, they don't preserve Genode commit history from
what I
understand after a quick look. Regards -- Christian Helmuth Genode Labs http://www.genode-labs.com/ · http://genode.org/ https://twitter.com/GenodeLabs · /ˈdʒiː.nəʊd/ Genode Labs GmbH · Amtsgericht Dresden · HRB 28424 · Sitz Dresden Geschäftsführer: Dr.-Ing. Norman Feske, Christian Helmuth
Dive into the World of Parallel Programming! The Go Parallel Website, sponsored by Intel and developed in partnership with Slashdot Media, is your hub for all things parallel software development, from weekly thought leadership blogs to news, videos, case studies, tutorials and more. Take a look and join the conversation now. http://goparallel.sourceforge.net _______________________________________________ genode-main mailing list genode-main@lists.sourceforge.net <mailto:genode-main@lists.sourceforge.net> https://lists.sourceforge.net/lists/listinfo/genode-main -- Regards, Madhu
Dive into the World of Parallel Programming! The Go Parallel Website, sponsored by Intel and developed in partnership with Slashdot Media, is your hub for all things parallel software development, from weekly thought leadership blogs to news, videos, case studies, tutorials and more. Take a look and join the conversation now.
http://goparallel.sourceforge.net
_______________________________________________ genode-main mailing list genode-main@lists.sourceforge.net <mailto:genode-main@lists.sourceforge.net> https://lists.sourceforge.net/lists/listinfo/genode-main
Dive into the World of Parallel Programming! The Go Parallel Website, sponsored by Intel and developed in partnership with Slashdot Media, is
your
hub for all things parallel software development, from weekly thought leadership blogs to news, videos, case studies, tutorials and more. Take
a
look and join the conversation now. http://goparallel.sourceforge.net
genode-main mailing list genode-main@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/genode-main
-- Stefan Kalkowski Genode Labs
http://www.genode-labs.com/ · http://genode.org/
Dive into the World of Parallel Programming! The Go Parallel Website, sponsored by Intel and developed in partnership with Slashdot Media, is your hub for all things parallel software development, from weekly thought leadership blogs to news, videos, case studies, tutorials and more. Take a look and join the conversation now. http://goparallel.sourceforge.net _______________________________________________ genode-main mailing list genode-main@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/genode-main
Hello,
I have a question about how the tz_vmm protects the memory reserved to the "Secure World" in the case of the versatile express cortex a9 (vea9x4) implementation.
In the case of the imx53, I saw that the Multi-Master Multi Memory Interface (MI4F) controller is used to secure memory region reserved to the "Secure World".
According to the arm versatile express cortex a9 board, the Trustzone Address Space Controller (TZASC) is used, which is also the case on the i.MX6 board.
However, I didn't find out in the vea9x4 implementation how the memory region reserved to the "Secure World" is protected is by the TZASC?
In the i.mx53 implementation of tz_vmm , the secure memory space is explicitly specified at the creation of MI4F object.
Could someone give some explanation about this point.
Thanks very much in advance.
best regards, Mahdi
On Fri, Jan 9, 2015 at 12:27 PM, Mahdi Aichouch <foxmehdi@...9...> wrote:
Ah, yes thank you very much ! You're right I was on the wrong branch.
On Fri, Jan 9, 2015 at 12:14 PM, Stefan Kalkowski < stefan.kalkowski@...1...> wrote:
Hello,
On 01/09/2015 10:51 AM, Mahdi Aichouch wrote:
Hello,
Thank you very much for your helpful answers.
However, I checked the repository https://bitbucket.org/casl/secureos, but I did not find a support of trustzone on the imx6 platform based on neither older or recent version of genode.
Maybe you didn't checked the right branch?
At least I can see TrustZone related code for i.MX6 in this branch of the same repository:
https://bitbucket.org/casl/secureos/src/e79eef4169050c321aaff38c59e429e2e88f...
Regards Stefan
kindest regards, Mahdi
On Fri, Jan 9, 2015 at 2:02 AM, Madhu (Macaque Labs) <madhu@...275... mailto:madhu@...275...> wrote:
I thought we were ! If it is not happening, I will make sure we do so from today. On Fri, Jan 9, 2015 at 1:00 AM, Christian Helmuth <christian.helmuth@...1... <mailto:christian.helmuth@...1...>> wrote: Hello, On Thu, Jan 08, 2015 at 07:17:32PM +0100, Stefan Kalkowski
wrote:
> Alternatively, maybe Chirag Garg and the IIT Madras Rise Lab
like to
> share their work on i.MX6 platform with you, or respectively
the public
> in general? AFAIK they already ported that work to the recent
Genode
> release. IIRC IIT Madras shares its work at Bitbucket https://bitbucket.org/casl/secureos Unfortunately, they don't preserve Genode commit history from
what I
understand after a quick look. Regards -- Christian Helmuth Genode Labs http://www.genode-labs.com/ · http://genode.org/ https://twitter.com/GenodeLabs · /ˈdʒiː.nəʊd/ Genode Labs GmbH · Amtsgericht Dresden · HRB 28424 · Sitz
Dresden
Geschäftsführer: Dr.-Ing. Norman Feske, Christian Helmuth
Dive into the World of Parallel Programming! The Go Parallel Website, sponsored by Intel and developed in partnership with Slashdot Media, is your hub for all things parallel software development, from weekly thought leadership blogs to news, videos, case studies, tutorials and more. Take a look and join the conversation now. http://goparallel.sourceforge.net _______________________________________________ genode-main mailing list genode-main@lists.sourceforge.net <mailto:genode-main@lists.sourceforge.net> https://lists.sourceforge.net/lists/listinfo/genode-main -- Regards, Madhu
Dive into the World of Parallel Programming! The Go Parallel
Website,
sponsored by Intel and developed in partnership with Slashdot Media, is your hub for all things parallel software development, from weekly
thought
leadership blogs to news, videos, case studies, tutorials and more. Take a look and join the conversation now.
http://goparallel.sourceforge.net
_______________________________________________ genode-main mailing list genode-main@lists.sourceforge.net <mailto:genode-main@lists.sourceforge.net> https://lists.sourceforge.net/lists/listinfo/genode-main
Dive into the World of Parallel Programming! The Go Parallel Website, sponsored by Intel and developed in partnership with Slashdot Media, is
your
hub for all things parallel software development, from weekly thought leadership blogs to news, videos, case studies, tutorials and more.
Take a
look and join the conversation now. http://goparallel.sourceforge.net
genode-main mailing list genode-main@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/genode-main
-- Stefan Kalkowski Genode Labs
http://www.genode-labs.com/ · http://genode.org/
Dive into the World of Parallel Programming! The Go Parallel Website, sponsored by Intel and developed in partnership with Slashdot Media, is your hub for all things parallel software development, from weekly thought leadership blogs to news, videos, case studies, tutorials and more. Take a look and join the conversation now. http://goparallel.sourceforge.net _______________________________________________ genode-main mailing list genode-main@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/genode-main