getting started with l4re - tu dresdencw183155/sppexa_teachlets/...getting started with l4re, tu...
TRANSCRIPT
![Page 1: Getting Started with L4Re - TU Dresdencw183155/SPPEXA_Teachlets/...Getting Started with L4Re, TU Dresden BIOS 5 Basic Input Output System fixed entry point after „power on“ and](https://reader034.vdocuments.us/reader034/viewer/2022042207/5eaa1a090e9a1477d55b1565/html5/thumbnails/1.jpg)
Faculty of Computer Science Institute of System Architecture, Operating Systems Group
CARSTEN WEINHOLD
SPPEXA TEACHLET: GETTING STARTED WITH L4RE
![Page 2: Getting Started with L4Re - TU Dresdencw183155/SPPEXA_Teachlets/...Getting Started with L4Re, TU Dresden BIOS 5 Basic Input Output System fixed entry point after „power on“ and](https://reader034.vdocuments.us/reader034/viewer/2022042207/5eaa1a090e9a1477d55b1565/html5/thumbnails/2.jpg)
Getting Started with L4Re, TU Dresden
AGENDA
2
■ first contact with a microkernel OS
■ getting to know QEMU
■ compile Fiasco
■ compile minimal system environment
■ talk about system booting
■ the usual „Hello World“
■ review some stuff and play with the system
![Page 3: Getting Started with L4Re - TU Dresdencw183155/SPPEXA_Teachlets/...Getting Started with L4Re, TU Dresden BIOS 5 Basic Input Output System fixed entry point after „power on“ and](https://reader034.vdocuments.us/reader034/viewer/2022042207/5eaa1a090e9a1477d55b1565/html5/thumbnails/3.jpg)
Getting Started with L4Re, TU Dresden
QEMU■ developing your own kernel usually
requires a dedicated machine
■ we will use a virtual machine
■ QEMU is open-source software providing a virtual machine by binary translation
■ it emulates a complete x86 PC
■ available for other architectures as well
■ our QEMU will boot from an ISO image3
![Page 4: Getting Started with L4Re - TU Dresdencw183155/SPPEXA_Teachlets/...Getting Started with L4Re, TU Dresden BIOS 5 Basic Input Output System fixed entry point after „power on“ and](https://reader034.vdocuments.us/reader034/viewer/2022042207/5eaa1a090e9a1477d55b1565/html5/thumbnails/4.jpg)
Getting Started with L4Re, TU Dresden
BOOTING
4
![Page 5: Getting Started with L4Re - TU Dresdencw183155/SPPEXA_Teachlets/...Getting Started with L4Re, TU Dresden BIOS 5 Basic Input Output System fixed entry point after „power on“ and](https://reader034.vdocuments.us/reader034/viewer/2022042207/5eaa1a090e9a1477d55b1565/html5/thumbnails/5.jpg)
Getting Started with L4Re, TU Dresden
BIOS
5
■ Basic Input Output System
■ fixed entry point after „power on“ and „reset“
■ initializes the CPU in 16-bit real-mode
■ detects, checks and initializes some platform hardware (like RAM, PCI, ATA)
■ finds the boot device BIOS
![Page 6: Getting Started with L4Re - TU Dresdencw183155/SPPEXA_Teachlets/...Getting Started with L4Re, TU Dresden BIOS 5 Basic Input Output System fixed entry point after „power on“ and](https://reader034.vdocuments.us/reader034/viewer/2022042207/5eaa1a090e9a1477d55b1565/html5/thumbnails/6.jpg)
Getting Started with L4Re, TU Dresden
BOOT SECTOR■ first sector on boot disk
■ 512 bytes
■ contains first boot loader stage and partition table
■ BIOS loads code into RAM and executes it
■ problem: How to find and boot an OS in 512 bytes?
6
BIOS
![Page 7: Getting Started with L4Re - TU Dresdencw183155/SPPEXA_Teachlets/...Getting Started with L4Re, TU Dresden BIOS 5 Basic Input Output System fixed entry point after „power on“ and](https://reader034.vdocuments.us/reader034/viewer/2022042207/5eaa1a090e9a1477d55b1565/html5/thumbnails/7.jpg)
Getting Started with L4Re, TU Dresden
MEMORY LAYOUT
7
BIOSPhysical Memory
Boot Code
BIOS, Video RAM
![Page 8: Getting Started with L4Re - TU Dresdencw183155/SPPEXA_Teachlets/...Getting Started with L4Re, TU Dresden BIOS 5 Basic Input Output System fixed entry point after „power on“ and](https://reader034.vdocuments.us/reader034/viewer/2022042207/5eaa1a090e9a1477d55b1565/html5/thumbnails/8.jpg)
Getting Started with L4Re, TU Dresden
GRUB■ popular boot loader
■ used by most (all?) Linux distributions
■ uses a two-stage-approach
■ first stage fits in one sector
■ has hard-wired sectors of second stage files
■ second stage can read common file systems
8
BIOS
Boot Loader
![Page 9: Getting Started with L4Re - TU Dresdencw183155/SPPEXA_Teachlets/...Getting Started with L4Re, TU Dresden BIOS 5 Basic Input Output System fixed entry point after „power on“ and](https://reader034.vdocuments.us/reader034/viewer/2022042207/5eaa1a090e9a1477d55b1565/html5/thumbnails/9.jpg)
Getting Started with L4Re, TU Dresden
GRUB■ second stage loads a
menu.lst config file to present a boot menu
■ from there, you can load your kernel
■ supports loading multiple modules
■ files can also be retrieved from network
9
BIOS
Boot Loader
![Page 10: Getting Started with L4Re - TU Dresdencw183155/SPPEXA_Teachlets/...Getting Started with L4Re, TU Dresden BIOS 5 Basic Input Output System fixed entry point after „power on“ and](https://reader034.vdocuments.us/reader034/viewer/2022042207/5eaa1a090e9a1477d55b1565/html5/thumbnails/10.jpg)
Getting Started with L4Re, TU Dresden
GRUB■ switches CPU to 32-bit
protected mode
■ loads and interprets the „kernel“ binary
■ loads additional modules into memory
■ sets up multiboot info structure
■ starts the kernel10
BIOS
Boot Loader
![Page 11: Getting Started with L4Re - TU Dresdencw183155/SPPEXA_Teachlets/...Getting Started with L4Re, TU Dresden BIOS 5 Basic Input Output System fixed entry point after „power on“ and](https://reader034.vdocuments.us/reader034/viewer/2022042207/5eaa1a090e9a1477d55b1565/html5/thumbnails/11.jpg)
Getting Started with L4Re, TU Dresden
MEMORY LAYOUT
11
BIOS
Boot Loader
Physical Memory
Grub
Multiboot Info
BIOS, Video RAMKernel Binary
ModuleModuleModuleModule
![Page 12: Getting Started with L4Re - TU Dresdencw183155/SPPEXA_Teachlets/...Getting Started with L4Re, TU Dresden BIOS 5 Basic Input Output System fixed entry point after „power on“ and](https://reader034.vdocuments.us/reader034/viewer/2022042207/5eaa1a090e9a1477d55b1565/html5/thumbnails/12.jpg)
Getting Started with L4Re, TU Dresden
BOOTSTRAP
12
■ our modules are ELF files: executable and linkable format
■ contain multiple sections
■ code, data, BSS
■ bootstrap interprets the ELF modules
■ copies sections to final location in physical memory BIOS
Boot Loader
Bootstrap
![Page 13: Getting Started with L4Re - TU Dresdencw183155/SPPEXA_Teachlets/...Getting Started with L4Re, TU Dresden BIOS 5 Basic Input Output System fixed entry point after „power on“ and](https://reader034.vdocuments.us/reader034/viewer/2022042207/5eaa1a090e9a1477d55b1565/html5/thumbnails/13.jpg)
Getting Started with L4Re, TU Dresden
BOOTSTRAP■ actual kernel is the first of the
modules
■ must know about the other modules
■ bootstrap sets up a kernel info page
■ contains entry point and stack pointer of sigma0 and moe
■ passes control to the kernel13
BIOS
Boot Loader
Bootstrap
![Page 14: Getting Started with L4Re - TU Dresdencw183155/SPPEXA_Teachlets/...Getting Started with L4Re, TU Dresden BIOS 5 Basic Input Output System fixed entry point after „power on“ and](https://reader034.vdocuments.us/reader034/viewer/2022042207/5eaa1a090e9a1477d55b1565/html5/thumbnails/14.jpg)
Getting Started with L4Re, TU Dresden
MEMORY LAYOUT
14
BIOS
Boot Loader
Physical Memory
Bootstrap
Kernel
Multiboot Info
BIOS, Video RAM
Module
CodeData
CodeData
![Page 15: Getting Started with L4Re - TU Dresdencw183155/SPPEXA_Teachlets/...Getting Started with L4Re, TU Dresden BIOS 5 Basic Input Output System fixed entry point after „power on“ and](https://reader034.vdocuments.us/reader034/viewer/2022042207/5eaa1a090e9a1477d55b1565/html5/thumbnails/15.jpg)
Getting Started with L4Re, TU Dresden
KERNEL LOADER■ initial kernel code
■ basic CPU setup
■ detecting CPU features
■ setup various CPU-tables
■ sets up basic page table
■ enables virtual memory mode
■ runs the actual kernel code15
BIOS
Boot Loader
Bootstrap
Kernel Loader
![Page 16: Getting Started with L4Re - TU Dresdencw183155/SPPEXA_Teachlets/...Getting Started with L4Re, TU Dresden BIOS 5 Basic Input Output System fixed entry point after „power on“ and](https://reader034.vdocuments.us/reader034/viewer/2022042207/5eaa1a090e9a1477d55b1565/html5/thumbnails/16.jpg)
Getting Started with L4Re, TU Dresden
MEMORY LAYOUT
16
BIOS
Boot Loader
Virtual Memory
Kernel
Kernel Memory
Bootstrap
Kernel Loader
Physical Memory 1:1 mapped
![Page 17: Getting Started with L4Re - TU Dresdencw183155/SPPEXA_Teachlets/...Getting Started with L4Re, TU Dresden BIOS 5 Basic Input Output System fixed entry point after „power on“ and](https://reader034.vdocuments.us/reader034/viewer/2022042207/5eaa1a090e9a1477d55b1565/html5/thumbnails/17.jpg)
Getting Started with L4Re, TU Dresden
FIASCO
■ sets up kernel structures
■ sets up scheduling timer
■ starts first pager
■ starts first task
■ starts scheduling
■ scheduler hands control to userland for the first time
17
BIOS
Boot Loader
Bootstrap
Kernel Loader
Kernel
![Page 18: Getting Started with L4Re - TU Dresdencw183155/SPPEXA_Teachlets/...Getting Started with L4Re, TU Dresden BIOS 5 Basic Input Output System fixed entry point after „power on“ and](https://reader034.vdocuments.us/reader034/viewer/2022042207/5eaa1a090e9a1477d55b1565/html5/thumbnails/18.jpg)
Getting Started with L4Re, TU Dresden
SIGMA0■ is the first pager in the
system
■ initially receives a 1:1 mapping of physical memory
■ … and other platform-level resources (IO ports)
■ sigma0 is the root of the pager hierarchy
■ pager for moe18
BIOS
Boot Loader
Bootstrap
Kernel Loader
Kernel
σ0
![Page 19: Getting Started with L4Re - TU Dresdencw183155/SPPEXA_Teachlets/...Getting Started with L4Re, TU Dresden BIOS 5 Basic Input Output System fixed entry point after „power on“ and](https://reader034.vdocuments.us/reader034/viewer/2022042207/5eaa1a090e9a1477d55b1565/html5/thumbnails/19.jpg)
Getting Started with L4Re, TU Dresden
MOE
■ manages initial resources
■ namespace
■ memory
■ VESA framebuffer
■ provides logging facility
■ mini-filesystem for read-only access to boot-modules
19
BIOS
Boot Loader
Bootstrap
Kernel Loader
Kernel
Moeσ0
![Page 20: Getting Started with L4Re - TU Dresdencw183155/SPPEXA_Teachlets/...Getting Started with L4Re, TU Dresden BIOS 5 Basic Input Output System fixed entry point after „power on“ and](https://reader034.vdocuments.us/reader034/viewer/2022042207/5eaa1a090e9a1477d55b1565/html5/thumbnails/20.jpg)
Getting Started with L4Re, TU Dresden
NED■ script-driven loader for
further programs
■ startup-scripts written in Lua
■ additional software can be loaded by retrieving binaries via disk or network drivers
■ ned injects a common service kernel into every task
20
BIOS
Boot Loader
Bootstrap
Kernel Loader
Kernel
Ned
Moeσ0
![Page 21: Getting Started with L4Re - TU Dresdencw183155/SPPEXA_Teachlets/...Getting Started with L4Re, TU Dresden BIOS 5 Basic Input Output System fixed entry point after „power on“ and](https://reader034.vdocuments.us/reader034/viewer/2022042207/5eaa1a090e9a1477d55b1565/html5/thumbnails/21.jpg)
Install Development Packages
• On 64-bit Debian or Ubuntu run the following command:sudo apt-get install pkg-config g++ g++-multilib libncurses5-dev make gawk dialog mkisofs qemu
• On 32-bit installs, g++-multilib is not needed • Other Linux distributions work, too, but package
names may differ from DebianUbuntu
![Page 22: Getting Started with L4Re - TU Dresdencw183155/SPPEXA_Teachlets/...Getting Started with L4Re, TU Dresden BIOS 5 Basic Input Output System fixed entry point after „power on“ and](https://reader034.vdocuments.us/reader034/viewer/2022042207/5eaa1a090e9a1477d55b1565/html5/thumbnails/22.jpg)
Setup
• download the source tarball from https://os.inf.tu-dresden.de/Studium/KMB/WS2015/Exercise1.tar.bz2
• unpack the tarball • it comes with a working directory • cd in there and have a look around
• initialize the environment with make setup in the toplevel directory you unpacked and select x86-32 as build target
![Page 23: Getting Started with L4Re - TU Dresdencw183155/SPPEXA_Teachlets/...Getting Started with L4Re, TU Dresden BIOS 5 Basic Input Output System fixed entry point after „power on“ and](https://reader034.vdocuments.us/reader034/viewer/2022042207/5eaa1a090e9a1477d55b1565/html5/thumbnails/23.jpg)
Compiling the System
• run make within the toplevel directory
![Page 24: Getting Started with L4Re - TU Dresdencw183155/SPPEXA_Teachlets/...Getting Started with L4Re, TU Dresden BIOS 5 Basic Input Output System fixed entry point after „power on“ and](https://reader034.vdocuments.us/reader034/viewer/2022042207/5eaa1a090e9a1477d55b1565/html5/thumbnails/24.jpg)
Test-Driving QEMU
• create a bootable ISO image • the iso subdirectory is for the ISO’s content • run isocreator from src/l4/tool/bin on
this directory • your ISO will contain a minimal grub installation • launch QEMU with the resulting ISO: qemu-system-i386 -cdrom boot.iso
![Page 25: Getting Started with L4Re - TU Dresdencw183155/SPPEXA_Teachlets/...Getting Started with L4Re, TU Dresden BIOS 5 Basic Input Output System fixed entry point after „power on“ and](https://reader034.vdocuments.us/reader034/viewer/2022042207/5eaa1a090e9a1477d55b1565/html5/thumbnails/25.jpg)
Booting Fiasco
• copy some files to the ISO directory • fiasco from the Fiasco build directory obj/fiasco/ia32/
• bootstrap fromobj/l4/x86/bin/x86_586/
• sigma0, moe , l4re and ned fromobj/l4/x86/bin/x86_586/l4f/
![Page 26: Getting Started with L4Re - TU Dresdencw183155/SPPEXA_Teachlets/...Getting Started with L4Re, TU Dresden BIOS 5 Basic Input Output System fixed entry point after „power on“ and](https://reader034.vdocuments.us/reader034/viewer/2022042207/5eaa1a090e9a1477d55b1565/html5/thumbnails/26.jpg)
Booting Fiasco
• edit iso/boot/grub/menu.lst:title Getting Started kernel /bootstrap -modaddr 0x01100000 module /fiasco module /sigma0 module /moe module /l4re module /ned
• rebuild the ISO and run qemu
![Page 27: Getting Started with L4Re - TU Dresdencw183155/SPPEXA_Teachlets/...Getting Started with L4Re, TU Dresden BIOS 5 Basic Input Output System fixed entry point after „power on“ and](https://reader034.vdocuments.us/reader034/viewer/2022042207/5eaa1a090e9a1477d55b1565/html5/thumbnails/27.jpg)
Preparing for Hello
• create the file hello.lua in the iso directory with this content:L4.default_loader:start({}, "rom/hello");
• pass ned this new startup script • add this line to menu.lst:module /hello.lua
• pass rom/hello.lua as parameter to moe• load the future hello module in menu.lst
![Page 28: Getting Started with L4Re - TU Dresdencw183155/SPPEXA_Teachlets/...Getting Started with L4Re, TU Dresden BIOS 5 Basic Input Output System fixed entry point after „power on“ and](https://reader034.vdocuments.us/reader034/viewer/2022042207/5eaa1a090e9a1477d55b1565/html5/thumbnails/28.jpg)
Exercise 1: Hello World
• create a directory for your hello-project • create a Makefile with the following content: PKGDIR ?= . L4DIR ?= absolute path to L4 source treeOBJ_BASE = absolute path to L4 build tree TARGET = hello SRC_C = hello.c include $(L4DIR)/mk/prog.mk
• fill in hello.c and compile with make • run in qemu
![Page 29: Getting Started with L4Re - TU Dresdencw183155/SPPEXA_Teachlets/...Getting Started with L4Re, TU Dresden BIOS 5 Basic Input Output System fixed entry point after „power on“ and](https://reader034.vdocuments.us/reader034/viewer/2022042207/5eaa1a090e9a1477d55b1565/html5/thumbnails/29.jpg)
Exercise 2: Ackermann Function
• write a program that spawns six threads • you can use pthreads in our system • add the lineREQUIRES_LIBS = libpthread to your Makefile
• each thread should calculate one value a(3,0..5) of the Ackermann function:
• a(0,m) = m+1 • a(n,0) = a(n-1,1) • a(n,m) = a(n-1,a(n,m-1))
![Page 30: Getting Started with L4Re - TU Dresdencw183155/SPPEXA_Teachlets/...Getting Started with L4Re, TU Dresden BIOS 5 Basic Input Output System fixed entry point after „power on“ and](https://reader034.vdocuments.us/reader034/viewer/2022042207/5eaa1a090e9a1477d55b1565/html5/thumbnails/30.jpg)
Priority Programme 1648 Software for Exascale Computing
Have fun!
More information: www.sppexa.de This work is supported by the German Research Foundation (DFG), TODO include ANR/JST for bi/trilateral projects, as part of the priority programme 1648 Software for Exascale Computing.