Discussion:
Genode freezes on USB Armory
Yevgeny Lavrov
2016-05-12 11:00:50 UTC
Permalink
Hi, after going through tz_vmm tutorial I was able to create uImage and put
it on MicroSD card. However, when I try to boot it on Armory, Genode
freezes all the way at the end.

Below is what appears on the console after executing

=> ext2load mmc 0:1 0x74000000 /uImage

=> bootm 0x74000000

it freezes after "Debian GNU/Linux 7 usbarmory console"

Am I missing something?

Starting kernel ...

kernel initialized
Genode 16.02
int main(): --- create local services ---
int main(): --- start init ---
int main(): transferred 246 MB to init
int main(): --- init created, waiting for exit condition ---
[init] Could not open ROM session for module "ld.lib.so"
[init] parent provides
[init] service "ROM"
[init] service "RAM"
[init] service "IRQ"
[init] service "IO_MEM"
[init] service "IO_PORT"
[init] service "CAP"
[init] service "PD"
[init] service "RM"
[init] service "CPU"
[init] service "LOG"
[init] service "SIGNAL"
[init] service "VM"
[init] child "gpio_drv"
[init] RAM quota: 2863104
[init] ELF binary: gpio_drv
[init] priority: 0
[init] provides service Gpio
[init] child "timer"
[init] RAM quota: 2863104
[init] ELF binary: timer
[init] priority: 0
[init] provides service Timer
[init] child "platform_drv"
[init] RAM quota: 2863104
[init] ELF binary: platform_drv
[init] priority: 0
[init] provides service Regulator
[init] provides service Platform
[init] child "sd_card_drv"
[init] RAM quota: 2863104
[init] ELF binary: sd_card_drv
[init] priority: 0
[init] provides service Block
[init] child "part_blk"
[init] RAM quota: 10203136
[init] ELF binary: part_blk
[init] priority: 0
[init] provides service Block
[init] child "tz_vmm"
[init] RAM quota: 10203136
[init] ELF binary: tz_vmm
[init] priority: 0
[init -> platform_drv] --- i.MX53 platform driver ---
[init] child "platform_drv" announces service "Platform"
[init -> sd_card_drv] --- Imx53 SD card driver ---
[init] child "sd_card_drv" announces service "Block"
[init] child "timer" announces service "Timer"
[init -> tz_vmm] Start virtual machine ...
[init -> gpio_drv] --- i.MX53 gpio driver ---
[init -> gpio_drv] No GPIO config
[init] child "gpio_drv" announces service "Gpio"
[init -> sd_card_drv] CID: 0x28424548 0x32353738 0x00000006 0x8a00b600
[init -> sd_card_drv] RCA: 0xb368
[init -> sd_card_drv] SD card detected
[init -> sd_card_drv] capacity: 3823 MiB
Quota exceeded! amount=12288, size=12288, consumed=12288
[init -> part_blk] Partition 1: LBA 20480 (194560 blocks) type: 83
[init -> part_blk] Partition 2: LBA 215040 (3896289 blocks) type: 83
[init] child "part_blk" announces service "Block"
[init -> tz_vmm] [vm] Booting Linux on physical CPU 0x0
[init -> tz_vmm] [vm] Linux version 4.2.3-00002-gfd57dbf-dirty (***@bird)
(gcc version 4.9.3 20150113 (prerelease) (Linaro GCC 4.9-2015.01-3) ) #4
PREEMPT Thu Nov 12 15:18:30 CET 2015
[init -> tz_vmm] [vm] CPU: ARMv7 Processor [412fc085] revision 5 (ARMv7),
cr=10c5387d
[init -> tz_vmm] [vm] CPU: PIPT / VIPT nonaliasing data cache, VIPT
aliasing instruction cache
[init -> tz_vmm] [vm] Machine model: Inverse Path USB armory
[init -> tz_vmm] [vm] Memory policy: Data cache writeback
[init -> tz_vmm] [vm] CPU: All CPU(s) started in SVC mode.
[init -> tz_vmm] [vm] Built 1 zonelists in Zone order, mobility grouping
on. Total pages: 65024
[init -> tz_vmm] [vm] Kernel command line: console=ttyS0 root=/dev/sda1
rootwait rw init=/sbin/init clk_ignore_unused
[init -> tz_vmm] [vm] PID hash table entries: 1024 (order: 0, 4096 bytes)
[init -> tz_vmm] [vm] Dentry cache hash table entries: 32768 (order: 5,
131072 bytes)
[init -> tz_vmm] [vm] Inode-cache hash table entries: 16384 (order: 4,
65536 bytes)
[init -> tz_vmm] [vm] Memory: 255160K/262144K available (3174K kernel code,
119K rwdata, 1060K rodata, 140K init, 93K bss, 6984K reserved, 0K
cma-reserved)
[init -> tz_vmm] [vm] Virtual kernel memory layout:
[init -> tz_vmm] [vm] vector : 0xffff0000 - 0xffff1000 ( 4 kB)
[init -> tz_vmm] [vm] fixmap : 0xffc00000 - 0xfff00000 (3072 kB)
[init -> tz_vmm] [vm] vmalloc : 0x90800000 - 0xff000000 (1768 MB)
[init -> tz_vmm] [vm] lowmem : 0x80000000 - 0x90000000 ( 256 MB)
[init -> tz_vmm] [vm] modules : 0x7f000000 - 0x80000000 ( 16 MB)
[init -> tz_vmm] [vm] .text : 0x80008000 - 0x8042abfc (4235 kB)
[init -> tz_vmm] [vm] .init : 0x8042b000 - 0x8044e000 ( 140 kB)
[init -> tz_vmm] [vm] .data : 0x8044e000 - 0x8046bc60 ( 120 kB)
[init -> tz_vmm] [vm] .bss : 0x8046bc60 - 0x804833ac ( 94 kB)
[init -> tz_vmm] [vm] SLUB: HWalign=64, Order=0-3, MinObjects=0, CPUs=1,
Nodes=1
[init -> tz_vmm] [vm] Preemptible hierarchical RCU implementation.
[init -> tz_vmm] [vm] Build-time adjustment of leaf fanout to 32.
[init -> tz_vmm] [vm] NR_IRQS:16 nr_irqs:16 16
[init -> tz_vmm] [vm] TrustZone Interrupt Controller (TZIC) initialized
[init -> tz_vmm] [vm] CPU identified as i.MX53, unknown revision
[init -> tz_vmm] [vm] Switching to timer-based delay loop, resolution 29ns
[init -> tz_vmm] [vm] sched_clock: 32 bits at 33MHz, resolution 29ns, wraps
every 64424507889ns
[init -> tz_vmm] [vm] clocksource: mxc_timer1: mask: 0xffffffff max_cycles:
0xffffffff, max_idle_ns: 57337812242 ns
[init -> tz_vmm] [vm] Console: colour dummy device 80x30
[init -> tz_vmm] [vm] console [ttyS0] enabled
[init -> tz_vmm] [vm] Calibrating delay loop (skipped), value calculated
using timer frequency.. 66.66 BogoMIPS (lpj=333333)
[init -> tz_vmm] [vm] pid_max: default: 32768 minimum: 301
[init -> tz_vmm] [vm] Security Framework initialized
[init -> tz_vmm] [vm] Mount-cache hash table entries: 1024 (order: 0, 4096
bytes)
[init -> tz_vmm] [vm] Mountpoint-cache hash table entries: 1024 (order: 0,
4096 bytes)
[init -> tz_vmm] [vm] Initializing cgroup subsys net_cls
[init -> tz_vmm] [vm] CPU: Testing write buffer coherency: ok
[init -> tz_vmm] [vm] Setting up static identity map for 0x80008200 -
0x80008258
[init -> tz_vmm] [vm] devtmpfs: initialized
[init -> tz_vmm] [vm] VFP support v0.3: implementor 41 architecture 3 part
30 variant c rev 2
[init -> tz_vmm] [vm] clocksource: jiffies: mask: 0xffffffff max_cycles:
0xffffffff, max_idle_ns: 19112604462750000 ns
[init -> tz_vmm] [vm] pinctrl core: initialized pinctrl subsystem
[init -> tz_vmm] [vm] NET: Registered protocol family 16
[init -> tz_vmm] [vm] DMA: preallocated 256 KiB pool for atomic coherent
allocations
[init -> tz_vmm] [vm] cpuidle: using governor ladder
[init -> tz_vmm] [vm] cpuidle: using governor menu
[init -> tz_vmm] [vm] imx53-pinctrl 53fa8000.iomuxc: initialized IMX
pinctrl driver
[init -> tz_vmm] [vm] 50000000.aips:***@0 supply vcc not found, using
dummy regulator
[init -> tz_vmm] [vm] 50000000.aips:***@1 supply vcc not found, using
dummy regulator
[init -> tz_vmm] [vm] pps_core: LinuxPPS API ver. 1 registered
[init -> tz_vmm] [vm] pps_core: Software ver. 5.3.6 - Copyright 2005-2007
Rodolfo Giometti <***@linux.it>
[init -> tz_vmm] [vm] clocksource: Switched to clocksource mxc_timer1
[init -> tz_vmm] [vm] NET: Registered protocol family 2
[init -> tz_vmm] [vm] TCP established hash table entries: 2048 (order: 1,
8192 bytes)
[init -> tz_vmm] [vm] TCP bind hash table entries: 2048 (order: 1, 8192
bytes)
[init -> tz_vmm] [vm] TCP: Hash tables configured (established 2048 bind
2048)
[init -> tz_vmm] [vm] UDP hash table entries: 256 (order: 0, 4096 bytes)
[init -> tz_vmm] [vm] UDP-Lite hash table entries: 256 (order: 0, 4096
bytes)
[init -> tz_vmm] [vm] NET: Registered protocol family 1
[init -> tz_vmm] [vm] futex hash table entries: 256 (order: -1, 3072 bytes)
[init -> tz_vmm] [vm] squashfs: version 4.0 (2009/01/31) Phillip Lougher
[init -> tz_vmm] [vm] io scheduler noop registered (default)
[init -> tz_vmm] [vm] imx-sdma 63fb0000.sdma: failed to get firmware from
device tree
[init -> tz_vmm] [vm] imx-sdma 63fb0000.sdma: initialized
[init -> tz_vmm] [vm] ttyS0 at MMIO 0x1 (irq = 0, base_baud = 230400) is a
IMX
[init -> tz_vmm] [vm] loop: module loaded
[init -> part_blk] session opened at partition 2 for 'tz_vmm -> sda1'
[init -> tz_vmm] [vm] genblk: drive 0
[init -> tz_vmm] [vm] block count 3896289
[init -> tz_vmm] [vm] block size 512
[init -> tz_vmm] [vm] writeable 1
[init -> tz_vmm] [vm] queue size 5226480
[init -> tz_vmm] [vm] pirq 92
[init -> tz_vmm] [vm] virq 108
[init -> tz_vmm] [vm] major number 254
[init -> tz_vmm] [vm] name "sda1"
[init -> tz_vmm] [vm] device-mapper: ioctl: 4.33.0-ioctl (2015-8-18)
initialised: dm-***@redhat.com
[init -> tz_vmm] [vm] sahara 63ff8000.crypto: SAHARA version 4 initialized
[init -> tz_vmm] [vm] NET: Registered protocol family 17
[init -> tz_vmm] [vm] GENODE_TZ_VMM: skip mx5_cpu_lp_set
[init -> tz_vmm] [vm] imx5_pm_common_init: No DDR LPM support with suspend
-22!
[init -> tz_vmm] [vm] hctosys: unable to open rtc device (rtc0)
[init -> tz_vmm] [vm] clk: Not disabling unused clocks
[init -> tz_vmm] [vm] EXT4-fs (sda1): couldn't mount as ext3 due to feature
incompatibilities
[init -> tz_vmm] [vm] EXT4-fs (sda1): couldn't mount as ext2 due to feature
incompatibilities
[init -> tz_vmm] [vm] EXT4-fs (sda1): recovery complete
[init -> tz_vmm] [vm] EXT4-fs (sda1): mounted filesystem with ordered data
mode. Opts: (null)
[init -> tz_vmm] [vm] VFS: Mounted root (ext4 filesystem) on device 254:0.
[init -> tz_vmm] [vm] devtmpfs: mounted
[init -> tz_vmm] [vm] Freeing unused kernel memory: 140K (8042b000 -
8044e000)
[init -> tz_vmm] [vm] random: nonblocking pool is initialized
INIT: version 2.88 booting
[init -> tz_vmm] [vm] [info] Using makefile-style concurrent boot in
runlevel S.
[init -> tz_vmm] [vm] [....] Starting the hotplug events dispatcher:
udevdudevd[150]: starting version 175
[ ok -> tz_vmm] [vm] .
[ ok -> tz_vmm] [vm] [....] Synthesizing the initial hotplug events...done.
[init -> tz_vmm] [vm] [....] Waiting for /dev to be fully
populated...imx2-wdt 53f98000.wdog: timeout 60 sec (nowayout=0)
[init -> tz_vmm] [vm] usbcore: registered new interface driver usbfs
[init -> tz_vmm] [vm] usbcore: registered new interface driver hub
[init -> tz_vmm] [vm] usbcore: registered new device driver usb
[init -> tz_vmm] [vm] ehci_hcd: USB 2.0 'Enhanced' Host Controller (EHCI)
Driver
[ ok -> tz_vmm] [vm] done.
[ ok -> tz_vmm] [vm] [....] Activating swap...done.
[init -> tz_vmm] [vm] EXT4-fs (sda1): re-mounted. Opts: (null)
[ ok -> tz_vmm] [vm] [....] Cleaning up temporary files... /tmp.
[init -> tz_vmm] [vm] [info] Loading kernel module ledtrig_heartbeat.
[init -> tz_vmm] [vm] FATAL: Module ledtrig_heartbeat not found.
[init -> tz_vmm] [vm] [info] Loading kernel module g_ether.
[init -> tz_vmm] [vm] using random self ethernet address
[init -> tz_vmm] [vm] using random host ethernet address
[init -> tz_vmm] [vm] using self ethernet address: 1a:55:89:a2:69:41
[init -> tz_vmm] [vm] usb0: HOST MAC 2a:cd:e3:c7:c8:0a
[init -> tz_vmm] [vm] usb0: MAC 1a:55:89:a2:69:41
[init -> tz_vmm] [vm] using random self ethernet address
[init -> tz_vmm] [vm] using random host ethernet address
[init -> tz_vmm] [vm] g_ether gadget: Ethernet Gadget, version: Memorial
Day 2008
[init -> tz_vmm] [vm] g_ether gadget: g_ether ready
[init -> tz_vmm] [vm] g_ether gadget: high-speed config #1: CDC Ethernet
(ECM)
[ ok -> tz_vmm] [vm] [....] Activating lvm and md swap...done.
[init -> tz_vmm] [vm] [....] Checking file systems...fsck from util-linux
2.20.1
[ ok -> tz_vmm] [vm] done.
[ ok -> tz_vmm] [vm] [....] Mounting local filesystems...done.
[ ok -> tz_vmm] [vm] [....] Activating swapfile swap...done.
[ ok -> tz_vmm] [vm] [....] Cleaning up temporary files....
[ ok -> tz_vmm] [vm] [....] Setting kernel variables ...done.
[init -> tz_vmm] [vm] [....] Configuring network interfaces...ifup:
interface usb0 already configured
[ ok -> tz_vmm] [vm] done.
[ ok -> tz_vmm] [vm] [....] Cleaning up temporary files....
[init -> tz_vmm] [vm] NET: Registered protocol family 10
INIT: Entering runlevel: 2
[init -> tz_vmm] [vm] [info] Using makefile-style concurrent boot in
runlevel 2.
[ ok -> tz_vmm] [vm] [....] Starting enhanced syslogd: rsyslogd.
[ ok -> tz_vmm] [vm] [....] Starting periodic command scheduler: cron.
[ ok -> tz_vmm] [vm] [....] Starting OpenBSD Secure Shell server: sshd.
[init -> tz_vmm] [vm]
[init -> tz_vmm] [vm] Debian GNU/Linux 7 usbarmory console
[init -> tz_vmm] [vm]
Martin Stein
2016-05-12 12:51:25 UTC
Permalink
Hi Yevgeny,

What do you mean when you say it freezes?

If it doesn't react to keyboard input via your COM interface (minicom,
picocom, ...) that doesn't necessarily mean that it is frozen. UART
input isn't forwarded to the "Secure" world userland or the "Normal"
world guest OS in this scenario.

You can, however, communicate with the guest OS via TCP/IP (for example
by using ssh). For the details see [1]

Cheers,
Martin

[1] https://github.com/inversepath/usbarmory/wiki/Host-communication
Post by Yevgeny Lavrov
Hi, after going through tz_vmm tutorial I was able to create uImage and
put it on MicroSD card. However, when I try to boot it on Armory, Genode
freezes all the way at the end.
Below is what appears on the console after executing
=> ext2load mmc 0:1 0x74000000 /uImage
=> bootm 0x74000000
it freezes after "Debian GNU/Linux 7 usbarmory console"
Am I missing something?
Starting kernel ...
kernel initialized
Genode 16.02
int main(): --- create local services ---
int main(): --- start init ---
int main(): transferred 246 MB to init
int main(): --- init created, waiting for exit condition ---
[init] Could not open ROM session for module "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 "IO_PORT"
[init] service "CAP"
[init] service "PD"
[init] service "RM"
[init] service "CPU"
[init] service "LOG"
[init] service "SIGNAL"
[init] service "VM"
[init] child "gpio_drv"
[init] RAM quota: 2863104
[init] ELF binary: gpio_drv
[init] priority: 0
[init] provides service Gpio
[init] child "timer"
[init] RAM quota: 2863104
[init] ELF binary: timer
[init] priority: 0
[init] provides service Timer
[init] child "platform_drv"
[init] RAM quota: 2863104
[init] ELF binary: platform_drv
[init] priority: 0
[init] provides service Regulator
[init] provides service Platform
[init] child "sd_card_drv"
[init] RAM quota: 2863104
[init] ELF binary: sd_card_drv
[init] priority: 0
[init] provides service Block
[init] child "part_blk"
[init] RAM quota: 10203136
[init] ELF binary: part_blk
[init] priority: 0
[init] provides service Block
[init] child "tz_vmm"
[init] RAM quota: 10203136
[init] ELF binary: tz_vmm
[init] priority: 0
[init -> platform_drv] --- i.MX53 platform driver ---
[init] child "platform_drv" announces service "Platform"
[init -> sd_card_drv] --- Imx53 SD card driver ---
[init] child "sd_card_drv" announces service "Block"
[init] child "timer" announces service "Timer"
[init -> tz_vmm] Start virtual machine ...
[init -> gpio_drv] --- i.MX53 gpio driver ---
[init -> gpio_drv] No GPIO config
[init] child "gpio_drv" announces service "Gpio"
[init -> sd_card_drv] CID: 0x28424548 0x32353738 0x00000006 0x8a00b600
[init -> sd_card_drv] RCA: 0xb368
[init -> sd_card_drv] SD card detected
[init -> sd_card_drv] capacity: 3823 MiB
Quota exceeded! amount=12288, size=12288, consumed=12288
[init -> part_blk] Partition 1: LBA 20480 (194560 blocks) type: 83
[init -> part_blk] Partition 2: LBA 215040 (3896289 blocks) type: 83
[init] child "part_blk" announces service "Block"
[init -> tz_vmm] [vm] Booting Linux on physical CPU 0x0
[init -> tz_vmm] [vm] Linux version 4.2.3-00002-gfd57dbf-dirty
4.9-2015.01-3) ) #4 PREEMPT Thu Nov 12 15:18:30 CET 2015
[init -> tz_vmm] [vm] CPU: ARMv7 Processor [412fc085] revision 5
(ARMv7), cr=10c5387d
[init -> tz_vmm] [vm] CPU: PIPT / VIPT nonaliasing data cache, VIPT
aliasing instruction cache
[init -> tz_vmm] [vm] Machine model: Inverse Path USB armory
[init -> tz_vmm] [vm] Memory policy: Data cache writeback
[init -> tz_vmm] [vm] CPU: All CPU(s) started in SVC mode.
[init -> tz_vmm] [vm] Built 1 zonelists in Zone order, mobility grouping
on. Total pages: 65024
[init -> tz_vmm] [vm] Kernel command line: console=ttyS0 root=/dev/sda1
rootwait rw init=/sbin/init clk_ignore_unused
[init -> tz_vmm] [vm] PID hash table entries: 1024 (order: 0, 4096 bytes)
[init -> tz_vmm] [vm] Dentry cache hash table entries: 32768 (order: 5,
131072 bytes)
[init -> tz_vmm] [vm] Inode-cache hash table entries: 16384 (order: 4,
65536 bytes)
[init -> tz_vmm] [vm] Memory: 255160K/262144K available (3174K kernel
code, 119K rwdata, 1060K rodata, 140K init, 93K bss, 6984K reserved, 0K
cma-reserved)
[init -> tz_vmm] [vm] vector : 0xffff0000 - 0xffff1000 ( 4 kB)
[init -> tz_vmm] [vm] fixmap : 0xffc00000 - 0xfff00000 (3072 kB)
[init -> tz_vmm] [vm] vmalloc : 0x90800000 - 0xff000000 (1768 MB)
[init -> tz_vmm] [vm] lowmem : 0x80000000 - 0x90000000 ( 256 MB)
[init -> tz_vmm] [vm] modules : 0x7f000000 - 0x80000000 ( 16 MB)
[init -> tz_vmm] [vm] .text : 0x80008000 - 0x8042abfc (4235 kB)
[init -> tz_vmm] [vm] .init : 0x8042b000 - 0x8044e000 ( 140 kB)
[init -> tz_vmm] [vm] .data : 0x8044e000 - 0x8046bc60 ( 120 kB)
[init -> tz_vmm] [vm] .bss : 0x8046bc60 - 0x804833ac ( 94 kB)
[init -> tz_vmm] [vm] SLUB: HWalign=64, Order=0-3, MinObjects=0, CPUs=1,
Nodes=1
[init -> tz_vmm] [vm] Preemptible hierarchical RCU implementation.
[init -> tz_vmm] [vm] Build-time adjustment of leaf fanout to 32.
[init -> tz_vmm] [vm] NR_IRQS:16 nr_irqs:16 16
[init -> tz_vmm] [vm] TrustZone Interrupt Controller (TZIC) initialized
[init -> tz_vmm] [vm] CPU identified as i.MX53, unknown revision
[init -> tz_vmm] [vm] Switching to timer-based delay loop, resolution 29ns
[init -> tz_vmm] [vm] sched_clock: 32 bits at 33MHz, resolution 29ns,
wraps every 64424507889ns
[init -> tz_vmm] [vm] clocksource: mxc_timer1: mask: 0xffffffff
max_cycles: 0xffffffff, max_idle_ns: 57337812242 ns
[init -> tz_vmm] [vm] Console: colour dummy device 80x30
[init -> tz_vmm] [vm] console [ttyS0] enabled
[init -> tz_vmm] [vm] Calibrating delay loop (skipped), value calculated
using timer frequency.. 66.66 BogoMIPS (lpj=333333)
[init -> tz_vmm] [vm] pid_max: default: 32768 minimum: 301
[init -> tz_vmm] [vm] Security Framework initialized
[init -> tz_vmm] [vm] Mount-cache hash table entries: 1024 (order: 0,
4096 bytes)
0, 4096 bytes)
[init -> tz_vmm] [vm] Initializing cgroup subsys net_cls
[init -> tz_vmm] [vm] CPU: Testing write buffer coherency: ok
[init -> tz_vmm] [vm] Setting up static identity map for 0x80008200 -
0x80008258
[init -> tz_vmm] [vm] devtmpfs: initialized
[init -> tz_vmm] [vm] VFP support v0.3: implementor 41 architecture 3
part 30 variant c rev 2
0xffffffff, max_idle_ns: 19112604462750000 ns
[init -> tz_vmm] [vm] pinctrl core: initialized pinctrl subsystem
[init -> tz_vmm] [vm] NET: Registered protocol family 16
[init -> tz_vmm] [vm] DMA: preallocated 256 KiB pool for atomic coherent
allocations
[init -> tz_vmm] [vm] cpuidle: using governor ladder
[init -> tz_vmm] [vm] cpuidle: using governor menu
[init -> tz_vmm] [vm] imx53-pinctrl 53fa8000.iomuxc: initialized IMX
pinctrl driver
dummy regulator
dummy regulator
[init -> tz_vmm] [vm] pps_core: LinuxPPS API ver. 1 registered
[init -> tz_vmm] [vm] pps_core: Software ver. 5.3.6 - Copyright
[init -> tz_vmm] [vm] clocksource: Switched to clocksource mxc_timer1
[init -> tz_vmm] [vm] NET: Registered protocol family 2
1, 8192 bytes)
[init -> tz_vmm] [vm] TCP bind hash table entries: 2048 (order: 1, 8192
bytes)
[init -> tz_vmm] [vm] TCP: Hash tables configured (established 2048 bind
2048)
[init -> tz_vmm] [vm] UDP hash table entries: 256 (order: 0, 4096 bytes)
[init -> tz_vmm] [vm] UDP-Lite hash table entries: 256 (order: 0, 4096
bytes)
[init -> tz_vmm] [vm] NET: Registered protocol family 1
[init -> tz_vmm] [vm] futex hash table entries: 256 (order: -1, 3072 bytes)
[init -> tz_vmm] [vm] squashfs: version 4.0 (2009/01/31) Phillip Lougher
[init -> tz_vmm] [vm] io scheduler noop registered (default)
[init -> tz_vmm] [vm] imx-sdma 63fb0000.sdma: failed to get firmware
from device tree
[init -> tz_vmm] [vm] imx-sdma 63fb0000.sdma: initialized
[init -> tz_vmm] [vm] ttyS0 at MMIO 0x1 (irq = 0, base_baud = 230400) is
a IMX
[init -> tz_vmm] [vm] loop: module loaded
[init -> part_blk] session opened at partition 2 for 'tz_vmm -> sda1'
[init -> tz_vmm] [vm] genblk: drive 0
[init -> tz_vmm] [vm] block count 3896289
[init -> tz_vmm] [vm] block size 512
[init -> tz_vmm] [vm] writeable 1
[init -> tz_vmm] [vm] queue size 5226480
[init -> tz_vmm] [vm] pirq 92
[init -> tz_vmm] [vm] virq 108
[init -> tz_vmm] [vm] major number 254
[init -> tz_vmm] [vm] name "sda1"
[init -> tz_vmm] [vm] device-mapper: ioctl: 4.33.0-ioctl (2015-8-18)
[init -> tz_vmm] [vm] sahara 63ff8000.crypto: SAHARA version 4 initialized
[init -> tz_vmm] [vm] NET: Registered protocol family 17
[init -> tz_vmm] [vm] GENODE_TZ_VMM: skip mx5_cpu_lp_set
[init -> tz_vmm] [vm] imx5_pm_common_init: No DDR LPM support with
suspend -22!
[init -> tz_vmm] [vm] hctosys: unable to open rtc device (rtc0)
[init -> tz_vmm] [vm] clk: Not disabling unused clocks
[init -> tz_vmm] [vm] EXT4-fs (sda1): couldn't mount as ext3 due to
feature incompatibilities
[init -> tz_vmm] [vm] EXT4-fs (sda1): couldn't mount as ext2 due to
feature incompatibilities
[init -> tz_vmm] [vm] EXT4-fs (sda1): recovery complete
[init -> tz_vmm] [vm] EXT4-fs (sda1): mounted filesystem with ordered
data mode. Opts: (null)
[init -> tz_vmm] [vm] VFS: Mounted root (ext4 filesystem) on device 254:0.
[init -> tz_vmm] [vm] devtmpfs: mounted
[init -> tz_vmm] [vm] Freeing unused kernel memory: 140K (8042b000 -
8044e000)
[init -> tz_vmm] [vm] random: nonblocking pool is initialized
INIT: version 2.88 booting
[init -> tz_vmm] [vm] [info] Using makefile-style concurrent boot in
runlevel S.
udevdudevd[150]: starting version 175
[ ok -> tz_vmm] [vm] .
[ ok -> tz_vmm] [vm] [....] Synthesizing the initial hotplug events...done.
[init -> tz_vmm] [vm] [....] Waiting for /dev to be fully
populated...imx2-wdt 53f98000.wdog: timeout 60 sec (nowayout=0)
[init -> tz_vmm] [vm] usbcore: registered new interface driver usbfs
[init -> tz_vmm] [vm] usbcore: registered new interface driver hub
[init -> tz_vmm] [vm] usbcore: registered new device driver usb
[init -> tz_vmm] [vm] ehci_hcd: USB 2.0 'Enhanced' Host Controller
(EHCI) Driver
[ ok -> tz_vmm] [vm] done.
[ ok -> tz_vmm] [vm] [....] Activating swap...done.
[init -> tz_vmm] [vm] EXT4-fs (sda1): re-mounted. Opts: (null)
[ ok -> tz_vmm] [vm] [....] Cleaning up temporary files... /tmp.
[init -> tz_vmm] [vm] [info] Loading kernel module ledtrig_heartbeat.
[init -> tz_vmm] [vm] FATAL: Module ledtrig_heartbeat not found.
[init -> tz_vmm] [vm] [info] Loading kernel module g_ether.
[init -> tz_vmm] [vm] using random self ethernet address
[init -> tz_vmm] [vm] using random host ethernet address
[init -> tz_vmm] [vm] using self ethernet address: 1a:55:89:a2:69:41
[init -> tz_vmm] [vm] usb0: HOST MAC 2a:cd:e3:c7:c8:0a
[init -> tz_vmm] [vm] usb0: MAC 1a:55:89:a2:69:41
[init -> tz_vmm] [vm] using random self ethernet address
[init -> tz_vmm] [vm] using random host ethernet address
[init -> tz_vmm] [vm] g_ether gadget: Ethernet Gadget, version: Memorial
Day 2008
[init -> tz_vmm] [vm] g_ether gadget: g_ether ready
[init -> tz_vmm] [vm] g_ether gadget: high-speed config #1: CDC Ethernet
(ECM)
[ ok -> tz_vmm] [vm] [....] Activating lvm and md swap...done.
[init -> tz_vmm] [vm] [....] Checking file systems...fsck from
util-linux 2.20.1
[ ok -> tz_vmm] [vm] done.
[ ok -> tz_vmm] [vm] [....] Mounting local filesystems...done.
[ ok -> tz_vmm] [vm] [....] Activating swapfile swap...done.
[ ok -> tz_vmm] [vm] [....] Cleaning up temporary files....
[ ok -> tz_vmm] [vm] [....] Setting kernel variables ...done.
interface usb0 already configured
[ ok -> tz_vmm] [vm] done.
[ ok -> tz_vmm] [vm] [....] Cleaning up temporary files....
[init -> tz_vmm] [vm] NET: Registered protocol family 10
INIT: Entering runlevel: 2
[init -> tz_vmm] [vm] [info] Using makefile-style concurrent boot in
runlevel 2.
[ ok -> tz_vmm] [vm] [....] Starting enhanced syslogd: rsyslogd.
[ ok -> tz_vmm] [vm] [....] Starting periodic command scheduler: cron.
[ ok -> tz_vmm] [vm] [....] Starting OpenBSD Secure Shell server: sshd.
[init -> tz_vmm] [vm]
[init -> tz_vmm] [vm] Debian GNU/Linux 7 usbarmory console
[init -> tz_vmm] [vm]
------------------------------------------------------------------------------
Mobile security can be enabling, not merely restricting. Employees who
bring their own devices (BYOD) to work are irked by the imposition of MDM
restrictions. Mobile Device Manager Plus allows you to control only the
apps on BYO-devices by containerizing them, leaving personal data untouched!
https://ad.doubleclick.net/ddm/clk/304595813;131938128;j
_______________________________________________
genode-main mailing list
https://lists.sourceforge.net/lists/listinfo/genode-main
Yevgeny Lavrov
2016-05-16 09:27:39 UTC
Permalink
Thanks for the quick reply, I was unaware that I have to ssh into the USB
Armory in order to access it. I was expecting it to communicate back to me
via COM interface as other OS’s I’ve had previously installed on the USB
Armory. However, there are few more questions I have, and I’ll be very
grateful if you can answer them or provide me with any information. So I
was able to run Genode on USB Armory, and ssh into it, and it appears to me
that I’m interacting with Linux Virtual Machine. If it is a Virtual
Machine, then are there any tools available within that VM that I can use
to talk to the outside of the Linux VM, or at least somehow
prove/demonstrate that the Linux VM I’m currently in is running atop of
Genode?



The other question is about the Kernel. It appears as ARM Linux Kernel
during boot. Is it a standard Linux Kernel or especially customized one to
support Genode? I just need to verify this.



Can you provide any tips on how to bring up any other microkernels fully
supported by Genode that I can run on USB Armory? If there are no other
options available besides using the default Linux kernel that comes with
the tz_vmm, then is there any other board that you can recommend me to use
to run Genode with fully supported microkernels, as preparation for seL4?
Post by Yevgeny Lavrov
Hi, after going through tz_vmm tutorial I was able to create uImage and
put it on MicroSD card. However, when I try to boot it on Armory, Genode
freezes all the way at the end.
Below is what appears on the console after executing
=> ext2load mmc 0:1 0x74000000 /uImage
=> bootm 0x74000000
it freezes after "Debian GNU/Linux 7 usbarmory console"
Am I missing something?
Starting kernel ...
kernel initialized
Genode 16.02
int main(): --- create local services ---
int main(): --- start init ---
int main(): transferred 246 MB to init
int main(): --- init created, waiting for exit condition ---
[init] Could not open ROM session for module "ld.lib.so"
[init] parent provides
[init] service "ROM"
[init] service "RAM"
[init] service "IRQ"
[init] service "IO_MEM"
[init] service "IO_PORT"
[init] service "CAP"
[init] service "PD"
[init] service "RM"
[init] service "CPU"
[init] service "LOG"
[init] service "SIGNAL"
[init] service "VM"
[init] child "gpio_drv"
[init] RAM quota: 2863104
[init] ELF binary: gpio_drv
[init] priority: 0
[init] provides service Gpio
[init] child "timer"
[init] RAM quota: 2863104
[init] ELF binary: timer
[init] priority: 0
[init] provides service Timer
[init] child "platform_drv"
[init] RAM quota: 2863104
[init] ELF binary: platform_drv
[init] priority: 0
[init] provides service Regulator
[init] provides service Platform
[init] child "sd_card_drv"
[init] RAM quota: 2863104
[init] ELF binary: sd_card_drv
[init] priority: 0
[init] provides service Block
[init] child "part_blk"
[init] RAM quota: 10203136
[init] ELF binary: part_blk
[init] priority: 0
[init] provides service Block
[init] child "tz_vmm"
[init] RAM quota: 10203136
[init] ELF binary: tz_vmm
[init] priority: 0
[init -> platform_drv] --- i.MX53 platform driver ---
[init] child "platform_drv" announces service "Platform"
[init -> sd_card_drv] --- Imx53 SD card driver ---
[init] child "sd_card_drv" announces service "Block"
[init] child "timer" announces service "Timer"
[init -> tz_vmm] Start virtual machine ...
[init -> gpio_drv] --- i.MX53 gpio driver ---
[init -> gpio_drv] No GPIO config
[init] child "gpio_drv" announces service "Gpio"
[init -> sd_card_drv] CID: 0x28424548 0x32353738 0x00000006 0x8a00b600
[init -> sd_card_drv] RCA: 0xb368
[init -> sd_card_drv] SD card detected
[init -> sd_card_drv] capacity: 3823 MiB
Quota exceeded! amount=12288, size=12288, consumed=12288
[init -> part_blk] Partition 1: LBA 20480 (194560 blocks) type: 83
[init -> part_blk] Partition 2: LBA 215040 (3896289 blocks) type: 83
[init] child "part_blk" announces service "Block"
[init -> tz_vmm] [vm] Booting Linux on physical CPU 0x0
(gcc version 4.9.3 20150113 (prerelease) (Linaro GCC 4.9-2015.01-3) ) #4
PREEMPT Thu Nov 12 15:18:30 CET 2015
[init -> tz_vmm] [vm] CPU: ARMv7 Processor [412fc085] revision 5 (ARMv7),
cr=10c5387d
[init -> tz_vmm] [vm] CPU: PIPT / VIPT nonaliasing data cache, VIPT
aliasing instruction cache
[init -> tz_vmm] [vm] Machine model: Inverse Path USB armory
[init -> tz_vmm] [vm] Memory policy: Data cache writeback
[init -> tz_vmm] [vm] CPU: All CPU(s) started in SVC mode.
[init -> tz_vmm] [vm] Built 1 zonelists in Zone order, mobility grouping
on. Total pages: 65024
[init -> tz_vmm] [vm] Kernel command line: console=ttyS0 root=/dev/sda1
rootwait rw init=/sbin/init clk_ignore_unused
[init -> tz_vmm] [vm] PID hash table entries: 1024 (order: 0, 4096 bytes)
[init -> tz_vmm] [vm] Dentry cache hash table entries: 32768 (order: 5,
131072 bytes)
[init -> tz_vmm] [vm] Inode-cache hash table entries: 16384 (order: 4,
65536 bytes)
[init -> tz_vmm] [vm] Memory: 255160K/262144K available (3174K kernel
code, 119K rwdata, 1060K rodata, 140K init, 93K bss, 6984K reserved, 0K
cma-reserved)
[init -> tz_vmm] [vm] vector : 0xffff0000 - 0xffff1000 ( 4 kB)
[init -> tz_vmm] [vm] fixmap : 0xffc00000 - 0xfff00000 (3072 kB)
[init -> tz_vmm] [vm] vmalloc : 0x90800000 - 0xff000000 (1768 MB)
[init -> tz_vmm] [vm] lowmem : 0x80000000 - 0x90000000 ( 256 MB)
[init -> tz_vmm] [vm] modules : 0x7f000000 - 0x80000000 ( 16 MB)
[init -> tz_vmm] [vm] .text : 0x80008000 - 0x8042abfc (4235 kB)
[init -> tz_vmm] [vm] .init : 0x8042b000 - 0x8044e000 ( 140 kB)
[init -> tz_vmm] [vm] .data : 0x8044e000 - 0x8046bc60 ( 120 kB)
[init -> tz_vmm] [vm] .bss : 0x8046bc60 - 0x804833ac ( 94 kB)
[init -> tz_vmm] [vm] SLUB: HWalign=64, Order=0-3, MinObjects=0, CPUs=1,
Nodes=1
[init -> tz_vmm] [vm] Preemptible hierarchical RCU implementation.
[init -> tz_vmm] [vm] Build-time adjustment of leaf fanout to 32.
[init -> tz_vmm] [vm] NR_IRQS:16 nr_irqs:16 16
[init -> tz_vmm] [vm] TrustZone Interrupt Controller (TZIC) initialized
[init -> tz_vmm] [vm] CPU identified as i.MX53, unknown revision
[init -> tz_vmm] [vm] Switching to timer-based delay loop, resolution 29ns
[init -> tz_vmm] [vm] sched_clock: 32 bits at 33MHz, resolution 29ns,
wraps every 64424507889ns
[init -> tz_vmm] [vm] clocksource: mxc_timer1: mask: 0xffffffff
max_cycles: 0xffffffff, max_idle_ns: 57337812242 ns
[init -> tz_vmm] [vm] Console: colour dummy device 80x30
[init -> tz_vmm] [vm] console [ttyS0] enabled
[init -> tz_vmm] [vm] Calibrating delay loop (skipped), value calculated
using timer frequency.. 66.66 BogoMIPS (lpj=333333)
[init -> tz_vmm] [vm] pid_max: default: 32768 minimum: 301
[init -> tz_vmm] [vm] Security Framework initialized
[init -> tz_vmm] [vm] Mount-cache hash table entries: 1024 (order: 0, 4096
bytes)
[init -> tz_vmm] [vm] Mountpoint-cache hash table entries: 1024 (order: 0,
4096 bytes)
[init -> tz_vmm] [vm] Initializing cgroup subsys net_cls
[init -> tz_vmm] [vm] CPU: Testing write buffer coherency: ok
[init -> tz_vmm] [vm] Setting up static identity map for 0x80008200 -
0x80008258
[init -> tz_vmm] [vm] devtmpfs: initialized
[init -> tz_vmm] [vm] VFP support v0.3: implementor 41 architecture 3 part
30 variant c rev 2
0xffffffff, max_idle_ns: 19112604462750000 ns
[init -> tz_vmm] [vm] pinctrl core: initialized pinctrl subsystem
[init -> tz_vmm] [vm] NET: Registered protocol family 16
[init -> tz_vmm] [vm] DMA: preallocated 256 KiB pool for atomic coherent
allocations
[init -> tz_vmm] [vm] cpuidle: using governor ladder
[init -> tz_vmm] [vm] cpuidle: using governor menu
[init -> tz_vmm] [vm] imx53-pinctrl 53fa8000.iomuxc: initialized IMX
pinctrl driver
dummy regulator
dummy regulator
[init -> tz_vmm] [vm] pps_core: LinuxPPS API ver. 1 registered
[init -> tz_vmm] [vm] pps_core: Software ver. 5.3.6 - Copyright 2005-2007
[init -> tz_vmm] [vm] clocksource: Switched to clocksource mxc_timer1
[init -> tz_vmm] [vm] NET: Registered protocol family 2
[init -> tz_vmm] [vm] TCP established hash table entries: 2048 (order: 1,
8192 bytes)
[init -> tz_vmm] [vm] TCP bind hash table entries: 2048 (order: 1, 8192
bytes)
[init -> tz_vmm] [vm] TCP: Hash tables configured (established 2048 bind
2048)
[init -> tz_vmm] [vm] UDP hash table entries: 256 (order: 0, 4096 bytes)
[init -> tz_vmm] [vm] UDP-Lite hash table entries: 256 (order: 0, 4096
bytes)
[init -> tz_vmm] [vm] NET: Registered protocol family 1
[init -> tz_vmm] [vm] futex hash table entries: 256 (order: -1, 3072 bytes)
[init -> tz_vmm] [vm] squashfs: version 4.0 (2009/01/31) Phillip Lougher
[init -> tz_vmm] [vm] io scheduler noop registered (default)
[init -> tz_vmm] [vm] imx-sdma 63fb0000.sdma: failed to get firmware from
device tree
[init -> tz_vmm] [vm] imx-sdma 63fb0000.sdma: initialized
[init -> tz_vmm] [vm] ttyS0 at MMIO 0x1 (irq = 0, base_baud = 230400) is a
IMX
[init -> tz_vmm] [vm] loop: module loaded
[init -> part_blk] session opened at partition 2 for 'tz_vmm -> sda1'
[init -> tz_vmm] [vm] genblk: drive 0
[init -> tz_vmm] [vm] block count 3896289
[init -> tz_vmm] [vm] block size 512
[init -> tz_vmm] [vm] writeable 1
[init -> tz_vmm] [vm] queue size 5226480
[init -> tz_vmm] [vm] pirq 92
[init -> tz_vmm] [vm] virq 108
[init -> tz_vmm] [vm] major number 254
[init -> tz_vmm] [vm] name "sda1"
[init -> tz_vmm] [vm] device-mapper: ioctl: 4.33.0-ioctl (2015-8-18)
[init -> tz_vmm] [vm] sahara 63ff8000.crypto: SAHARA version 4 initialized
[init -> tz_vmm] [vm] NET: Registered protocol family 17
[init -> tz_vmm] [vm] GENODE_TZ_VMM: skip mx5_cpu_lp_set
[init -> tz_vmm] [vm] imx5_pm_common_init: No DDR LPM support with suspend
-22!
[init -> tz_vmm] [vm] hctosys: unable to open rtc device (rtc0)
[init -> tz_vmm] [vm] clk: Not disabling unused clocks
[init -> tz_vmm] [vm] EXT4-fs (sda1): couldn't mount as ext3 due to
feature incompatibilities
[init -> tz_vmm] [vm] EXT4-fs (sda1): couldn't mount as ext2 due to
feature incompatibilities
[init -> tz_vmm] [vm] EXT4-fs (sda1): recovery complete
[init -> tz_vmm] [vm] EXT4-fs (sda1): mounted filesystem with ordered data
mode. Opts: (null)
[init -> tz_vmm] [vm] VFS: Mounted root (ext4 filesystem) on device 254:0.
[init -> tz_vmm] [vm] devtmpfs: mounted
[init -> tz_vmm] [vm] Freeing unused kernel memory: 140K (8042b000 -
8044e000)
[init -> tz_vmm] [vm] random: nonblocking pool is initialized
INIT: version 2.88 booting
[init -> tz_vmm] [vm] [info] Using makefile-style concurrent boot in
runlevel S.
udevdudevd[150]: starting version 175
[ ok -> tz_vmm] [vm] .
[ ok -> tz_vmm] [vm] [....] Synthesizing the initial hotplug
events...done.
[init -> tz_vmm] [vm] [....] Waiting for /dev to be fully
populated...imx2-wdt 53f98000.wdog: timeout 60 sec (nowayout=0)
[init -> tz_vmm] [vm] usbcore: registered new interface driver usbfs
[init -> tz_vmm] [vm] usbcore: registered new interface driver hub
[init -> tz_vmm] [vm] usbcore: registered new device driver usb
[init -> tz_vmm] [vm] ehci_hcd: USB 2.0 'Enhanced' Host Controller (EHCI)
Driver
[ ok -> tz_vmm] [vm] done.
[ ok -> tz_vmm] [vm] [....] Activating swap...done.
[init -> tz_vmm] [vm] EXT4-fs (sda1): re-mounted. Opts: (null)
[ ok -> tz_vmm] [vm] [....] Cleaning up temporary files... /tmp.
[init -> tz_vmm] [vm] [info] Loading kernel module ledtrig_heartbeat.
[init -> tz_vmm] [vm] FATAL: Module ledtrig_heartbeat not found.
[init -> tz_vmm] [vm] [info] Loading kernel module g_ether.
[init -> tz_vmm] [vm] using random self ethernet address
[init -> tz_vmm] [vm] using random host ethernet address
[init -> tz_vmm] [vm] using self ethernet address: 1a:55:89:a2:69:41
[init -> tz_vmm] [vm] usb0: HOST MAC 2a:cd:e3:c7:c8:0a
[init -> tz_vmm] [vm] usb0: MAC 1a:55:89:a2:69:41
[init -> tz_vmm] [vm] using random self ethernet address
[init -> tz_vmm] [vm] using random host ethernet address
[init -> tz_vmm] [vm] g_ether gadget: Ethernet Gadget, version: Memorial
Day 2008
[init -> tz_vmm] [vm] g_ether gadget: g_ether ready
[init -> tz_vmm] [vm] g_ether gadget: high-speed config #1: CDC Ethernet
(ECM)
[ ok -> tz_vmm] [vm] [....] Activating lvm and md swap...done.
[init -> tz_vmm] [vm] [....] Checking file systems...fsck from util-linux
2.20.1
[ ok -> tz_vmm] [vm] done.
[ ok -> tz_vmm] [vm] [....] Mounting local filesystems...done.
[ ok -> tz_vmm] [vm] [....] Activating swapfile swap...done.
[ ok -> tz_vmm] [vm] [....] Cleaning up temporary files....
[ ok -> tz_vmm] [vm] [....] Setting kernel variables ...done.
interface usb0 already configured
[ ok -> tz_vmm] [vm] done.
[ ok -> tz_vmm] [vm] [....] Cleaning up temporary files....
[init -> tz_vmm] [vm] NET: Registered protocol family 10
INIT: Entering runlevel: 2
[init -> tz_vmm] [vm] [info] Using makefile-style concurrent boot in
runlevel 2.
[ ok -> tz_vmm] [vm] [....] Starting enhanced syslogd: rsyslogd.
[ ok -> tz_vmm] [vm] [....] Starting periodic command scheduler: cron.
[ ok -> tz_vmm] [vm] [....] Starting OpenBSD Secure Shell server: sshd.
[init -> tz_vmm] [vm]
[init -> tz_vmm] [vm] Debian GNU/Linux 7 usbarmory console
[init -> tz_vmm] [vm]
Martin Stein
2016-05-17 11:09:24 UTC
Permalink
Hi Yevgeny,

In general, I can recommend you to have a look at the article [3]. It
gives information regarding nearly all the topics that you address.
So I was able to run Genode on USB Armory, and ssh into it,
and it appears to me that I’m interacting with Linux Virtual Machine. If
it is a Virtual Machine,
No, it is the Normal World of ARM Trustzone. It might be misleading that
we use the Genode VM-Session interface to control the Normal World but
the underlying Trustzone technology is still no Virtualization but
merely a hardware separation.
then are there any tools available within that
VM that I can use to talk to the outside of the Linux VM, or at least
somehow prove/demonstrate that the Linux VM I’m currently in is running
atop of Genode?
Yes, there are. You can use the Secure Monitor Call or SMC instruction
of ARM for that. Actually, it is already used by your Linux for the
para-virtualized SD-card [1] and UART [2]. Using SMCs, you can also
install shared buffers as done in [1].
The other question is about the Kernel. It appears as ARM Linux Kernel
during boot. Is it a standard Linux Kernel or especially customized one
to support Genode? I just need to verify this.
Just to be really clear, do you mean the initial Kernel that boots the
Genode hypervisor or the Kernel that is started by Genode in the Normal
World ([init -> tz_vmm] [vm] ...) ?

Assuming you mean the one in the Normal World, it is a patched Linux
4.2.3. You can see my two Armory patches here [4].
Can you provide any tips on how to bring up any other microkernels fully
supported by Genode that I can run on USB Armory?
There are generally three main building sites when porting another
kernel to the Normal World of tz_vmm. First, the monitor component [5]
acts as bootloader for the Normal World OS. This bootloader behavior
would have to be adapted to the new OS's expectations.

Second, the Normal World OS currently has to cooperate in some ways with
the Secure World. Mainly, it must not modify clock or power controls in
a way that affects the Genode hypervisor because these controls are not
protected yet.

Third, you have to check whether your OS attempts to use devices that
are protected. If they are mandatory, i.e. you can't skip them, you can
para-virtualize them. As mentioned above, for SDHC and UART, Genode
already provides a para-virtualized interface.
If there are no other
options available besides using the default Linux kernel that comes with
the tz_vmm, then is there any other board that you can recommend me to
use to run Genode with fully supported microkernels, as preparation for
seL4?
Could you please explain this a bit further? I don't know what seL4 has
to do with a Trustzone scenario. What is your final goal?

Cheers,
Martin

[1]
https://github.com/m-stein/linux/blob/genode_hw_usb_armory_tz_vmm/drivers/block/genode.c

[2]
https://github.com/m-stein/linux/blob/genode_hw_usb_armory_tz_vmm/drivers/tty/serial/genode.c
https://github.com/m-stein/linux/blob/genode_hw_usb_armory_tz_vmm/arch/arm/include/debug/imx.S

[3] https://genode.org/documentation/articles/usb_armory

[4] https://github.com/m-stein/linux/commits/genode_hw_usb_armory_tz_vmm

[5]
https://github.com/genodelabs/genode/tree/master/repos/os/src/server/tz_vmm
Martin Stein
2016-05-17 13:09:52 UTC
Permalink
Post by Martin Stein
Just to be really clear, do you mean the initial Kernel that boots the
Genode hypervisor or the Kernel that is started by Genode in the Normal
World ([init -> tz_vmm] [vm] ...) ?
Sorry, I messed up terms: The "initial Kernel that boots the Genode
hypervisor" *is* the hypervisor and it does not "boot" Genode but
*drive* it. Simplified, my question is whether you're talking about the
kernel started in the Secure World or the kernel started in the Normal
World.

Cheers,
Martin

Loading...