./build
builds a Linux Kernel bzImage
(inside a build container, it's just easier for dependencies)
and userland demo images such as: (You can use any Docker Container image as User Land, see image2initrd,
as long as it has an /init
).
/init
static binary runnable in a FROM scratch
demo containerbusybox
-based container with bash as init and working networking./run-qemu hello
starts this Kernel in a virtual machine
(using KVM, with QEMU; enable virtualization first),
with an initrd containing our hello
demo.
./run-qemu busybox-init
starts this Kernel in a virtual machine
using the busybox container image plus our own init
as initrd. You can quit it using poweroff -f
. Also see networking.
./run-qemu-syslinux hello | busybox-init
builds a disk image with SYSLINUS bootloader, and starts virtual machine.
(Whereas run-qemu
uses qemu* -kernel -initrd
.)
The /tmp/bzImage-busybox-init.img
disk image can be written to a USB key (e.g. using dd
, or, easier, GNOME Disks), and will boot on bare metal.
./run-dev-container
will run an interactive dev container to explore [tux@kernel-dev ~]
.
Its root password is empty, so you can e.g. sudo dnf install -y ..
, but it's (intentionally) ephemeral - script it! ;)
./test.tcl
automatically tests everything that's described above; run it after making any changes (and extend it when adding new features).
docs/
has more background and details; including a Roadmap and TODOs.
Architecture (future, TBD) further describes what's what in this repo.
archlinux
has my Arch Linux based distro.