caps zonder size limit? invoke ipc: try sync; try receiver memory; try caller memory; fail. memories map: top - lcd - keyboard - sound - led - udc - battery - beeper - msc - nand - filesystem - network - top session manager - - user session - - - program container - - - - driver emulation - - - - driver emulation - - - - program - - - program container - - - - driver emulation - - - - program - - user session ... te doen: - caps in init met een cap per process - die cap bevat caps in target memory met een cap per service - die cap bevat een user van de service - sysreq is geen aangeboden service, usbfs wel - sysreq schakelt tussen running processes incl. user switching. - display interface: put pixel commando - typewriter: print toetsen op scherm; shell? - terminal - emulaties automatisch per proces - start programma van filesystem - nand driver - filesystems met backing store Boot process: - bootinit and filesystem (and backing store) are started. - bootinit starts run.elf and loads init.elf. - run starts init. - init loads init.config and executes it. - during that process, the initial programs are killed. Order: run.elf init.elf init.config load.elf drivers emulations programs init.config is a script: # load = load a file into memory. Don't use this after killbootthreads. load session = session.config load driver_lcd = lcd.elf load driver_buzzer = buzzer.elf load driver_gpio = gpio.elf load driver_audio = audio.elf load driver_udc = udc.elf load driver_nand = nand.elf load emu_lcd = emu_display.elf load emu_buzzer = emu_buzzer.elf load emu_keyboard = emu_keyboard.elf load emu_audio = emu_audio.elf load emu_udc = emu_udc.elf # killbootthreads destroy bootinit, bootfs and bootstore. killbootthreads # receive = ( [, ]) prepare to accept a capability from a named program. receive display = driver_lcd (display) receive display_bright = driver_lcd (setting) receive buzzer = driver_buzzer (buzzer) receive keyboard = driver_gpio (keyboard, 0) receive sysreq = driver_gpio (keyboard, 1) receive audio = driver_audio (audio) receive udc = driver_udc (udc) receive nand = driver_nand (wstring) # driver run a previously loaded program priviledged. driver driver_lcd driver driver_buzzer driver driver_gpio driver driver_audio driver driver_udc driver driver_nand # wait wait until all expected capabilities are received. wait # sysreq use a capability as the system request keyboard. sysreq sysreq # give ( [, ]) = give this capability to this program when it requests it. give emu_display (display) = display give emu_display_bright (setting) = display_bright give emu_buzzer (buzzer) = buzzer give emu_keyboard (keyboard, 0) = keyboard give emu_audio (audio) = audio give emu_udc (udc) = udc # run run a previously loaded program (normally). run emu_lcd run emu_buzzer run emu_keyboard run emu_audio run emu_udc # include include a loaded file as another config file. include session # loop sit and do nothing (respond to system request). loop