{"id":50593353,"url":"https://github.com/rucub100/kruspix","last_synced_at":"2026-06-05T12:01:55.928Z","repository":{"id":357219037,"uuid":"1051591960","full_name":"rucub100/kruspix","owner":"rucub100","description":"A hands-on, educational kernel for the Raspberry Pi, written in Rust. Get a feel for bare metal and build your own OS from the ground up.","archived":false,"fork":false,"pushed_at":"2026-05-27T12:07:58.000Z","size":5335,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-05-27T13:23:55.077Z","etag":null,"topics":["arm64","education","experiment","kernel","operating-system","raspberry-pi","rust"],"latest_commit_sha":null,"homepage":"","language":"Rust","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/rucub100.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":"ROADMAP.md","authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":"AGENTS.md","dco":null,"cla":null}},"created_at":"2025-09-06T10:14:59.000Z","updated_at":"2026-05-23T08:06:44.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/rucub100/kruspix","commit_stats":null,"previous_names":["rucub100/kruspix"],"tags_count":5,"template":false,"template_full_name":null,"purl":"pkg:github/rucub100/kruspix","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rucub100%2Fkruspix","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rucub100%2Fkruspix/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rucub100%2Fkruspix/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rucub100%2Fkruspix/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/rucub100","download_url":"https://codeload.github.com/rucub100/kruspix/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rucub100%2Fkruspix/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":33939227,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-05T02:00:06.157Z","response_time":120,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["arm64","education","experiment","kernel","operating-system","raspberry-pi","rust"],"created_at":"2026-06-05T12:01:55.024Z","updated_at":"2026-06-05T12:01:55.921Z","avatar_url":"https://github.com/rucub100.png","language":"Rust","funding_links":[],"categories":[],"sub_categories":[],"readme":"# kruspix\n\nKruspix is an experimental bare-metal hobby OS kernel for the Raspberry Pi, written in Rust.\nIt is also a learning project: the codebase explores OS fundamentals from the ground up \u0026ndash;\nboot, memory management, exceptions, scheduling, and device drivers, all without an OS\nunderneath.\n\n![kruspix demo](docs/kruspix_demo_2026_05_11.gif)\n\n## Current Status\n\nKruspix currently targets the Raspberry Pi 3 Model B v1.2 (BCM2837). The kernel boots into\na preemptive, single-core environment with virtual memory, heap allocation, device-tree based\nplatform drivers, UART logging, an interactive debug shell, framebuffer output, DMA-assisted\nframebuffer scrolling, and USB HID boot-keyboard input.\n\nSome recent driver work, especially the framebuffer console, DMA support, and USB keyboard\nstack, was implemented with heavy AI assistance and is treated as experimental. These areas\nwork as project milestones, but still need review, cleanup, testing, and explanatory\ndocumentation before they fully serve the project's educational goals.\n\n## Hardware Support\n\n- [ ] Raspberry Pi 2 Model B v1.2 (BCM2837)\n- [x] Raspberry Pi 3 Model B v1.2 (BCM2837)\n- [ ] Raspberry Pi 4 Model B (BCM2711)\n- [ ] Raspberry Pi 5 (BCM2712)\n\n## Prerequisites\n\n- [Rust](https://www.rust-lang.org/): Make sure you have Rust installed.\n  - Add the target for Bare ARM64 (see [The rustc book - Platform Support](https://doc.rust-lang.org/rustc/platform-support.html)):\n    ```shell\n    rustup target add aarch64-unknown-none\n    ```\n- Install [cargo-binutils](https://github.com/rust-embedded/cargo-binutils#cargo-binutils) for using `llvm-objcopy` and other tools:\n    ```shell\n    cargo install cargo-binutils\n    rustup component add llvm-tools\n    ```\n- [Raspberry Pi Imager](https://www.raspberrypi.com/software/): To install kruspix OS to a microSD card\n- [QEMU](https://www.qemu.org/): Required for emulating the Raspberry Pi and testing the kernel without real hardware\n\n## Getting Started\n\n### Building the Kernel\n\n#### Build the kernel image\n```shell\ncargo objcopy --release -- -O binary target/kruspix.img\n```\n\n### Run in QEMU\n\nBefore running, the Raspberry Pi 3 device tree binary must be placed at `raspberrypi/bcm2710-rpi-3-b.dtb`.\nThis file is not included in the repository \u0026ndash; download it from the\n[official Raspberry Pi firmware repo](https://github.com/raspberrypi/firmware/tree/master/boot):\n\n```shell\n# create the folder and download the DTB\nmkdir raspberrypi\ncurl -L -o raspberrypi/bcm2710-rpi-3-b.dtb https://github.com/raspberrypi/firmware/raw/master/boot/bcm2710-rpi-3-b.dtb\n```\n\nThen launch the kernel in QEMU:\n\n```shell\ncargo run\n```\n\nThis uses the runner configured in `.cargo/config.toml` \u0026ndash; it launches `qemu-system-aarch64`\nwith the `raspi3b` machine, the BCM2710 device tree, and serial output on stdio.\n\n### Run on Hardware\n\n#### Copy to microSD card and eject (Windows)\n```shell\ncp .\\target\\kruspix.img H:\\boot\\kruspix.img; (New-Object -ComObject Shell.Application).Namespace(17).ParseName(\"H:\").InvokeVerb(\"Eject\")\n```\n\n#### `usercfg.txt`\n\n```text\nkernel=boot/kruspix.img\narm_64bit=1\nenable_uart=1\nuart_2ndstage=1\ndtparam=watchdog=off\n#gpio=22-27=np\nenable_jtag_gpio=1\n# UM232H        FT232H    JTAG        RPi3 GPIO\n# Name  Pin     Name      Func        Pin\n# AD0   J2-6    ADBUS0    TCK         25\n# AD1   J2-7    ADBUS1    TDI         26\n# AD2   J2-8    ADBUS2    TDO         24\n# AD3   J2-9    ADBUS3    TMS         27\n# AD4   J2-10   ADBUS4    (GPIOL0)    22\n# AD5   J2-11   ADBUS5    (GPIOL1)    \n# AD6   J2-12   ADBUS6    (GPIOL2)    \n# AD7   J2-13   ADBUS7    (GPIOL3)    \n# AD0   J1-14   ACBUS0    /TRST       \n# AD1   J1-13   ACBUS1    /SRST       \n# AD2   J1-12   ACBUS2    (GPIOH2)    \n# AD3   J1-11   ACBUS3    (GPIOH3)    \n# AD4   J1-10   ACBUS4    (GPIOH4)    \n# AD5   J1-9    ACBUS5    (GPIOH5)    \n# AD6   J1-8    ACBUS6    (GPIOH6)    \n# AD7   J1-7    ACBUS7    (GPIOH7)    \n```\n\n## JTAG Debugging\n\n```shell\nopenocd -f interface/ftdi/um232h.cfg -f board/rpi3.cfg\n```\n\n## Project Structure\n\n`src/`:\n- `arch/` \u0026ndash; architecture-specific code (ARM64 boot, MMU, CPU, exception vectors)\n- `common/` \u0026ndash; general utilities and data structures\n- `drivers/` \u0026ndash; platform device drivers (DTB-based model, including UART, timers,\n  watchdog, RNG, mailbox/firmware, DMA, framebuffer display, and USB keyboard support)\n- `fs/` \u0026ndash; filesystem (planned)\n- `init/` \u0026ndash; init system (planned)\n- `ipc/` \u0026ndash; inter-process communication (planned)\n- `kernel/` \u0026ndash; core kernel services (scheduler, IRQ, sync, shell, logging)\n- `mm/` \u0026ndash; physical memory management and heap\n- `net/` \u0026ndash; networking stack (planned)\n\n## Roadmap\n\nSee [ROADMAP.md](ROADMAP.md) for the full list of completed milestones and planned features.\n\n## Learning Material \u0026 Resources\n\n### Rust\n\n- [The Rust Programming Language Book](https://doc.rust-lang.org/book/)\n- [The Rust Reference](https://doc.rust-lang.org/reference/index.html)\n- [The Rustonomicon](https://doc.rust-lang.org/nomicon/index.html)\n\n### Embedded Rust\n\n- [The Discovery book](https://docs.rust-embedded.org/discovery/)\n- [The Embedded Rust book](https://docs.rust-embedded.org/book/)\n- [The Embedonomicon](https://docs.rust-embedded.org/embedonomicon/)\n\n### Raspberry Pi and ARM\n\n- [Raspberry Pi Documentation](https://www.raspberrypi.com/documentation/)\n- [Raspberry Pi Firmware](https://github.com/raspberrypi/firmware)\n- [BCM2835 ARM Peripherals](https://datasheets.raspberrypi.com/bcm2835/bcm2835-peripherals.pdf)\n- [BCM2836 ARM-local peripherals](https://datasheets.raspberrypi.com/bcm2836/bcm2836-peripherals.pdf)\n- [Cortex-A53 MPCore Processor Technical Reference Manual](https://developer.arm.com/documentation/ddi0500/latest/)\n- [BCM2711 ARM Peripherals](https://datasheets.raspberrypi.com/bcm2711/bcm2711-peripherals.pdf)\n- [ARM Cortex-A72](https://en.wikipedia.org/wiki/ARM_Cortex-A72)\n\n### OS Development\n\n- [Writing an OS in Rust (x86_64)](https://os.phil-opp.com/)\n- [Simple RPi3 OS in C](https://github.com/s-matyukevich/raspberry-pi-os)\n- [Operating System development tutorials in Rust on the Raspberry Pi](https://github.com/rust-embedded/rust-raspberrypi-OS-tutorials)\n- [OSDev Wiki](https://wiki.osdev.org/Main_Page)\n- [QEMU Documentation](https://wiki.qemu.org/Documentation)\n- [Linux Source](https://github.com/torvalds/linux)\n- [The Linux Kernel documentation](https://docs.kernel.org/)\n- [Device Tree Specification](https://www.devicetree.org/specifications/)\n- [Device Bindings](https://github.com/devicetree-org/devicetree-source/tree/master/Bindings)\n- [UEFI Specification](https://uefi.org/specifications)\n- [POSIX.1-2024](https://pubs.opengroup.org/onlinepubs/9799919799/)\n\n## Contact\n\n📧 [info@ruslan-curbanov.de](mailto:info@ruslan-curbanov.de)\n\n*Feel free to reach out regarding bug reports, technical discussions, or collaboration opportunities.*","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frucub100%2Fkruspix","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Frucub100%2Fkruspix","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frucub100%2Fkruspix/lists"}