• Stars
    star
    214
  • Rank 178,558 (Top 4 %)
  • Language
    C
  • License
    MIT License
  • Created almost 2 years ago
  • Updated 2 months ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

A minimalist RISC-V system emulator capable of running Linux kernel

semu

A minimalist RISC-V system emulator capable of running Linux the kernel and corresponding userland. semu implements the following:

  • RISC-V instruction set architecture: RV32IMA
  • Privilege levels: S and U modes
  • Control and status registers (CSR)
  • Virtual memory system: RV32 MMU
  • UART: 8250/16550
  • PLIC (platform-level interrupt controller): 32 interrupts, no priority
  • Standard SBI, with the timer extension
  • VirtIO: virtio-blk acquires disk image from the host, and virtio-net is mapped as TAP interface

Prerequisites

Device Tree compiler (dtc) is required. To install it on Debian/Ubuntu Linux, enter the following command:

$ sudo apt install device-tree-compiler

For macOS, use the following command:

$ brew install dtc

For demonstration purposes, ext4 is used for file system mounting. ext4 is a native Linux filesystem, offering stability, high capacity, reliability, and performance while requiring minimal maintenance. The mkfs.ext4 command can create an ext4 file system from disk partitions. This command is a symbolic link of the mke2fs command, and its usage is the same as the mke2fs command.

For most GNU/Linux distributions, mkfs.ext4 command should be installed in advance. For macOS, use the following command:

$ brew install e2fsprogs

Build and Run

Build the emulator:

$ make

Download prebuilt Linux kernel image:

$ make check

Please be patient while semu is running.

Reference output:

Starting syslogd: OK
Starting klogd: OK
Running sysctl: OK
Starting network: OK

Welcome to Buildroot
buildroot login:

Enter root to access shell.

You can exit the emulator using: <Ctrl-a x>. (press Ctrl+A, leave it, afterwards press X)

Build Linux kernel image and root file system

An automated build script is provided to compile the RISC-V cross-compiler, Busybox, and Linux kernel from source. Please note that it only supports the Linux host environment.

$ make build-image

Usage

./semu -k linux-image [-b dtb-file] [-d disk-image]
  • linux-image is the path to the Linux kernel Image.
  • dtb-file is optional, as it specifies the user-specified device tree blob.
  • disk-image is optional, as it specifies the path of a disk image in ext4 file system for the virtio-blk device.

License

semu is released under the MIT License. Use of this source code is governed by a MIT-style license that can be found in the LICENSE file.

More Repositories

1

lkmpg

The Linux Kernel Module Programming Guide (updated for 5.0+ kernels)
TeX
6,998
star
2

shecc

A self-hosting and educational C optimizing compiler
C
1,042
star
3

lab0-c

C Programming Lab: Assessing Your C Programming Skills
C
382
star
4

rv32emu

Compact and Efficient RISC-V RV32I[MAFC] emulator
C
327
star
5

simplefs

A simple native file system for Linux kernel
C
308
star
6

concurrent-programs

Complementary Concurrency Programs for course "Linux Kernel Internals"
C
301
star
7

jitboy

A Game Boy emulator with dynamic recompilation (JIT)
C
288
star
8

cpumemory-zhtw

Traditional Chinese translation of "What Every Programmer Should Know About Memory"
CSS
216
star
9

vwifi

A virtual wireless device driver for Linux
C
174
star
10

kvm-host

A minimalist type 2 hypervisor using Linux Kernel Virtual Machine (KVM)
C
137
star
11

pitifulvm

A shabby implementation of Java virtual machine in C
C
137
star
12

vcam

Virtual camera device driver for Linux
C
89
star
13

sehttpd

A small and efficient web server with 1K lines of C code
C
82
star
14

cserv

An event-driven and non-blocking web server
C
70
star
15

concurrent-ll

concurrent linked list implementation
C
68
star
16

khttpd

An experimental HTTP server implemented as Linux kernel module
C
60
star
17

rv32emu-legacy

RISC-V RV32I[MA] emulator with ELF support
C
47
star
18

raycaster

Wolfenstein 3D-style raycasting implementation
C
42
star
19

linux-list

Linux-like doubly-linked list
C
39
star
20

fibdrv

Linux kernel module that calculates Fibonacci numbers
Shell
37
star
21

gameboy-emu

An efficient and portable Game Boy emulator
C
36
star
22

lkm-hidden

A Linux kernel module which hides itself
C
29
star
23

rubi

Ruby-like high-performance script programming language with JIT compilation
C
25
star
24

kecho

A lightweight echo server implementation in Linux kernel mode
C
25
star
25

threaded-logger

Threaded Logger
C
21
star
26

threadkit

A collection of lightweight threading utilities
C
20
star
27

vinput

A collection of virtual input device drivers for Linux
C
20
star
28

linux-cfs-sim

Simulate Linux Completely Fair Scheduler (CFS) using POSIX Threads
C
18
star
29

rnnoise

A noise suppression library based on a recurrent neural network
C
17
star
30

kcalc

Math expression evaluation as Linux kernel module
C
16
star
31

dict

Ternary Search Tree + Bloom filter
C
15
star
32

jitcalc

A simple integer calculator using JIT compilation
C
15
star
33

y86_64-tools

Y86-64 Tools: assembler, simulator, Verilog designs
C
14
star
34

fastcat

A faster "cat" implementation using splice and sendfile system calls
C
13
star
35

neocon

A simple serial console utility
C
13
star
36

bignum

An incomplete arbitrary-precision integer arithmetic library
C
13
star
37

fiber

A User Space Threading Library
C
13
star
38

compute-pi

Leibniz formula for π
C
12
star
39

ca2023-lab3

Lab3: Construct a single-cycle CPU with Chisel
Scala
12
star
40

mapreduce

A simple C Thread pool implementation
C
12
star
41

prefix-search

Implement prefix search using ternary search tree
C
12
star
42

jit-construct

JIT compiler from scratch, derived from Nick Desaulniers' great work
Lua
11
star
43

datalab

Improved CS:APP Data Lab
C
9
star
44

buddy

Buddy Memory Allocator
C
8
star
45

moxiebox

A secure, sandboxed execution mechanism that enables deterministic input, processing and output
C
8
star
46

phonebook

sample phonebook program to illustrate the impact of cache miss
Shell
8
star
47

kilo

A text editor in less than 1000 LoC with syntax highlight and search
C
8
star
48

raytracing

Small ray tracing program for performance evaluation
C
8
star
49

intrusive-ds

A collection of intrusive data-structures for C
C
8
star
50

concurrency-primer

Concurrency Primer
TeX
8
star
51

gecos

GECOS: A lock-free synchronization mechanism
C
7
star
52

nyancat

Nyancat rendered in your terminal
C
6
star
53

matrix_oo

Sample matrix implementation illustrating object-oriented techniques in C99
Shell
6
star
54

dont-trace

A simple Linux kernel module that kills ptrace tracer and its tracees
C
6
star
55

kfifo-examples

Linux kernel module examples about kfifo
C
5
star
56

mergesort-concurrent

merge sort on singly-linked list utilzing POSIX Thread
C
5
star
57

tinymembench

Measure peak bandwidth of sequential memory accesses and the latency of random memory accesses
C
5
star
58

align-bench

Microbenchmark for unaligned memory access
C
4
star
59

cirbuf

Circular Buffer implementation with mmap(2) *incomplete*
C
4
star
60

kcalc-fixed

Math expression evaluation as Linux kernel module, fixed-point implementation
C
4
star
61

prefetcher

Evaluate the effects of prefetching
Shell
3
star
62

malloc-test-concurrent

concurrent malloc benchmark
C
3
star
63

sched-plugin

A Linux kernel module to allow user processes being handed out with LKM based scheduler
C
3
star
64

phonebook-concurrent

build a phonebook program by concurrent linked list
C
3
star
65

simrupt

A Linux device driver that simulates interrupts
C
3
star
66

tco-test

Test the ability of C compilers performing Tail Call Optimization
C
2
star
67

balanced-ternary

Ilustrate how balanced ternary works
Shell
2
star
68

vsnd

Virtual Linux soundcard driver
C
2
star
69

bf-runtime

Brainf*ck runtime engine
C
1
star
70

quotient-filter

(Incomplete) in-memory quotient filter
C
1
star
71

ksort

Linux kernel module that implements and validates sorting algorithms
C
1
star
72

arm-assembler-latex-listings

Arm Assembler language definition for the LaTeX listings package
TeX
1
star
73

clz-tests

Evaluate implementations of count leading zero
C
1
star
74

rv32emu-demo

HTML
1
star