seL4 / sel4-tutorials

Tutorials for working with seL4 and/or CAmkES.

Home Page:https://docs.sel4.systems/Tutorials

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Running CAmkES Solution

Jesse-Millwood opened this issue · comments

I tried running the CAmkES solutions and, while everything seems to compile I am having an issue running them:

I started from the begining:

cd ~
mkdir -p camkes-fresh/camkes-solutions; cd camkes-fresh/camkes-solutions
repo init -u https://github.com/SEL4PROJ/sel4-tutorials-manifest -m camkes-solutions.xml
repo sync

I then did a make menuconfig and chose the CapDL Loader and Simple CAmkES Hello World Application. I also made note that it is being built for the x86 PC99 platform.

Then I did a make clean and then a make, it ended with a:

[GEN] /home/jesse/camkes-fresh/camkes-solutions/Makefile
[KERNEL]
 [MKDIR] arch/object
 [PBF_GEN] arch/object/structures.pbf
 [PBF_GEN] plat/machine/hardware.pbf
 [PBF_GEN] 32/mode/api/shared_types.pbf
 [BF_GEN] arch/object/structures_gen.h
 [BF_GEN] plat/machine/hardware_gen.h
 [BF_GEN] 32/mode/api/shared_types_gen.h
 [CPP] src/arch/x86/32/machine_asm.s_pp
 [AS] src/arch/x86/32/machine_asm.o
 [CPP] src/arch/x86/32/traps.s_pp
 [AS] src/arch/x86/32/traps.o
 [CPP] src/arch/x86/32/head.s_pp
 [AS] src/arch/x86/32/head.o
 [TOUCH] sources_list_updated
 [CPP_GEN] kernel_all.c
 [CPP] kernel_all.c_pp
 [Circular includes] kernel_all.c_pp
 [CP] kernel_final.c
 [CC] kernel_final.s
 [AS] kernel.o
l [CPP] linker.lds_pp
 [LD] kernel.elf
 [STRIP] kernel.elf.strip
 [STAGE] kernel.elf
[KERNEL] done.
[libs/libsel4] building...
 [GEN] include/interfaces/sel4_client.h
 [PBF_GEN] include/sel4/types_32.pbf
 [GEN] include/sel4/types_gen.h
 [GEN] include/sel4/syscall.h
 [GEN] include/sel4/invocation.h
 [GEN] arch_include/x86/sel4/arch/invocation.h
 [PBF_GEN] include/sel4/shared_types_32.pbf
 [GEN] include/sel4/shared_types_gen.h
 [GEN] sel4_arch_include/ia32/sel4/sel4_arch/invocation.h
 [PBF_GEN] include/sel4/sel4_arch/types.pbf
 [GEN] sel4_arch_include/ia32/sel4/sel4_arch/types_gen.h
 [HEADERS]
 [STAGE] sel4/*
 [STAGE] api/*
 [STAGE] interfaces/*
 [STAGE] sel4/*
 [STAGE] interfaces/*
 [STAGE] sel4/*
 [STAGE] interfaces/*
 [STAGE] sel4/*
 [STAGE] sel4/*
 [STAGE] interfaces/*
 [STAGE] sel4/*
 [STAGE] autoconf.h
 [CC] src/sel4_bootinfo.o
 [AR] libsel4.a objs: src/sel4_bootinfo.o   
 [STAGE] libsel4.a
[libs/libsel4] done.
[libs/libmuslc] building...
[libs/libmuslc] done.
[libs/libcpio] building...
 [HEADERS]
 [STAGE] cpio/*
 [STAGE] autoconf.h
 [CC] src/cpio.o
 [AR] libcpio.a objs: src/cpio.o   
 [STAGE] libcpio.a
[libs/libcpio] done.
[libs/libelf] building...
 [HEADERS]
 [STAGE] elf/*
 [STAGE] autoconf.h
 [CC] src/elf.o
 [CC] src/elf32.o
 [CC] src/elf64.o
 [AR] libelf.a objs: src/elf.o src/elf32.o src/elf64.o   
 [STAGE] libelf.a
[libs/libelf] done.
[libs/libutils] building...
 [HEADERS]
 [STAGE] utils/*
 [STAGE] utils/*
 [STAGE] autoconf.h
 [CC] src/zf_log.o
 [CC] src/xml.o
 [CC] src/list.o
 [CC] src/debug.o
 [CC] src/arch/x86/stack.o
 [AR] libutils.a objs: src/zf_log.o src/xml.o src/list.o src/debug.o src/arch/x86/stack.o   
 [STAGE] libutils.a
[libs/libutils] done.
[libs/libsel4vka] building...
 [HEADERS]
 [STAGE] vka/*
 [STAGE] vka/*
 [STAGE] vka/*
 [STAGE] autoconf.h
 [CC] src/debug-vka.o
 [CC] src/null-vka.o
 [AR] libsel4vka.a objs: src/debug-vka.o src/null-vka.o   
 [STAGE] libsel4vka.a
[libs/libsel4vka] done.
[libs/libsel4vspace] building...
 [HEADERS]
 [STAGE] vspace/*
 [STAGE] vspace/*
 [STAGE] autoconf.h
 [CC] src/vspace.o
 [AR] libsel4vspace.a objs: src/vspace.o   
 [STAGE] libsel4vspace.a
[libs/libsel4vspace] done.
[libs/libplatsupport] building...
 [HEADERS]
 [STAGE] platsupport/*
 [STAGE] platsupport/*
 [STAGE] platsupport/*
 [STAGE] autoconf.h
 [CC] src/plat/pc99/pit.o
 [CC] src/plat/pc99/keyboard_chardev.o
 [CC] src/plat/pc99/keyboard_ps2.o
 [CC] src/plat/pc99/keyboard_vkey.o
 [CC] src/plat/pc99/tsc_timer.o
 [CC] src/plat/pc99/ega.o
 [CC] src/plat/pc99/serial.o
 [CC] src/plat/pc99/rtc.o
 [CC] src/plat/pc99/hpet.o
 [CC] src/plat/pc99/chardev.o
 [CC] src/arch/x86/tsc.o
 [CC] src/plat/pc99/acpi/acpi.o
 [CC] src/plat/pc99/acpi/walker.o
 [CC] src/plat/pc99/acpi/browser.o
 [CC] src/plat/pc99/acpi/printer.o
 [CC] src/plat/pc99/acpi/regions.o
 [CC] src/serial.o
 [AR] libplatsupport.a objs: src/plat/pc99/pit.o src/plat/pc99/keyboard_chardev.o src/plat/pc99/keyboard_ps2.o src/plat/pc99/keyboard_vkey.o src/plat/pc99/tsc_timer.o src/plat/pc99/ega.o src/plat/pc99/serial.o src/plat/pc99/rtc.o src/plat/pc99/hpet.o src/plat/pc99/chardev.o src/arch/x86/tsc.o src/plat/pc99/acpi/acpi.o src/plat/pc99/acpi/walker.o src/plat/pc99/acpi/browser.o src/plat/pc99/acpi/printer.o src/plat/pc99/acpi/regions.o src/serial.o   
 [STAGE] libplatsupport.a
[libs/libplatsupport] done.
[libs/libsel4simple] building...
 [HEADERS]
 [STAGE] simple/*
 [STAGE] simple/*
 [STAGE] autoconf.h
 [CC] src/simple.o
 [AR] libsel4simple.a objs: src/simple.o   
 [STAGE] libsel4simple.a
[libs/libsel4simple] done.
[libs/libsel4debug] building...
 [HEADERS]
 [STAGE] sel4debug/*
 [STAGE] sel4debug/*
 [STAGE] sel4debug/*
 [STAGE] autoconf.h
 [CC] src/register_dump.o
 [CC] src/caps.o
 [CC] src/stack.o
 [CC] src/trace.o
 [CC] src/backtrace.o
 [CC] src/identity.o
 [CC] src/alloc.o
 [CC] src/faulthandler.o
 [CC] src/bootinfo.o
 [AR] libsel4debug.a objs: src/register_dump.o src/caps.o src/stack.o src/trace.o src/backtrace.o src/identity.o src/alloc.o src/faulthandler.o src/bootinfo.o   
 [STAGE] libsel4debug.a
[libs/libsel4debug] done.
[libs/libsel4simple-default] building...
 [HEADERS]
 [STAGE] simple-default/*
 [STAGE] autoconf.h
 [CC] src/libsel4simple-default.o
 [CC] src/arch/x86/default.o
 [AR] libsel4simple-default.a objs: src/libsel4simple-default.o src/arch/x86/default.o   
 [STAGE] libsel4simple-default.a
[libs/libsel4simple-default] done.
[libs/libsel4platsupport] building...
 [HEADERS]
 [STAGE] sel4platsupport/*
 [STAGE] sel4platsupport/*
 [STAGE] sel4platsupport/*
 [STAGE] autoconf.h
 [ASM] src/sel4_arch/ia32/sel4_crt0.o
 [ASM] src/sel4_arch/ia32/crt0.o
 [CC] src/timer_common.o
 [CC] src/common.o
 [CC] src/init.o
 [CC] src/io.o
 [CC] src/device.o
 [CC] src/serial.o
 [CC] src/arch/x86/io_port_ops.o
 [CC] src/plat/pc99/pit.o
 [CC] src/plat/pc99/device.o
 [CC] src/plat/pc99/hpet.o
 [CC] src/plat/pc99/timer.o
 [AR] libsel4platsupport.a objs:src/sel4_arch/ia32/sel4_crt0.o src/sel4_arch/ia32/crt0.o src/timer_common.o src/common.o src/init.o src/io.o src/device.o src/serial.o src/arch/x86/io_port_ops.o src/plat/pc99/pit.o src/plat/pc99/device.o src/plat/pc99/hpet.o src/plat/pc99/timer.o   
 [STAGE] libsel4platsupport.a
[libs/libsel4platsupport] done.
[libs/libsel4utils] building...
 [HEADERS]
 [STAGE] sel4utils/*
 [STAGE] sel4utils/*
 [STAGE] sel4utils/*
 [STAGE] autoconf.h
 [CC] src/mapping.o
 [CC] src/elf.o
 [CC] src/stack.o
 [CC] src/page_dma.o
 [CC] src/profile.o
 [CC] src/iommu_dma.o
 [CC] src/strerror.o
 [CC] src/process.o
 [CC] src/thread.o
 [CC] src/vspace/client_server_vspace.o
 [CC] src/vspace/vspace.o
 [CC] src/vspace/bootstrap.o
 [CC] src/irq_server/irq_server.o
 [CC] src/serial_server/parentapi.o
 [CC] src/serial_server/clientapi.o
 [CC] src/serial_server/server.o
 [CC] src/sel4_arch/ia32/arch.o
 [AR] libsel4utils.a objs: src/mapping.o src/elf.o src/stack.o src/page_dma.o src/profile.o src/iommu_dma.o src/strerror.o src/process.o src/thread.o src/vspace/client_server_vspace.o src/vspace/vspace.o src/vspace/bootstrap.o src/irq_server/irq_server.o src/serial_server/parentapi.o src/serial_server/clientapi.o src/serial_server/server.o src/sel4_arch/ia32/arch.o   
 [STAGE] libsel4utils.a
[libs/libsel4utils] done.
[libs/libsel4muslcsys] building...
 [HEADERS]
 [STAGE] arch_stdio.h
 [STAGE] autoconf.h
 [CC] src/sys_yield.o
 [CC] src/sys_thread.o
 [CC] src/sys_morecore.o
 [CC] src/vsyscall.o
 [CC] src/sys_stubs.o
 [CC] src/sys_io.o
 [CC] src/sys_exit.o
 [AR] libsel4muslcsys.a objs: src/sys_yield.o src/sys_thread.o src/sys_morecore.o src/vsyscall.o src/sys_stubs.o src/sys_io.o src/sys_exit.o   
 [STAGE] libsel4muslcsys.a
[libs/libsel4muslcsys] done.
[libs/libsel4camkes] building...
 [HEADERS]
 [STAGE] camkes/*
 [STAGE] autoconf.h
 [ASM] src/arch/x86/crt0.o
 [CC] src/error.o
 [CC] src/io.o
 [CC] src/main.o
 [CC] src/dma.o
 [CC] src/allocator.o
 [AR] libsel4camkes.a objs:src/arch/x86/crt0.o src/error.o src/io.o src/main.o src/dma.o src/allocator.o   
 [STAGE] libsel4camkes.a
[libs/libsel4camkes] done.
[libs/libsel4muslccamkes] building...
 [HEADERS]
 [STAGE] arch_stdio.h
 [STAGE] autoconf.h
 [CC] src/sys_yield.o
 [CC] src/sys_socket.o
 [CC] src/sys_signal.o
 [CC] src/sys_epoll.o
 [CC] src/sys_select.o
 [CC] src/sys_thread.o
 [CC] src/sys_morecore.o
 [CC] src/vsyscall.o
 [CC] src/sys_stubs.o
 [CC] src/sys_io.o
 [CC] src/sys_exit.o
 [CC] src/sys_clock.o
 [CC] src/sys_pause.o
 [AR] libsel4muslccamkes.a objs: src/sys_yield.o src/sys_socket.o src/sys_signal.o src/sys_epoll.o src/sys_select.o src/sys_thread.o src/sys_morecore.o src/vsyscall.o src/sys_stubs.o src/sys_io.o src/sys_exit.o src/sys_clock.o src/sys_pause.o   
 [STAGE] libsel4muslccamkes.a
[libs/libsel4muslccamkes] done.
[libs/libsel4sync] building...
 [HEADERS]
 [STAGE] sync/*
 [STAGE] autoconf.h
 [CC] src/recursive_mutex.o
 [AR] libsel4sync.a objs: src/recursive_mutex.o   
 [STAGE] libsel4sync.a
[libs/libsel4sync] done.
[apps/hello-camkes-1] building...
/home/jesse/camkes-fresh/camkes-solutions/tools/camkes/camkes.mk:126: /home/jesse/camkes-fresh/camkes-solutions/build/x86/pc99/hello-camkes-1/camkes-gen.mk: No such file or directory
 [GEN] camkes-gen.mk
 [HEADERS]
 [STAGE] autoconf.h
 [CP] echo.c
 [GEN] Echo.h
 [GEN] camkes.h
 [GEN] Echo.c
 [GEN] hello_seL4RPCCall.c
 [CC] echo.o
 [CC] Echo.o
 [CC] hello_seL4RPCCall.o
 [GEN] linker.lds
 [LD] echo.instance.bin
 [CP] client.c
 [GEN] Client.h
 [GEN] camkes.h
 [GEN] Client.c
 [GEN] hello_seL4RPCCall.c
 [CC] client.o
 [CC] Client.o
 [CC] hello_seL4RPCCall.o
 [GEN] linker.lds
 [LD] client.instance.bin
 [OBJCOPY] echo.instance-copy.bin
 [CP] echo_group_bin
 [STAGE] echo_group_bin
 [OBJCOPY] client.instance-copy.bin
 [CP] client_group_bin
 [STAGE] client_group_bin
 [GEN] hello-camkes-1.cdl
[apps/hello-camkes-1] done.
[parse-capDL] building...
make: Entering directory '/home/jesse/camkes-fresh/camkes-solutions/projects/capdl/capDL-tool'
stack setup
stack will use a sandboxed GHC it installed
For more information on paths, see 'stack path' and 'stack exec env'
To use this GHC and packages outside of a project, consider using:
stack ghc, stack ghci, stack runghc, or stack exec
stack build --only-dependencies
make: Leaving directory '/home/jesse/camkes-fresh/camkes-solutions/projects/capdl/capDL-tool'
make: Entering directory '/home/jesse/camkes-fresh/camkes-solutions/projects/capdl/capDL-tool'
make: Nothing to be done for 'all'.
make: Leaving directory '/home/jesse/camkes-fresh/camkes-solutions/projects/capdl/capDL-tool'
make: Entering directory '/home/jesse/camkes-fresh/camkes-solutions/projects/capdl/capDL-tool'
stack install
Copying from /home/jesse/camkes-fresh/camkes-solutions/projects/capdl/capDL-tool/.stack-work/install/x86_64-linux/lts-7.10/8.0.1/bin/parse-capDL to /home/jesse/camkes-fresh/camkes-solutions/projects/capdl/capDL-tool/parse-capDL

Copied executables to /home/jesse/camkes-fresh/camkes-solutions/projects/capdl/capDL-tool:
- parse-capDL

WARNING: Installation path /home/jesse/camkes-fresh/camkes-solutions/projects/capdl/capDL-tool not found on the PATH environment variable
make: Leaving directory '/home/jesse/camkes-fresh/camkes-solutions/projects/capdl/capDL-tool'
[parse-capDL] done.
[cpio-strip] building...
 [CC] cpio-strip
[cpio-strip] done.
[apps/capdl-loader-experimental] building...
 [HEADERS]
 [STAGE] debug.h
 [STAGE] capdl_spec.h
 [STAGE] capdl.h
 [STAGE] autoconf.h
 [GEN] capdl_spec.c
 [CPIO] archive.o
  [CPIO] client_group_bin
  [CPIO] echo_group_bin
 [CC] src/main.o
 [CC] /home/jesse/camkes-fresh/camkes-solutions/build/x86/pc99/capdl-loader-experimental/src/capdl_spec.o
 [LINK] capdl-loader-experimental.elf
 [STAGE] capdl-loader-experimental.bin
 [STAGE] capdl-loader-experimental
[apps/capdl-loader-experimental] done.
[GEN_IMAGE] capdl-loader-experimental-image

Then to run it I ran:

qemu-system-i386 -m 512 -nographic -kernel images/kernel-ia32-pc99 -initrd images/capdl-loader-experimental-image-ia32-pc99

It printed out:

Boot config: parsing cmdline 'images/kernel-ia32-pc99 '
Boot config: console_port = 0x3f8
Boot config: debug_port = 0x3f8
Boot config: disable_iommu = false
Warning: Your kernel was not compiled for the current microarchitecture.
Parsing GRUB physical memory map
	Physical Memory Region from 0 size 9fc00 type 1
	Physical Memory Region from 9fc00 size 400 type 2
	Physical Memory Region from f0000 size 10000 type 2
	Physical Memory Region from 100000 size 1fee0000 type 1
Adding physical memory region 0x100000-0x1fc00000
	Physical Memory Region from 1ffe0000 size 20000 type 2
	Physical Memory Region from fffc0000 size 40000 type 2
Kernel loaded to: start=0x100000 end=0x13d000 size=0x3d000 entry=0x10003a
ACPI: RSDP paddr=0xf6460
ACPI: RSDP vaddr=0xdfcf6460
ACPI: RSDT paddr=0x1ffe16ee
ACPI: RSDT vaddr=0xdffe16ee
ACPI: FADT paddr=0x1ffe0c14
ACPI: FADT vaddr=0xdffe0c14
ACPI: FADT flags=0x80a5
ACPI: 0 IOMMUs detected
ACPI: MADT paddr=0x1ffe163e
ACPI: MADT vaddr=0xdffe163e
ACPI: MADT apic_addr=0xfee00000
ACPI: MADT flags=0x1
ACPI: MADT_APIC apic_id=0x0
ACPI: MADT_IOAPIC ioapic_id=0 ioapic_addr=0xfec00000 gsib=0
ACPI: MADT_ISO bus=0 source=0 gsi=2 flags=0x0
ACPI: MADT_ISO bus=0 source=5 gsi=5 flags=0xd
ACPI: MADT_ISO bus=0 source=9 gsi=9 flags=0xd
ACPI: MADT_ISO bus=0 source=10 gsi=10 flags=0xd
ACPI: MADT_ISO bus=0 source=11 gsi=11 flags=0xd
ACPI: 1 CPU(s) detected
Detected 1 IOAPICs, but configured to use PIC instead
Detected 1 boot module(s):
  module #0: start=0x13e000 end=0x259794 size=0x11b794 name='images/capdl-loader-experimental-image-ia32-pc99'
ELF-loading userland images from boot modules:
size=0x1d1000 v_entry=0x804ef04 v_start=0x8048000 v_end=0x8219000 p_start=0x25a000 p_end=0x42b000
Moving loaded userland images to final location: from=0x25a000 to=0x13d000 size=0x1d1000
Starting node #0 with APIC ID 0
Booting all finished, dropped to user space
Assertion failed: free_slot_end - free_slot_start >= CONFIG_CAPDL_LOADER_MAX_OBJECTS (/home/jesse/camkes-fresh/camkes-solutions/apps/capdl-loader-experimental/src/main.c: parse_bootinfo: 574)
Ignoring call to sys_rt_sigprocmask
Ignoring call to sys_gettid
sys_tkill assuming self kill

This doesn't seem to be working. I looked at the apps/hello-camkes-1/ files and it seems that there should be at least something printing. The line about the "Assertion failed" seems concerning.

Is this not the proper way to build the solutions?

I just finished the sel4-tutorials and that is how it was handled there it seems.

Thanks

Also I am on Ubuntu 16.04 and have followed the steps to set my machine up with the dependencies.

ahh I think I figured it out.
I used the make ia32_hello-camkes-1_defconfig instead of make menuconfig
There seems to be a bit of a discrepency between the build instructions presented in the CAmkESTutorial.pdf and the instructions in the https://github.com/seL4/camkes-tool/blob/master/docs/index.md document. Is the make xxx_defconfig supposed to be used in conjunction with make menuconfig? I am new to these tools, I want to make sure I get the workflow down

I see now if I run make ia32_hello-camkes-1_defconfig or make arm_hello-camkes-1_defconfig and then make menuconfig the configurations are changed. I thought it was one or the other, I was mistaken.