Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
20 commits
Select commit Hold shift + click to select a range
7e3738a
refactor: initial commit of HAL.
KyleMao2023 Jun 6, 2026
2f45793
refactor: second commit of HAL: extract trap context and syscall ABI.
KyleMao2023 Jun 7, 2026
170244e
refactor: third commit of HAL: paging/token; trap/signal ABI.
KyleMao2023 Jun 8, 2026
7a861f9
refactor: fourth commit of HAL: moved `entry.asm`, extracted `ArchTra…
KyleMao2023 Jun 8, 2026
37c1b19
refactor: fifth commit of HAL: Page table entries.
KyleMao2023 Jun 8, 2026
9fe71fc
feat: Support boot in LA64. (Not completed yet.)
KyleMao2023 Jun 8, 2026
f3c2c54
feat: Support boot in LA64 to busybox.
KyleMao2023 Jun 9, 2026
40ba46d
fix: Loongarch register ABI in rust syscall.
KyleMao2023 Jun 9, 2026
c6c8eff
fix: `set_fs` should operate at S mode instead of M mode.
KyleMao2023 Jun 9, 2026
f3b7ca2
feat: support syscalls `statx` (291); temporary change to polling in …
KyleMao2023 Jun 9, 2026
282279d
feat: Support external interrupt and shutdown in LA.
KyleMao2023 Jun 9, 2026
2bdbf60
refactor: extract platform-related code to HAL.
KyleMao2023 Jun 9, 2026
da34114
refactor: move `/os/board` to `os/platform`.
KyleMao2023 Jun 10, 2026
5a37ada
fix: Change mmap address for LA; fix `a0` register for LA in signal h…
KyleMao2023 Jun 11, 2026
eb17951
feat: Add rtc support for LA.
KyleMao2023 Jun 11, 2026
2972b7e
feat: Add SMP support for LA.
KyleMao2023 Jun 11, 2026
b8c4f33
fix: Resolve merging conflicts; modify splash for LA.
KyleMao2023 Jun 12, 2026
e7c85e7
chore: temporary commit to fix submodule.
KyleMao2023 Jun 13, 2026
e016fd0
Merge branch 'main' into dev/hal-new
KyleMao2023 Jun 13, 2026
394676a
fix: fully support LA.
KyleMao2023 Jun 13, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .vscode/settings.json
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@
"-c",
"if [ \"$(basename $(pwd))\" = \"fs-fuse\" ]; then target=\"x86_64-unknown-linux-gnu\"; else target=\"riscv64gc-unknown-none-elf\"; fi; cargo clippy --target $target --workspace --message-format=json --message-format=json-diagnostic-rendered-ansi"
],
"rust-analyzer.cargo.target": "riscv64gc-unknown-none-elf",
"rust-analyzer.checkOnSave.allTargets": false,
"rust-analyzer.checkOnSave": true,
"files.watcherExclude": {
Expand Down
113 changes: 86 additions & 27 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -4,24 +4,33 @@ ARCH ?= rv
TARGET ?= riscv64gc-unknown-none-elf
USER_MODE ?= release
USER_BIN_DIR := user/target/$(TARGET)/$(USER_MODE)
USER_BIN_DIR_RV := user/target/riscv64gc-unknown-none-elf/$(USER_MODE)
USER_BIN_DIR_LA := user/target/loongarch64-unknown-none/$(USER_MODE)
KERNEL_RV_ELF := os/target/$(TARGET)/release/os
KERNEL_LA_ELF := os/target/loongarch64-unknown-none/release/os
QEMU_RV ?= qemu-system-riscv64
QEMU_LA ?= qemu-system-loongarch64
MEM ?= 1G
SMP ?= 1
TEST_FS ?= sdcard-$(ARCH).img
# make run 使用写时复制副本,避免 QEMU 写坏原始测试镜像。
RUN_TEST_FS ?= .make/sdcard-$(ARCH)-run.img
TEST_FS_LA ?= sdcard-la.img
RUN_TEST_FS_LA ?= .make/sdcard-la-run.img
QEMU_NETDEV ?= user,id=net
QEMU_TRACE_ARGS ?=
QEMU_COMP_BLK_ARGS = -drive file=$(RUN_TEST_FS),if=none,format=raw,id=x0 -device virtio-blk-device,drive=x0,bus=virtio-mmio-bus.0
QEMU_COMP_EXTRA_BLK_ARGS = -drive file=$(RUN_DISK_IMG),if=none,format=raw,id=x1 -device virtio-blk-device,drive=x1,bus=virtio-mmio-bus.1

STAMP_DIR := .make
USER_BUILD_STAMP := $(STAMP_DIR)/user-build.stamp
KERNEL_BUILD_STAMP := $(STAMP_DIR)/kernel-build.stamp
USER_BUILD_STAMP_RV := $(USER_BIN_DIR_RV)/.xxos-build.stamp
USER_BUILD_STAMP_LA := $(USER_BIN_DIR_LA)/.xxos-build.stamp
KERNEL_BUILD_STAMP_RV := $(STAMP_DIR)/kernel-build-rv.stamp
KERNEL_BUILD_STAMP_LA := $(STAMP_DIR)/kernel-build-la.stamp
USER_BUILD_DEPS := user/Makefile user/Cargo.toml $(shell find user/src -type f | sort)
KERNEL_BUILD_DEPS := os/Makefile os/Cargo.toml os/build.rs $(shell find os/src fs/src -type f | sort)
LA_BOOTLOADER_DIR ?= bootloader/loongarch64-direct
LA_BOOTLOADER_DEPS := $(LA_BOOTLOADER_DIR)/Cargo.toml $(LA_BOOTLOADER_DIR)/Cargo.lock $(LA_BOOTLOADER_DIR)/build.rs $(LA_BOOTLOADER_DIR)/linker.ld $(shell find $(LA_BOOTLOADER_DIR)/src -type f | sort)
ROOTFS_REPO := CosmOS-rootfs
ROOTFS_BASE_DIR := $(ROOTFS_REPO)/rootfs
ROOTFS_RV_DIR := $(ROOTFS_REPO)/rootfs-rv
Expand All @@ -34,6 +43,8 @@ ROOTFS_RV_FILES := $(shell if [ -d $(ROOTFS_RV_DIR) ]; then find $(ROOTFS_RV_DIR
ROOTFS_LA_FILES := $(shell if [ -d $(ROOTFS_LA_DIR) ]; then find $(ROOTFS_LA_DIR) -type f | sort; fi)
DISK_RV_IMG := disk.img
DISK_LA_IMG := disk-la.img
QEMU_LA_BLK_ARGS = -drive file=$(RUN_TEST_FS_LA),if=none,format=raw,id=x0 -device virtio-blk-pci,drive=x0,id=x0
QEMU_LA_EXTRA_BLK_ARGS = -drive file=$(DISK_LA_IMG),if=none,format=raw,id=x1 -device virtio-blk-pci,drive=x1,id=x1
RV_ROOTFS_TARGET ?= riscv64-linux-musl
RV_TOOLCHAIN_BIN ?= /opt/riscv64-linux-musl-cross/bin
RV_GLIBC_LIB ?= /usr/riscv64-linux-gnu/lib
Expand All @@ -46,6 +57,10 @@ LA_GLIBC_TOOLCHAIN ?= /opt/gcc-13.2.0-loongarch64-linux-gnu
LA_MUSL_LIB ?= /opt/loongarch64-linux-musl-cross/loongarch64-linux-musl/lib
LA_MUSL_ARCH ?= loongarch64
LA_MUSL_LOADER_ALIASES ?= ld-musl-loongarch64.so.1
LA_BOOTLOADER_ELF ?= $(LA_BOOTLOADER_DIR)/target/loongarch64-unknown-none/release/loongarch64-direct-boot
LA_KERNEL_ENTRY_PA ?= 0x90000000
MEM_LA ?= 1G
QEMU_LA_NETDEV ?= user,id=net0
OPTIONAL_RUNTIME_FILES := $(wildcard lib/musl/ar lib/glibc/ar)

ifeq ($(ARCH),rv)
Expand All @@ -60,12 +75,12 @@ else
$(error unsupported ARCH=$(ARCH), expected rv or la)
endif

.PHONY: all submodules cargo-config docker build_docker fmt user-apps rootfs sync-rootfs-variants rootfs-rv rootfs-la rv la disk-rv disk-la clean run run-trace run-comp-rv run-comp-la debug gdbserver gdbclient check-kernel check-user-apps check-rootfs check-rootfs-rv check-rootfs-la check-rootfs-rv-ready check-rootfs-la-ready prepare-run-test-fs force
.PHONY: all submodules cargo-config docker build_docker fmt user-apps rootfs sync-rootfs-variants rootfs-rv rootfs-la rv la disk-rv disk-la clean run run-trace run-comp-rv run-comp-la fast-run fast-run-la clean-all debug gdbserver gdbclient check-kernel check-user-apps check-rootfs check-rootfs-rv check-rootfs-la check-rootfs-rv-ready check-rootfs-la-ready prepare-run-test-fs prepare-run-test-fs-la force

all:
$(MAKE) submodules
$(MAKE) cargo-config
$(MAKE) user-apps kernel-rv kernel-la $(DISK_RV_IMG) $(DISK_LA_IMG)
$(MAKE) user-apps user-apps-la kernel-rv kernel-la $(DISK_RV_IMG) $(DISK_LA_IMG)

# 拉取所有子模块,确保后续构建依赖完整。
submodules:
Expand All @@ -84,25 +99,35 @@ cargo-config:
$(STAMP_DIR):
mkdir -p $@

$(USER_BUILD_STAMP): $(USER_BUILD_DEPS) | $(STAMP_DIR) cargo-config
$(MAKE) -C user build
$(USER_BUILD_STAMP_RV): $(USER_BUILD_DEPS)
$(MAKE) -C user build ARCH=riscv64
touch $@

user-apps: $(USER_BUILD_STAMP)
$(USER_BUILD_STAMP_LA): $(USER_BUILD_DEPS)
$(MAKE) -C user build ARCH=loongarch64
touch $@

user-apps: $(USER_BUILD_STAMP_RV)
user-apps-la: $(USER_BUILD_STAMP_LA)

$(KERNEL_BUILD_STAMP_RV): $(KERNEL_BUILD_DEPS) | $(STAMP_DIR)
$(MAKE) -C os kernel ARCH=riscv64
touch $@

$(KERNEL_BUILD_STAMP): $(KERNEL_BUILD_DEPS) | $(STAMP_DIR) cargo-config
$(MAKE) -C os kernel
$(KERNEL_BUILD_STAMP_LA): $(KERNEL_BUILD_DEPS) | $(STAMP_DIR)
$(MAKE) -C os kernel ARCH=loongarch64
touch $@

kernel-rv: $(KERNEL_BUILD_STAMP)
kernel-rv: $(KERNEL_BUILD_STAMP_RV)
cp $(KERNEL_RV_ELF) $@

kernel-la: kernel-rv
@echo "warning: LoongArch kernel is not implemented in this repository yet; using kernel-rv as a temporary placeholder." >&2
cp kernel-rv $@
kernel-la: $(KERNEL_BUILD_STAMP_LA)
cp $(KERNEL_LA_ELF) $@

rootfs:
$(MAKE) -C $(ROOTFS_REPO) rootfs-init
$(ROOTFS_STAMP): $(ROOTFS_SRC_FILES) | $(STAMP_DIR)
rm -rf $(ROOTFS_DIR)
cp -a $(ROOTFS_SRC_DIR)/rootfs/. $(ROOTFS_DIR)/
touch $@

sync-rootfs-variants:
@test -d "$(ROOTFS_BASE_DIR)" || { \
Expand Down Expand Up @@ -155,19 +180,31 @@ check-kernel: $(RUN_KERNEL)
exit 1; \
}

check-user-apps:
@test -d "$(USER_BIN_DIR)" || { \
echo "missing user binaries in $(USER_BIN_DIR); run 'make all' first" >&2; \
check-kernel-la:
@test -x kernel-la || { \
echo "missing kernel-la; run 'make all' first" >&2; \
exit 1; \
}

check-user-apps-rv: user-apps
@test -d "$(USER_BIN_DIR_RV)" || { \
echo "missing user binaries in $(USER_BIN_DIR_RV); run 'make user-apps' first" >&2; \
exit 1; \
}

check-user-apps-la: user-apps-la
@test -d "$(USER_BIN_DIR_LA)" || { \
echo "missing user binaries in $(USER_BIN_DIR_LA); run 'make user-apps-la' first" >&2; \
exit 1; \
}

check-rootfs: rootfs
@test -d "$(ROOTFS_BASE_DIR)" || { \
echo "missing rootfs directory $(ROOTFS_BASE_DIR); run 'make all' first" >&2; \
@test -d "$(ROOTFS_DIR)" || { \
echo "missing rootfs directory $(ROOTFS_DIR); run 'make all' first" >&2; \
exit 1; \
}
@test -d "$(ROOTFS_BASE_DIR)/root" || { \
echo "rootfs is incomplete under $(ROOTFS_BASE_DIR); run 'make all' first" >&2; \
@test -d "$(ROOTFS_DIR)/root" || { \
echo "rootfs is incomplete under $(ROOTFS_DIR); run 'make all' first" >&2; \
exit 1; \
}

Expand Down Expand Up @@ -211,24 +248,43 @@ check-rootfs-la-ready:
exit 1; \
}

$(DISK_RV_IMG): force check-user-apps rootfs-rv check-rootfs-rv-ready $(OPTIONAL_RUNTIME_FILES) $(ROOTFS_RV_FILES) scripts/pack-disk-img.sh
MUSL_ARCH=$(RV_MUSL_ARCH) MUSL_LOADER_ALIASES="$(RV_MUSL_LOADER_ALIASES)" ./scripts/pack-disk-img.sh $(ROOTFS_RV_DIR) $(USER_BIN_DIR) $@
$(DISK_RV_IMG): force check-user-apps-rv rootfs-rv check-rootfs-rv-ready $(OPTIONAL_RUNTIME_FILES) $(ROOTFS_RV_FILES) scripts/pack-disk-img.sh
MUSL_ARCH=$(RV_MUSL_ARCH) MUSL_LOADER_ALIASES="$(RV_MUSL_LOADER_ALIASES)" ./scripts/pack-disk-img.sh $(ROOTFS_RV_DIR) $(USER_BIN_DIR_RV) $@

$(DISK_LA_IMG): force check-user-apps rootfs-la check-rootfs-la-ready $(OPTIONAL_RUNTIME_FILES) $(ROOTFS_LA_FILES) scripts/pack-disk-img.sh
MUSL_ARCH=$(LA_MUSL_ARCH) MUSL_LOADER_ALIASES="$(LA_MUSL_LOADER_ALIASES)" ./scripts/pack-disk-img.sh $(ROOTFS_LA_DIR) $(USER_BIN_DIR) $@
$(DISK_LA_IMG): force check-user-apps-la rootfs-la check-rootfs-la-ready $(OPTIONAL_RUNTIME_FILES) $(ROOTFS_LA_FILES) scripts/pack-disk-img.sh
MUSL_ARCH=$(LA_MUSL_ARCH) MUSL_LOADER_ALIASES="$(LA_MUSL_LOADER_ALIASES)" ./scripts/pack-disk-img.sh $(ROOTFS_LA_DIR) $(USER_BIN_DIR_LA) $@

force:

$(LA_BOOTLOADER_ELF): $(LA_BOOTLOADER_DEPS)
cd $(LA_BOOTLOADER_DIR) && cargo build --release

prepare-run-test-fs: | $(STAMP_DIR)
@if [ ! -f "$(TEST_FS)" ]; then \
echo "Test image not found: $(TEST_FS)"; \
exit 2; \
fi
cp -c "$(TEST_FS)" "$(RUN_TEST_FS)" 2>/dev/null || cp --reflink=auto "$(TEST_FS)" "$(RUN_TEST_FS)" 2>/dev/null || cp "$(TEST_FS)" "$(RUN_TEST_FS)"

prepare-run-test-fs-la: | $(STAMP_DIR)
@if [ ! -f "$(TEST_FS_LA)" ]; then \
echo "Test image not found: $(TEST_FS_LA)"; \
exit 2; \
fi
cp -c "$(TEST_FS_LA)" "$(RUN_TEST_FS_LA)" 2>/dev/null || cp --reflink=auto "$(TEST_FS_LA)" "$(RUN_TEST_FS_LA)" 2>/dev/null || cp "$(TEST_FS_LA)" "$(RUN_TEST_FS_LA)"

run: check-kernel $(RUN_DISK_IMG) prepare-run-test-fs
$(QEMU) -machine virt -kernel $(RUN_KERNEL) -m $(MEM) -nographic -smp $(SMP) -bios default $(QEMU_COMP_BLK_ARGS) -device virtio-net-device,netdev=net -netdev $(QEMU_NETDEV) -no-reboot -rtc base=utc $(QEMU_COMP_EXTRA_BLK_ARGS) $(QEMU_TRACE_ARGS)

run-la: check-kernel-la $(LA_BOOTLOADER_ELF) $(DISK_LA_IMG) prepare-run-test-fs-la
$(QEMU_LA) -machine virt -cpu la464 -kernel $(LA_BOOTLOADER_ELF) -device loader,file=kernel-la,addr=$(LA_KERNEL_ENTRY_PA) -m $(MEM_LA) -nographic -smp $(SMP) $(QEMU_LA_BLK_ARGS) -device virtio-net-pci,netdev=net0,id=net0 -netdev $(QEMU_LA_NETDEV) -no-reboot -rtc base=utc $(QEMU_LA_EXTRA_BLK_ARGS)

fast-run: check-kernel
$(QEMU) -machine virt -kernel kernel-rv -m $(MEM) -nographic -smp $(SMP) -bios default $(QEMU_COMP_BLK_ARGS) -device virtio-net-device,netdev=net -netdev $(QEMU_NETDEV) -no-reboot -rtc base=utc $(QEMU_COMP_EXTRA_BLK_ARGS) $(QEMU_TRACE_ARGS)

fast-run-la: check-kernel-la $(LA_BOOTLOADER_ELF)
$(QEMU_LA) -machine virt -cpu la464 -kernel $(LA_BOOTLOADER_ELF) -device loader,file=kernel-la,addr=$(LA_KERNEL_ENTRY_PA) -m $(MEM_LA) -nographic -smp $(SMP) $(QEMU_LA_BLK_ARGS) -device virtio-net-pci,netdev=net0,id=net0 -netdev $(QEMU_LA_NETDEV) -no-reboot -rtc base=utc $(QEMU_LA_EXTRA_BLK_ARGS)

run-trace: QEMU_TRACE_ARGS = -d int,in_asm -D qemu.log
run-trace: run

Expand Down Expand Up @@ -257,6 +313,9 @@ fmt:
cd fs; cargo fmt; cd ../fs-fuse; cargo fmt; cd ../os; cargo fmt; cd ../user; cargo fmt; cd ..

clean:
rm -rf $(STAMP_DIR) $(RUN_TEST_FS) $(DISK_RV_IMG) $(DISK_LA_IMG) kernel-rv kernel-la os/.cargo user/.cargo $(ROOTFS_RV_DIR) $(ROOTFS_LA_DIR) $(ROOTFS_RV_BUILD_DIR) $(ROOTFS_LA_BUILD_DIR) $(ROOTFS_RV_STAMP_DIR) $(ROOTFS_LA_STAMP_DIR)
rm -rf $(STAMP_DIR) $(RUN_TEST_FS) $(DISK_RV_IMG) $(DISK_LA_IMG) kernel-rv kernel-la os/.cargo user/.cargo
$(MAKE) -C os clean
$(MAKE) -C user clean

clean-all: clean
rm -rf $(ROOTFS_RV_DIR) $(ROOTFS_LA_DIR) $(ROOTFS_RV_BUILD_DIR) $(ROOTFS_LA_BUILD_DIR) $(ROOTFS_RV_STAMP_DIR) $(ROOTFS_LA_STAMP_DIR)
8 changes: 8 additions & 0 deletions bootloader/loongarch64-direct/.cargo/config.toml
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
[build]
target = "loongarch64-unknown-none"

[target.loongarch64-unknown-none]
rustflags = [
"-Clink-arg=-Tlinker.ld",
]

7 changes: 7 additions & 0 deletions bootloader/loongarch64-direct/Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

11 changes: 11 additions & 0 deletions bootloader/loongarch64-direct/Cargo.toml
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
[package]
name = "loongarch64-direct-boot"
version = "0.1.0"
edition = "2021"
build = "build.rs"

[profile.release]
opt-level = "z"
lto = true
strip = true
panic = "abort"
5 changes: 5 additions & 0 deletions bootloader/loongarch64-direct/build.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
fn main() {
println!("cargo:rustc-link-arg=-Tlinker.ld");
println!("cargo:rerun-if-changed=linker.ld");
println!("cargo:rerun-if-changed=src/main.rs");
}
31 changes: 31 additions & 0 deletions bootloader/loongarch64-direct/linker.ld
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
OUTPUT_ARCH(loongarch)
ENTRY(_start)

BASE_ADDRESS = 0x81000000;

SECTIONS
{
. = BASE_ADDRESS;

.text : ALIGN(16) {
*(.text.entry)
*(.text .text.*)
}

.rodata : ALIGN(16) {
*(.rodata .rodata.*)
}

.data : ALIGN(16) {
*(.data .data.*)
}

.bss : ALIGN(16) {
*(.bss .bss.*)
}

/DISCARD/ : {
*(.eh_frame)
*(.debug*)
}
}
81 changes: 81 additions & 0 deletions bootloader/loongarch64-direct/src/main.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,81 @@
#![no_std]
#![no_main]
#![feature(naked_functions)]
use core::arch::{asm, naked_asm};
use core::panic::PanicInfo;

const UART_BASE: usize = 0x1fe0_01e0;
const IO_OFFSET: usize = 0x8000_0000_0000_0000;
const UART_THR: usize = 0x00;
const UART_LSR: usize = 0x05;
const UART_LSR_THRE: u8 = 1 << 5;
const KERNEL_ENTRY: usize = 0x9000_0000_9000_0000;

#[unsafe(no_mangle)]
static mut BOOT_STACK: [u8; 4096] = [0; 4096];

#[naked]
#[unsafe(no_mangle)]
pub unsafe extern "C" fn _start() -> ! {
naked_asm!(
// Setup DMW0: UC window 0x8000xxxxxxxxxxxx → PLV0
"ori $t0, $zero, 0x1",
"lu52i.d $t0, $t0, -2048",
"csrwr $t0, 0x180",
// Setup DMW1: CA window 0x9000xxxxxxxxxxxx → PLV0
"ori $t0, $zero, 0x11",
"lu52i.d $t0, $t0, -1792",
"csrwr $t0, 0x181",
// Setup stack
"la.global $t0, {stack}",
"ori $t1, $zero, 2048",
"add.d $sp, $t0, $t1",
"add.d $sp, $sp, $t1",
"csrrd $a0, 0x20",
"b {main}",
stack = sym BOOT_STACK,
main = sym boot_main,
)
}

#[unsafe(no_mangle)]
extern "C" fn boot_main(hart_id: usize) -> ! {
if hart_id == 0 {
puts("[boot] loongarch64 direct loader\r\n");
puts("[boot] jumping to kernel @ 0x90000000\r\n");
}
unsafe {
let entry: extern "C" fn(usize) -> ! = core::mem::transmute(KERNEL_ENTRY);
entry(hart_id);
}
}

fn puts(s: &str) {
for byte in s.bytes() {
putc(byte);
}
}

fn putc(byte: u8) {
unsafe {
let uart = IO_OFFSET | UART_BASE;
while (mmio_read8(uart + UART_LSR) & UART_LSR_THRE) == 0 {}
mmio_write8(uart + UART_THR, byte);
}
}

unsafe fn mmio_read8(addr: usize) -> u8 {
core::ptr::read_volatile(addr as *const u8)
}

unsafe fn mmio_write8(addr: usize, value: u8) {
core::ptr::write_volatile(addr as *mut u8, value)
}

#[panic_handler]
fn panic(_info: &PanicInfo) -> ! {
puts("[boot] panic\r\n");
loop {
unsafe { asm!("idle 0", options(nomem, nostack)) };
}
}
3 changes: 2 additions & 1 deletion os/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -31,4 +31,5 @@ strum_macros = "0.28.0"
fat32 = []
easyfs = []
ext4 = []
default = ["ext4"]
platform-qemu-virt = []
default = ["ext4", "platform-qemu-virt"]
Loading
Loading