Hello,
first, thanks for your effort guys. I'm very glad to see that a microkernel architecture/framework is exists in C++ :-)
A short description about me: I'm C++ enthusiasts (C++ User Group Duesseldorf and Meeting C++ stuff member) and also very interested about operating systems. I pay attention to security feature. For some year, Blackberry announced that they discontinued BB10. I was very disappointed about that because BB10 is developed in Qt/C++ and focuses in security because they based on a microkernel architecture from QNX as operating system. After the announcement from Blackberry, I was thinking about to write a microkernel architecture in C++ but I checked if they exists a microkernel architecture in C++ and I was very happy about that they really exists. I started first with Fiasco.OC but I found out that in Genode it uses the new C++ Standard so here I'm :-)
I started a month ago with Gnode hello tutorial and play around with them. Therefore, I call myself a newbie :-) But at the end, I will use Genode on my laptop (like turmvilla example) and start to develop some application on it :-). But first, I think about to start with a small server. The host provider that I use, use a QEMU with KVM enable as virtual server. So it is not possilbe to use NOVA on it because of the KVM enabled featuer (I think) but Fiasco.OC works.
The problem: So I try to build/create a image from the lighttpd example with Fiasco.OC kernel. The image started but the lighttpd does not work. Also the hello tutorial with Fiasco.OC does not work anymore.
I checked the issue tracker on github but I didn't find any issue about that.
What I figure out: - Hello tutorial When I increase in the hello tutorial the "default caps" from 50 to 54 in the config, then the tutorial is working with Fiasco.OC kernel. - lighttpd Here I must first "move" the timer service in the config (see my commit on github [1]) then it works with the NOVA kernel. With Fiasco.OC I get following error: Error: nic_drv -> : environment ROM session denied (label="device_pd", ram_quota=6144, cap_quota=3, diag=0) I try to add "device_pd" in the boot modules because it is missing in the rom fs but device_pd is not compile for the Fiasco.OC, only for NOVA. I found out following in: genode-src/repos/os/src/drivers/platform/spec/x86/device_pd/target.mk It looks like device_pd is only build for NOVA.
Is this a known issue or somebody working on it ? Or works the lighttpd example with Fiasco.OC kernel for anyone ? If you still need additional infos, let me know.
Regards, Jörg
[1] https://github.com/Bjoe/genode/commit/8522e1b06c62e33988a03c5f308f16fad5250d...
Hi Jörg,
thank you for introducing yourself and for your interest in Genode!
We added the -no-kvm option in '<build-dir>/etc/build.conf' by default a few years ago when Qemu/KVM did not implement all the features required by NOVA. There should be a good chance that NOVA works with recent Qemu versions. Could you give NOVA on Qemu/KVM another spin and report the specific problem you encountered?
In general, I warmly recommend using NOVA over Fiasco.OC as NOVA is the most commonly used (and thoroughly tested) Genode base platform on x86.
I think that this issue is fixed in the current master branch, specifically by commit [1]. Prior this change, Genode's core consumed one additional (dataspace) capability per RPC object when running on Fiasco.OC, which remained undetected until we added the capability accounting in 17.05.
[1] https://github.com/genodelabs/genode/commit/ba9ef7fdee07c42bc772c8b515bc9d80...
The position of the timer <start> node within the config should not make any difference.
I just tried out the lighttpd.run script with KERNEL=foc on x86_32. It works when adding the '<default caps="100"/>' declaration. Opening 'http://localhost:5555/' in the web browser shows the "Hello Genode" page.
Admittedly, the log messages look a bit scary but this output is normal on Fiasco.OC where the platform driver does not support device PDs (IOMMU). We should probably dim the noise a bit. ;-)
Cheers Norman
Hi Norman,
Am Dienstag, 25. Juli 2017 13:45:45 CEST schrieb Norman Feske:
Ok, I build (after I update to latest master. See below) lighttp with the NOVA kernel. With 64bit, the vServer reboots every time, with 32bit the vServer hangs. But with Fiasco.OC it works! Unfortunately I cannot add any output, it is in a special remote console from the host provider. But I added a part of the dmesg output from the Linux rescue system [2]. Maybe somebody can "see" the problem.
In general, I warmly recommend using NOVA over Fiasco.OC as NOVA is the most commonly used (and thoroughly tested) Genode base platform on x86.
Ok. May I ask the recommended kernel for the following embedded board Rpi/pandaboard/wand quad ? It looks like there is only Fiasco.OC, because Fiasco.OC has ARM support, or?
Ok, I checked out the lastet master [1]. Now it works. Great. Thank you for the hint. This means, master is always stable ? I was expected that the tagged version is a stable release version.
[1] https://github.com/genodelabs/genode/commit/0d1be4abe2294155e36bc0eb0c1cd614...
Ok, no problem, I understand :-).
Cheers Jörg
[2] CPU1: Intel(R) Xeon(R) CPU E5-26xx (Sandy Bridge) Intel(R) PRO/1000 Network Driver [ 0.000000] x86/fpu: Supporting XSAVE feature 0x001: 'x87 floating point registers' [ 0.000000] x86/fpu: Supporting XSAVE feature 0x002: 'SSE registers' [ 0.000000] x86/fpu: Supporting XSAVE feature 0x004: 'AVX registers' [ 0.000000] x86/fpu: xstate_offset[2]: 576, xstate_sizes[2]: 256 [ 0.000000] x86/fpu: Enabled xstate features 0x7, context size is 832 bytes, using 'standard' format. [ 0.000000] e820: BIOS-provided physical RAM map: [ 0.000000] BIOS-e820: [mem 0x0000000000000000-0x000000000009fbff] usable [ 0.000000] BIOS-e820: [mem 0x000000000009fc00-0x000000000009ffff] reserved [ 0.000000] BIOS-e820: [mem 0x00000000000f0000-0x00000000000fffff] reserved [ 0.000000] BIOS-e820: [mem 0x0000000000100000-0x000000003ffdffff] usable [ 0.000000] BIOS-e820: [mem 0x000000003ffe0000-0x000000003fffffff] reserved [ 0.000000] BIOS-e820: [mem 0x00000000feffc000-0x00000000feffffff] reserved [ 0.000000] BIOS-e820: [mem 0x00000000fffc0000-0x00000000ffffffff] reserved [ 0.000000] NX (Execute Disable) protection: active [ 0.000000] SMBIOS 2.8 present. [ 0.000000] DMI: Hetzner vServer, BIOS 1.8.2 04/01/2014 [ 0.000000] Hypervisor detected: KVM [ 0.000000] e820: update [mem 0x00000000-0x00000fff] usable ==> reserved [ 0.000000] e820: remove [mem 0x000a0000-0x000fffff] usable [ 0.000000] e820: last_pfn = 0x3ffe0 max_arch_pfn = 0x400000000 [ 0.000000] MTRR default type: write-back [ 0.000000] MTRR fixed ranges enabled: [ 0.000000] 00000-9FFFF write-back [ 0.000000] A0000-BFFFF uncachable [ 0.000000] C0000-FFFFF write-protect [ 0.000000] MTRR variable ranges enabled: [ 0.000000] 0 base 0080000000 mask FF80000000 uncachable [ 0.000000] 1 disabled [ 0.000000] 2 disabled [ 0.000000] 3 disabled [ 0.000000] 4 disabled [ 0.000000] 5 disabled [ 0.000000] 6 disabled [ 0.000000] 7 disabled [ 0.000000] x86/PAT: Configuration [0-7]: WB WC UC- UC WB WC UC- WT
[ 0.000000] Base memory trampoline at [ffff880000099000] 99000 size 24576 [ 0.000000] BRK [0x01a44000, 0x01a44fff] PGTABLE [ 0.000000] BRK [0x01a45000, 0x01a45fff] PGTABLE [ 0.000000] BRK [0x01a46000, 0x01a46fff] PGTABLE [ 0.000000] BRK [0x01a47000, 0x01a47fff] PGTABLE [ 0.000000] RAMDISK: [mem 0x3fbcd000-0x3feadfff] [ 0.000000] ACPI: Early table checksum verification disabled [ 0.000000] ACPI: RSDP 0x00000000000F62F0 000014 (v00 BOCHS ) [ 0.000000] ACPI: RSDT 0x000000003FFE16EA 000030 (v01 BOCHS BXPCRSDT 00000001 BXPC 00000001) [ 0.000000] ACPI: FACP 0x000000003FFE15C6 000074 (v01 BOCHS BXPCFACP 00000001 BXPC 00000001) [ 0.000000] ACPI: DSDT 0x000000003FFE0040 001586 (v01 BOCHS BXPCDSDT 00000001 BXPC 00000001) [ 0.000000] ACPI: FACS 0x000000003FFE0000 000040 [ 0.000000] ACPI: APIC 0x000000003FFE163A 000078 (v01 BOCHS BXPCAPIC 00000001 BXPC 00000001) [ 0.000000] ACPI: HPET 0x000000003FFE16B2 000038 (v01 BOCHS BXPCHPET 00000001 BXPC 00000001) [ 0.000000] ACPI: Local APIC address 0xfee00000 [ 0.000000] No NUMA configuration found [ 0.000000] Faking a node at [mem 0x0000000000000000-0x000000003ffdffff] [ 0.000000] NODE_DATA(0) allocated [mem 0x3ffdc000-0x3ffdffff] [ 0.000000] kvm-clock: Using msrs 4b564d01 and 4b564d00 [ 0.000000] kvm-clock: cpu 0, msr 0:3ffda001, primary cpu clock [ 0.000000] kvm-clock: using sched offset of 19910977039 cycles [ 0.000000] clocksource: kvm-clock: mask: 0xffffffffffffffff max_cycles: 0x1cd42e4dffb, max_idle_ns: 881590591483 ns [ 0.000000] Zone ranges: [ 0.000000] DMA [mem 0x0000000000001000-0x0000000000ffffff] [ 0.000000] DMA32 [mem 0x0000000001000000-0x000000003ffdffff] [ 0.000000] Normal empty [ 0.000000] Movable zone start for each node [ 0.000000] Early memory node ranges [ 0.000000] node 0: [mem 0x0000000000001000-0x000000000009efff] [ 0.000000] node 0: [mem 0x0000000000100000-0x000000003ffdffff] [ 0.000000] Initmem setup node 0 [mem 0x0000000000001000-0x000000003ffdffff] [ 0.000000] On node 0 totalpages: 262014 [ 0.000000] DMA zone: 64 pages used for memmap [ 0.000000] DMA zone: 21 pages reserved [ 0.000000] DMA zone: 3998 pages, LIFO batch:0 [ 0.000000] DMA32 zone: 4032 pages used for memmap [ 0.000000] DMA32 zone: 258016 pages, LIFO batch:31 [ 0.000000] ACPI: PM-Timer IO Port: 0x608 [ 0.000000] ACPI: Local APIC address 0xfee00000 [ 0.000000] ACPI: LAPIC_NMI (acpi_id[0xff] dfl dfl lint[0x1]) [ 0.000000] IOAPIC[0]: apic_id 0, version 17, address 0xfec00000, GSI 0-23 [ 0.000000] ACPI: INT_SRC_OVR (bus 0 bus_irq 0 global_irq 2 dfl dfl) [ 0.000000] ACPI: INT_SRC_OVR (bus 0 bus_irq 5 global_irq 5 high level) [ 0.000000] ACPI: INT_SRC_OVR (bus 0 bus_irq 9 global_irq 9 high level) [ 0.000000] ACPI: INT_SRC_OVR (bus 0 bus_irq 10 global_irq 10 high level) [ 0.000000] ACPI: INT_SRC_OVR (bus 0 bus_irq 11 global_irq 11 high level) [ 0.000000] ACPI: IRQ0 used by override. [ 0.000000] ACPI: IRQ5 used by override. [ 0.000000] ACPI: IRQ9 used by override. [ 0.000000] ACPI: IRQ10 used by override. [ 0.000000] ACPI: IRQ11 used by override. [ 0.000000] Using ACPI (MADT) for SMP configuration information [ 0.000000] ACPI: HPET id: 0x8086a201 base: 0xfed00000 [ 0.000000] smpboot: Allowing 1 CPUs, 0 hotplug CPUs [ 0.000000] e820: [mem 0x40000000-0xfeffbfff] available for PCI devices [ 0.000000] Booting paravirtualized kernel on KVM [ 0.000000] clocksource: refined-jiffies: mask: 0xffffffff max_cycles: 0xffffffff, max_idle_ns: 7645519600211568 ns [ 0.000000] setup_percpu: NR_CPUS:128 nr_cpumask_bits:128 nr_cpu_ids:1 nr_node_ids:1 [ 0.000000] percpu: Embedded 34 pages/cpu @ffff88003f800000 s102296 r8192 d28776 u2097152 [ 0.000000] pcpu-alloc: s102296 r8192 d28776 u2097152 alloc=1*2097152 [ 0.000000] pcpu-alloc: [0] 0 [ 0.000000] KVM setup async PF for cpu 0 [ 0.000000] Built 1 zonelists in Node order, mobility grouping on. Total pages: 257897 [ 0.000000] Policy zone: DMA32
Hi Jörg,
unfortunately, I am unable to diagnose the vserver issue.
these boards are supported also by the so-called "base-hw" kernel, which is a custom kernel that is especially designed for Genode. It is described in detail in Section 7.7 of the "Genode Foundations" book [1].
[1] http://genode.org/documentation/genode-foundations-17-05.pdf
There is also work in progress (planned for the upcoming release 17.08) to use the seL4 kernel on a wider variety of platforms including x86_64 and ARM.
This means, master is always stable ? I was expected that the tagged version is a stable release version.
The master branch is considered stable. It is updated from the staging branch not before staging passes our regular QA including a large suite of automated tests. A release is a snapshot of the master branch accompanied with documentation [2] that describes the rationale of the development during the release cycle. To learn more about the flow of development, please refer to Section 5.5 of the book mentioned above.
[2] http://genode.org/documentation/release-notes/index
Cheers Norman