From 41b79cf8233171781afd4d269877bfa6dc502727 Mon Sep 17 00:00:00 2001 From: Jianfeng Jiang Date: Tue, 22 Nov 2022 16:42:26 +0800 Subject: [PATCH] reorgnize current codes and rename project to jinux --- .gitattributes | 16 +- README.md | 16 +- docs/README.md | 2 +- docs/book.toml | 2 +- docs/src/README.md | 16 +- docs/src/capabilities/README.md | 4 +- .../capabilities/zero_cost_capabilities.md | 6 +- docs/src/privilege_separation/README.md | 6 +- .../pci_virtio_drivers.md | 6 +- .../privilege_separation/syscall_workflow.md | 36 ++--- src/.cargo/config.toml | 2 +- src/Cargo.lock | 151 ++++++++++-------- src/Cargo.toml | 27 ++-- src/README.md | 20 +-- src/{kxos-user => apps}/busybox/README.md | 0 src/{kxos-user => apps}/busybox/busybox | 0 src/{kxos-user => apps}/execve/Makefile | 0 src/{kxos-user => apps}/execve/execve | 0 src/{kxos-user => apps}/execve/execve.c | 0 src/{kxos-user => apps}/execve/hello | 0 src/{kxos-user => apps}/execve/hello.c | 0 src/{kxos-user => apps}/fork/Makefile | 0 src/{kxos-user => apps}/fork/fork | 0 src/{kxos-user => apps}/fork/fork.s | 0 src/{kxos-user => apps}/fork_c/Makefile | 0 src/{kxos-user => apps}/fork_c/fork | 0 src/{kxos-user => apps}/fork_c/fork.c | 0 src/{kxos-user => apps}/hello_c/Makefile | 0 src/apps/hello_c/hello | Bin 0 -> 871896 bytes src/{kxos-user => apps}/hello_c/hello.c | 0 src/{kxos-user => apps}/hello_world/Makefile | 0 .../hello_world/hello_world | 0 .../hello_world/hello_world.s | 0 src/{kxos-user => apps}/signal_c/Makefile | 0 src/{kxos-user => apps}/signal_c/signal_test | 0 .../signal_c/signal_test.c | 2 +- .../jinux-frame}/Cargo.toml | 4 +- .../jinux-frame}/src/cell.rs | 0 .../jinux-frame}/src/config.rs | 0 .../jinux-frame}/src/cpu.rs | 2 +- .../jinux-frame}/src/device/framebuffer.rs | 0 .../jinux-frame}/src/device/io_port.rs | 0 .../jinux-frame}/src/device/mod.rs | 0 .../jinux-frame}/src/device/pci.rs | 0 .../jinux-frame}/src/device/pic.rs | 0 .../jinux-frame}/src/device/serial.rs | 0 .../jinux-frame}/src/error.rs | 0 .../jinux-frame}/src/lib.rs | 3 +- .../jinux-frame}/src/linker.ld | 0 .../jinux-frame}/src/log.rs | 0 .../jinux-frame}/src/mm/address.rs | 0 .../jinux-frame}/src/mm/frame_allocator.rs | 0 .../jinux-frame}/src/mm/heap_allocator.rs | 0 .../jinux-frame}/src/mm/memory_set.rs | 0 .../jinux-frame}/src/mm/mod.rs | 0 .../jinux-frame}/src/mm/page_table.rs | 0 .../jinux-frame}/src/prelude.rs | 0 .../jinux-frame}/src/sync/atomic_bits.rs | 0 .../jinux-frame}/src/sync/mod.rs | 0 .../jinux-frame}/src/sync/rcu/mod.rs | 0 .../jinux-frame}/src/sync/rcu/monitor.rs | 0 .../jinux-frame}/src/sync/rcu/owner_ptr.rs | 0 .../jinux-frame}/src/sync/spin.rs | 0 .../jinux-frame}/src/sync/up.rs | 0 .../jinux-frame}/src/sync/wait.rs | 0 .../jinux-frame}/src/task/mod.rs | 0 .../jinux-frame}/src/task/processor.rs | 0 .../jinux-frame}/src/task/scheduler.rs | 0 .../jinux-frame}/src/task/switch.S | 0 .../jinux-frame}/src/task/task.rs | 0 .../jinux-frame}/src/timer.rs | 0 .../jinux-frame}/src/trap/handler.rs | 4 +- .../jinux-frame}/src/trap/irq.rs | 2 +- .../jinux-frame}/src/trap/mod.rs | 0 .../jinux-frame}/src/trap/trap.S | 0 .../jinux-frame}/src/trap/vector.S | 0 .../jinux-frame}/src/user.rs | 2 +- .../jinux-frame}/src/util/align_ext.rs | 0 .../jinux-frame}/src/util/mod.rs | 0 .../src/util/recycle_allocator.rs | 0 .../jinux-frame}/src/util/type_map.rs | 0 .../jinux-frame}/src/vm/frame.rs | 3 +- .../jinux-frame}/src/vm/io.rs | 2 +- .../jinux-frame}/src/vm/mod.rs | 3 +- src/framework/jinux-frame/src/vm/offset.rs | 35 ++++ .../jinux-frame}/src/vm/space.rs | 0 .../jinux-frame}/src/x86_64_util.rs | 0 .../pod-derive}/Cargo.toml | 2 +- .../pod-derive}/src/lib.rs | 12 +- .../pod}/Cargo.toml | 2 +- .../vm/pod.rs => framework/pod/src/lib.rs} | 42 +---- src/{kxos-boot => jinux-boot}/Cargo.toml | 2 +- src/{kxos-boot => jinux-boot}/src/main.rs | 0 src/kxos-std/src/user_apps.rs | 122 -------------- src/kxos-user/hello_c/hello | 3 - src/kxos-virtio/Cargo.toml | 18 --- .../comps/jinux-pci}/Cargo.toml | 9 +- .../comps/jinux-pci}/src/capability/exp.rs | 0 .../comps/jinux-pci}/src/capability/mod.rs | 0 .../comps/jinux-pci}/src/capability/msi.rs | 0 .../comps/jinux-pci}/src/capability/msix.rs | 0 .../comps/jinux-pci}/src/capability/pm.rs | 0 .../comps/jinux-pci}/src/capability/sata.rs | 0 .../jinux-pci}/src/capability/vendor/mod.rs | 0 .../src/capability/vendor/virtio.rs | 0 .../comps/jinux-pci}/src/lib.rs | 7 +- .../comps/jinux-pci}/src/msix.rs | 7 +- .../comps/jinux-pci}/src/util.rs | 10 +- src/services/comps/jinux-virtio/Cargo.toml | 19 +++ .../comps/jinux-virtio}/src/block.rs | 6 +- .../comps/jinux-virtio}/src/lib.rs | 21 ++- .../comps/jinux-virtio}/src/queue.rs | 8 +- .../libs/jinux-rights-proc}/Cargo.toml | 2 +- .../libs/jinux-rights-proc}/src/lib.rs | 4 +- .../jinux-rights-proc}/src/require_attr.rs | 12 +- .../libs/jinux-std}/Cargo.toml | 17 +- .../libs/jinux-std}/src/driver/mod.rs | 0 .../libs/jinux-std}/src/driver/pci/mod.rs | 8 +- .../jinux-std}/src/driver/pci/virtio/block.rs | 10 +- .../jinux-std}/src/driver/pci/virtio/mod.rs | 0 .../libs/jinux-std}/src/error.rs | 20 +-- .../libs/jinux-std}/src/fs/events.rs | 0 .../libs/jinux-std}/src/fs/fcntl.rs | 0 .../libs/jinux-std}/src/fs/file.rs | 0 .../libs/jinux-std}/src/fs/file_table.rs | 0 .../libs/jinux-std}/src/fs/ioctl/mod.rs | 0 .../libs/jinux-std}/src/fs/mod.rs | 0 .../libs/jinux-std}/src/fs/poll.rs | 0 .../libs/jinux-std}/src/fs/stat.rs | 0 .../libs/jinux-std}/src/fs/stdio.rs | 0 .../libs/jinux-std}/src/lib.rs | 10 +- .../libs/jinux-std}/src/memory/mod.rs | 3 +- .../libs/jinux-std}/src/memory/vm_page.rs | 2 +- .../libs/jinux-std}/src/prelude.rs | 6 +- .../libs/jinux-std}/src/process/clone.rs | 2 +- .../jinux-std}/src/process/elf/aux_vec.rs | 0 .../libs/jinux-std}/src/process/elf/elf.rs | 2 +- .../jinux-std}/src/process/elf/init_stack.rs | 2 +- .../libs/jinux-std}/src/process/elf/mod.rs | 2 +- .../libs/jinux-std}/src/process/exception.rs | 2 +- .../jinux-std}/src/process/fifo_scheduler.rs | 2 +- .../libs/jinux-std}/src/process/mod.rs | 4 +- .../libs/jinux-std}/src/process/name.rs | 0 .../jinux-std}/src/process/process_filter.rs | 0 .../jinux-std}/src/process/process_group.rs | 0 .../src/process/process_vm/mmap_area.rs | 2 +- .../jinux-std}/src/process/process_vm/mod.rs | 0 .../src/process/process_vm/user_heap.rs | 2 +- .../jinux-std}/src/process/signal/c_types.rs | 2 +- .../src/process/signal/constants.rs | 0 .../libs/jinux-std}/src/process/signal/mod.rs | 4 +- .../src/process/signal/sig_action.rs | 2 +- .../src/process/signal/sig_disposition.rs | 0 .../jinux-std}/src/process/signal/sig_mask.rs | 0 .../jinux-std}/src/process/signal/sig_num.rs | 0 .../src/process/signal/sig_queues.rs | 0 .../src/process/signal/signals/fault.rs | 4 +- .../src/process/signal/signals/kernel.rs | 0 .../src/process/signal/signals/mod.rs | 0 .../src/process/signal/signals/user.rs | 0 .../libs/jinux-std}/src/process/status.rs | 0 .../libs/jinux-std}/src/process/table.rs | 0 .../libs/jinux-std}/src/process/task.rs | 2 +- .../libs/jinux-std}/src/process/wait.rs | 2 +- .../libs/jinux-std}/src/rights.rs | 46 +++--- .../libs/jinux-std}/src/syscall/access.rs | 0 .../libs/jinux-std}/src/syscall/arch_prctl.rs | 2 +- .../libs/jinux-std}/src/syscall/brk.rs | 0 .../libs/jinux-std}/src/syscall/clone.rs | 2 +- .../libs/jinux-std}/src/syscall/close.rs | 0 .../libs/jinux-std}/src/syscall/constants.rs | 0 .../libs/jinux-std}/src/syscall/execve.rs | 2 +- .../libs/jinux-std}/src/syscall/exit.rs | 0 .../libs/jinux-std}/src/syscall/exit_group.rs | 0 .../libs/jinux-std}/src/syscall/fcntl.rs | 0 .../libs/jinux-std}/src/syscall/fork.rs | 2 +- .../libs/jinux-std}/src/syscall/fstat.rs | 2 +- .../libs/jinux-std}/src/syscall/futex.rs | 2 +- .../libs/jinux-std}/src/syscall/getcwd.rs | 0 .../libs/jinux-std}/src/syscall/getegid.rs | 0 .../libs/jinux-std}/src/syscall/geteuid.rs | 0 .../libs/jinux-std}/src/syscall/getgid.rs | 0 .../libs/jinux-std}/src/syscall/getpgrp.rs | 0 .../libs/jinux-std}/src/syscall/getpid.rs | 0 .../libs/jinux-std}/src/syscall/getppid.rs | 0 .../libs/jinux-std}/src/syscall/gettid.rs | 0 .../libs/jinux-std}/src/syscall/getuid.rs | 0 .../libs/jinux-std}/src/syscall/ioctl.rs | 0 .../libs/jinux-std}/src/syscall/kill.rs | 0 .../libs/jinux-std}/src/syscall/lseek.rs | 0 .../libs/jinux-std}/src/syscall/lstat.rs | 0 .../libs/jinux-std}/src/syscall/mmap.rs | 2 +- .../libs/jinux-std}/src/syscall/mod.rs | 2 +- .../libs/jinux-std}/src/syscall/mprotect.rs | 2 +- .../libs/jinux-std}/src/syscall/munmap.rs | 2 +- .../libs/jinux-std}/src/syscall/openat.rs | 0 .../libs/jinux-std}/src/syscall/poll.rs | 0 .../libs/jinux-std}/src/syscall/prctl.rs | 0 .../libs/jinux-std}/src/syscall/read.rs | 0 .../libs/jinux-std}/src/syscall/readlink.rs | 0 .../jinux-std}/src/syscall/rt_sigaction.rs | 0 .../jinux-std}/src/syscall/rt_sigprocmask.rs | 2 +- .../jinux-std}/src/syscall/rt_sigreturn.rs | 2 +- .../jinux-std}/src/syscall/sched_yield.rs | 0 .../libs/jinux-std}/src/syscall/setpgid.rs | 0 .../libs/jinux-std}/src/syscall/tgkill.rs | 2 +- .../libs/jinux-std}/src/syscall/uname.rs | 0 .../libs/jinux-std}/src/syscall/wait4.rs | 0 .../libs/jinux-std}/src/syscall/waitid.rs | 0 .../libs/jinux-std}/src/syscall/write.rs | 0 .../libs/jinux-std}/src/syscall/writev.rs | 0 .../jinux-std}/src/tty/line_discipline.rs | 0 .../libs/jinux-std}/src/tty/mod.rs | 2 +- .../libs/jinux-std}/src/tty/termio.rs | 0 src/services/libs/jinux-std/src/user_apps.rs | 121 ++++++++++++++ .../libs/jinux-std}/src/util/mod.rs | 0 .../libs/jinux-std}/src/vm/mod.rs | 4 +- .../libs/jinux-std}/src/vm/vmar/dyn_cap.rs | 8 +- .../libs/jinux-std}/src/vm/vmar/mod.rs | 10 +- .../libs/jinux-std}/src/vm/vmar/options.rs | 10 +- .../libs/jinux-std}/src/vm/vmar/static_cap.rs | 10 +- .../libs/jinux-std}/src/vm/vmo/dyn_cap.rs | 4 +- .../libs/jinux-std}/src/vm/vmo/mod.rs | 4 +- .../libs/jinux-std}/src/vm/vmo/options.rs | 16 +- .../libs/jinux-std}/src/vm/vmo/pager.rs | 4 +- .../libs/jinux-std}/src/vm/vmo/static_cap.rs | 6 +- src/services/libs/jinux-util/Cargo.toml | 14 ++ .../libs/jinux-util}/src/frame_ptr.rs | 5 +- .../libs/jinux-util}/src/lib.rs | 2 +- .../libs/typeflags-util}/Cargo.toml | 6 +- .../libs/typeflags-util}/src/assert.rs | 0 .../libs/typeflags-util}/src/bool.rs | 0 .../libs/typeflags-util}/src/if_.rs | 0 .../libs/typeflags-util}/src/lib.rs | 2 +- .../libs/typeflags-util}/src/same.rs | 0 .../libs/typeflags-util}/src/set.rs | 0 .../libs/typeflags}/Cargo.toml | 2 +- .../libs/typeflags}/src/flag_set.rs | 12 +- .../libs/typeflags}/src/lib.rs | 16 +- .../libs/typeflags}/src/type_flag.rs | 18 ++- .../libs/typeflags}/src/util.rs | 8 +- src/src/main.rs | 16 +- src/tests/test_example.rs | 8 +- src/tests/timer_test.rs | 12 +- src/x86_64-custom.json | 2 +- 245 files changed, 608 insertions(+), 578 deletions(-) rename src/{kxos-user => apps}/busybox/README.md (100%) rename src/{kxos-user => apps}/busybox/busybox (100%) rename src/{kxos-user => apps}/execve/Makefile (100%) rename src/{kxos-user => apps}/execve/execve (100%) rename src/{kxos-user => apps}/execve/execve.c (100%) rename src/{kxos-user => apps}/execve/hello (100%) rename src/{kxos-user => apps}/execve/hello.c (100%) rename src/{kxos-user => apps}/fork/Makefile (100%) rename src/{kxos-user => apps}/fork/fork (100%) rename src/{kxos-user => apps}/fork/fork.s (100%) rename src/{kxos-user => apps}/fork_c/Makefile (100%) rename src/{kxos-user => apps}/fork_c/fork (100%) rename src/{kxos-user => apps}/fork_c/fork.c (100%) rename src/{kxos-user => apps}/hello_c/Makefile (100%) create mode 100755 src/apps/hello_c/hello rename src/{kxos-user => apps}/hello_c/hello.c (100%) rename src/{kxos-user => apps}/hello_world/Makefile (100%) rename src/{kxos-user => apps}/hello_world/hello_world (100%) rename src/{kxos-user => apps}/hello_world/hello_world.s (100%) rename src/{kxos-user => apps}/signal_c/Makefile (100%) rename src/{kxos-user => apps}/signal_c/signal_test (100%) rename src/{kxos-user => apps}/signal_c/signal_test.c (99%) rename src/{kxos-frame => framework/jinux-frame}/Cargo.toml (87%) rename src/{kxos-frame => framework/jinux-frame}/src/cell.rs (100%) rename src/{kxos-frame => framework/jinux-frame}/src/config.rs (100%) rename src/{kxos-frame => framework/jinux-frame}/src/cpu.rs (99%) rename src/{kxos-frame => framework/jinux-frame}/src/device/framebuffer.rs (100%) rename src/{kxos-frame => framework/jinux-frame}/src/device/io_port.rs (100%) rename src/{kxos-frame => framework/jinux-frame}/src/device/mod.rs (100%) rename src/{kxos-frame => framework/jinux-frame}/src/device/pci.rs (100%) rename src/{kxos-frame => framework/jinux-frame}/src/device/pic.rs (100%) rename src/{kxos-frame => framework/jinux-frame}/src/device/serial.rs (100%) rename src/{kxos-frame => framework/jinux-frame}/src/error.rs (100%) rename src/{kxos-frame => framework/jinux-frame}/src/lib.rs (98%) rename src/{kxos-frame => framework/jinux-frame}/src/linker.ld (100%) rename src/{kxos-frame => framework/jinux-frame}/src/log.rs (100%) rename src/{kxos-frame => framework/jinux-frame}/src/mm/address.rs (100%) rename src/{kxos-frame => framework/jinux-frame}/src/mm/frame_allocator.rs (100%) rename src/{kxos-frame => framework/jinux-frame}/src/mm/heap_allocator.rs (100%) rename src/{kxos-frame => framework/jinux-frame}/src/mm/memory_set.rs (100%) rename src/{kxos-frame => framework/jinux-frame}/src/mm/mod.rs (100%) rename src/{kxos-frame => framework/jinux-frame}/src/mm/page_table.rs (100%) rename src/{kxos-frame => framework/jinux-frame}/src/prelude.rs (100%) rename src/{kxos-frame => framework/jinux-frame}/src/sync/atomic_bits.rs (100%) rename src/{kxos-frame => framework/jinux-frame}/src/sync/mod.rs (100%) rename src/{kxos-frame => framework/jinux-frame}/src/sync/rcu/mod.rs (100%) rename src/{kxos-frame => framework/jinux-frame}/src/sync/rcu/monitor.rs (100%) rename src/{kxos-frame => framework/jinux-frame}/src/sync/rcu/owner_ptr.rs (100%) rename src/{kxos-frame => framework/jinux-frame}/src/sync/spin.rs (100%) rename src/{kxos-frame => framework/jinux-frame}/src/sync/up.rs (100%) rename src/{kxos-frame => framework/jinux-frame}/src/sync/wait.rs (100%) rename src/{kxos-frame => framework/jinux-frame}/src/task/mod.rs (100%) rename src/{kxos-frame => framework/jinux-frame}/src/task/processor.rs (100%) rename src/{kxos-frame => framework/jinux-frame}/src/task/scheduler.rs (100%) rename src/{kxos-frame => framework/jinux-frame}/src/task/switch.S (100%) rename src/{kxos-frame => framework/jinux-frame}/src/task/task.rs (100%) rename src/{kxos-frame => framework/jinux-frame}/src/timer.rs (100%) rename src/{kxos-frame => framework/jinux-frame}/src/trap/handler.rs (97%) rename src/{kxos-frame => framework/jinux-frame}/src/trap/irq.rs (99%) rename src/{kxos-frame => framework/jinux-frame}/src/trap/mod.rs (100%) rename src/{kxos-frame => framework/jinux-frame}/src/trap/trap.S (100%) rename src/{kxos-frame => framework/jinux-frame}/src/trap/vector.S (100%) rename src/{kxos-frame => framework/jinux-frame}/src/user.rs (99%) rename src/{kxos-frame => framework/jinux-frame}/src/util/align_ext.rs (100%) rename src/{kxos-frame => framework/jinux-frame}/src/util/mod.rs (100%) rename src/{kxos-frame => framework/jinux-frame}/src/util/recycle_allocator.rs (100%) rename src/{kxos-frame => framework/jinux-frame}/src/util/type_map.rs (100%) rename src/{kxos-frame => framework/jinux-frame}/src/vm/frame.rs (99%) rename src/{kxos-frame => framework/jinux-frame}/src/vm/io.rs (99%) rename src/{kxos-frame => framework/jinux-frame}/src/vm/mod.rs (90%) create mode 100644 src/framework/jinux-frame/src/vm/offset.rs rename src/{kxos-frame => framework/jinux-frame}/src/vm/space.rs (100%) rename src/{kxos-frame => framework/jinux-frame}/src/x86_64_util.rs (100%) rename src/{kxos-frame-pod-derive => framework/pod-derive}/Cargo.toml (89%) rename src/{kxos-frame-pod-derive => framework/pod-derive}/src/lib.rs (88%) rename src/{kxos-typeflags-util => framework/pod}/Cargo.toml (84%) rename src/{kxos-frame/src/vm/pod.rs => framework/pod/src/lib.rs} (64%) rename src/{kxos-boot => jinux-boot}/Cargo.toml (94%) rename src/{kxos-boot => jinux-boot}/src/main.rs (100%) delete mode 100644 src/kxos-std/src/user_apps.rs delete mode 100755 src/kxos-user/hello_c/hello delete mode 100644 src/kxos-virtio/Cargo.toml rename src/{kxos-pci => services/comps/jinux-pci}/Cargo.toml (56%) rename src/{kxos-pci => services/comps/jinux-pci}/src/capability/exp.rs (100%) rename src/{kxos-pci => services/comps/jinux-pci}/src/capability/mod.rs (100%) rename src/{kxos-pci => services/comps/jinux-pci}/src/capability/msi.rs (100%) rename src/{kxos-pci => services/comps/jinux-pci}/src/capability/msix.rs (100%) rename src/{kxos-pci => services/comps/jinux-pci}/src/capability/pm.rs (100%) rename src/{kxos-pci => services/comps/jinux-pci}/src/capability/sata.rs (100%) rename src/{kxos-pci => services/comps/jinux-pci}/src/capability/vendor/mod.rs (100%) rename src/{kxos-pci => services/comps/jinux-pci}/src/capability/vendor/virtio.rs (100%) rename src/{kxos-pci => services/comps/jinux-pci}/src/lib.rs (94%) rename src/{kxos-pci => services/comps/jinux-pci}/src/msix.rs (93%) rename src/{kxos-pci => services/comps/jinux-pci}/src/util.rs (98%) create mode 100644 src/services/comps/jinux-virtio/Cargo.toml rename src/{kxos-virtio => services/comps/jinux-virtio}/src/block.rs (91%) rename src/{kxos-virtio => services/comps/jinux-virtio}/src/lib.rs (94%) rename src/{kxos-virtio => services/comps/jinux-virtio}/src/queue.rs (97%) rename src/{kxos-rights-proc => services/libs/jinux-rights-proc}/Cargo.toml (91%) rename src/{kxos-rights-proc => services/libs/jinux-rights-proc}/src/lib.rs (96%) rename src/{kxos-rights-proc => services/libs/jinux-rights-proc}/src/require_attr.rs (92%) rename src/{kxos-std => services/libs/jinux-std}/Cargo.toml (52%) rename src/{kxos-std => services/libs/jinux-std}/src/driver/mod.rs (100%) rename src/{kxos-std => services/libs/jinux-std}/src/driver/pci/mod.rs (72%) rename src/{kxos-std => services/libs/jinux-std}/src/driver/pci/virtio/block.rs (97%) rename src/{kxos-std => services/libs/jinux-std}/src/driver/pci/virtio/mod.rs (100%) rename src/{kxos-std => services/libs/jinux-std}/src/error.rs (92%) rename src/{kxos-std => services/libs/jinux-std}/src/fs/events.rs (100%) rename src/{kxos-std => services/libs/jinux-std}/src/fs/fcntl.rs (100%) rename src/{kxos-std => services/libs/jinux-std}/src/fs/file.rs (100%) rename src/{kxos-std => services/libs/jinux-std}/src/fs/file_table.rs (100%) rename src/{kxos-std => services/libs/jinux-std}/src/fs/ioctl/mod.rs (100%) rename src/{kxos-std => services/libs/jinux-std}/src/fs/mod.rs (100%) rename src/{kxos-std => services/libs/jinux-std}/src/fs/poll.rs (100%) rename src/{kxos-std => services/libs/jinux-std}/src/fs/stat.rs (100%) rename src/{kxos-std => services/libs/jinux-std}/src/fs/stdio.rs (100%) rename src/{kxos-std => services/libs/jinux-std}/src/lib.rs (90%) rename src/{kxos-std => services/libs/jinux-std}/src/memory/mod.rs (97%) rename src/{kxos-std => services/libs/jinux-std}/src/memory/vm_page.rs (98%) rename src/{kxos-std => services/libs/jinux-std}/src/prelude.rs (82%) rename src/{kxos-std => services/libs/jinux-std}/src/process/clone.rs (99%) rename src/{kxos-std => services/libs/jinux-std}/src/process/elf/aux_vec.rs (100%) rename src/{kxos-std => services/libs/jinux-std}/src/process/elf/elf.rs (99%) rename src/{kxos-std => services/libs/jinux-std}/src/process/elf/init_stack.rs (99%) rename src/{kxos-std => services/libs/jinux-std}/src/process/elf/mod.rs (96%) rename src/{kxos-std => services/libs/jinux-std}/src/process/exception.rs (93%) rename src/{kxos-std => services/libs/jinux-std}/src/process/fifo_scheduler.rs (92%) rename src/{kxos-std => services/libs/jinux-std}/src/process/mod.rs (99%) rename src/{kxos-std => services/libs/jinux-std}/src/process/name.rs (100%) rename src/{kxos-std => services/libs/jinux-std}/src/process/process_filter.rs (100%) rename src/{kxos-std => services/libs/jinux-std}/src/process/process_group.rs (100%) rename src/{kxos-std => services/libs/jinux-std}/src/process/process_vm/mmap_area.rs (98%) rename src/{kxos-std => services/libs/jinux-std}/src/process/process_vm/mod.rs (100%) rename src/{kxos-std => services/libs/jinux-std}/src/process/process_vm/user_heap.rs (98%) rename src/{kxos-std => services/libs/jinux-std}/src/process/signal/c_types.rs (98%) rename src/{kxos-std => services/libs/jinux-std}/src/process/signal/constants.rs (100%) rename src/{kxos-std => services/libs/jinux-std}/src/process/signal/mod.rs (98%) rename src/{kxos-std => services/libs/jinux-std}/src/process/signal/sig_action.rs (99%) rename src/{kxos-std => services/libs/jinux-std}/src/process/signal/sig_disposition.rs (100%) rename src/{kxos-std => services/libs/jinux-std}/src/process/signal/sig_mask.rs (100%) rename src/{kxos-std => services/libs/jinux-std}/src/process/signal/sig_num.rs (100%) rename src/{kxos-std => services/libs/jinux-std}/src/process/signal/sig_queues.rs (100%) rename src/{kxos-std => services/libs/jinux-std}/src/process/signal/signals/fault.rs (96%) rename src/{kxos-std => services/libs/jinux-std}/src/process/signal/signals/kernel.rs (100%) rename src/{kxos-std => services/libs/jinux-std}/src/process/signal/signals/mod.rs (100%) rename src/{kxos-std => services/libs/jinux-std}/src/process/signal/signals/user.rs (100%) rename src/{kxos-std => services/libs/jinux-std}/src/process/status.rs (100%) rename src/{kxos-std => services/libs/jinux-std}/src/process/table.rs (100%) rename src/{kxos-std => services/libs/jinux-std}/src/process/task.rs (99%) rename src/{kxos-std => services/libs/jinux-std}/src/process/wait.rs (97%) rename src/{kxos-std => services/libs/jinux-std}/src/rights.rs (53%) rename src/{kxos-std => services/libs/jinux-std}/src/syscall/access.rs (100%) rename src/{kxos-std => services/libs/jinux-std}/src/syscall/arch_prctl.rs (97%) rename src/{kxos-std => services/libs/jinux-std}/src/syscall/brk.rs (100%) rename src/{kxos-std => services/libs/jinux-std}/src/syscall/clone.rs (97%) rename src/{kxos-std => services/libs/jinux-std}/src/syscall/close.rs (100%) rename src/{kxos-std => services/libs/jinux-std}/src/syscall/constants.rs (100%) rename src/{kxos-std => services/libs/jinux-std}/src/syscall/execve.rs (98%) rename src/{kxos-std => services/libs/jinux-std}/src/syscall/exit.rs (100%) rename src/{kxos-std => services/libs/jinux-std}/src/syscall/exit_group.rs (100%) rename src/{kxos-std => services/libs/jinux-std}/src/syscall/fcntl.rs (100%) rename src/{kxos-std => services/libs/jinux-std}/src/syscall/fork.rs (96%) rename src/{kxos-std => services/libs/jinux-std}/src/syscall/fstat.rs (95%) rename src/{kxos-std => services/libs/jinux-std}/src/syscall/futex.rs (99%) rename src/{kxos-std => services/libs/jinux-std}/src/syscall/getcwd.rs (100%) rename src/{kxos-std => services/libs/jinux-std}/src/syscall/getegid.rs (100%) rename src/{kxos-std => services/libs/jinux-std}/src/syscall/geteuid.rs (100%) rename src/{kxos-std => services/libs/jinux-std}/src/syscall/getgid.rs (100%) rename src/{kxos-std => services/libs/jinux-std}/src/syscall/getpgrp.rs (100%) rename src/{kxos-std => services/libs/jinux-std}/src/syscall/getpid.rs (100%) rename src/{kxos-std => services/libs/jinux-std}/src/syscall/getppid.rs (100%) rename src/{kxos-std => services/libs/jinux-std}/src/syscall/gettid.rs (100%) rename src/{kxos-std => services/libs/jinux-std}/src/syscall/getuid.rs (100%) rename src/{kxos-std => services/libs/jinux-std}/src/syscall/ioctl.rs (100%) rename src/{kxos-std => services/libs/jinux-std}/src/syscall/kill.rs (100%) rename src/{kxos-std => services/libs/jinux-std}/src/syscall/lseek.rs (100%) rename src/{kxos-std => services/libs/jinux-std}/src/syscall/lstat.rs (100%) rename src/{kxos-std => services/libs/jinux-std}/src/syscall/mmap.rs (98%) rename src/{kxos-std => services/libs/jinux-std}/src/syscall/mod.rs (99%) rename src/{kxos-std => services/libs/jinux-std}/src/syscall/mprotect.rs (95%) rename src/{kxos-std => services/libs/jinux-std}/src/syscall/munmap.rs (81%) rename src/{kxos-std => services/libs/jinux-std}/src/syscall/openat.rs (100%) rename src/{kxos-std => services/libs/jinux-std}/src/syscall/poll.rs (100%) rename src/{kxos-std => services/libs/jinux-std}/src/syscall/prctl.rs (100%) rename src/{kxos-std => services/libs/jinux-std}/src/syscall/read.rs (100%) rename src/{kxos-std => services/libs/jinux-std}/src/syscall/readlink.rs (100%) rename src/{kxos-std => services/libs/jinux-std}/src/syscall/rt_sigaction.rs (100%) rename src/{kxos-std => services/libs/jinux-std}/src/syscall/rt_sigprocmask.rs (98%) rename src/{kxos-std => services/libs/jinux-std}/src/syscall/rt_sigreturn.rs (95%) rename src/{kxos-std => services/libs/jinux-std}/src/syscall/sched_yield.rs (100%) rename src/{kxos-std => services/libs/jinux-std}/src/syscall/setpgid.rs (100%) rename src/{kxos-std => services/libs/jinux-std}/src/syscall/tgkill.rs (92%) rename src/{kxos-std => services/libs/jinux-std}/src/syscall/uname.rs (100%) rename src/{kxos-std => services/libs/jinux-std}/src/syscall/wait4.rs (100%) rename src/{kxos-std => services/libs/jinux-std}/src/syscall/waitid.rs (100%) rename src/{kxos-std => services/libs/jinux-std}/src/syscall/write.rs (100%) rename src/{kxos-std => services/libs/jinux-std}/src/syscall/writev.rs (100%) rename src/{kxos-std => services/libs/jinux-std}/src/tty/line_discipline.rs (100%) rename src/{kxos-std => services/libs/jinux-std}/src/tty/mod.rs (99%) rename src/{kxos-std => services/libs/jinux-std}/src/tty/termio.rs (100%) create mode 100644 src/services/libs/jinux-std/src/user_apps.rs rename src/{kxos-std => services/libs/jinux-std}/src/util/mod.rs (100%) rename src/{kxos-std => services/libs/jinux-std}/src/vm/mod.rs (81%) rename src/{kxos-std => services/libs/jinux-std}/src/vm/vmar/dyn_cap.rs (96%) rename src/{kxos-std => services/libs/jinux-std}/src/vm/vmar/mod.rs (94%) rename src/{kxos-std => services/libs/jinux-std}/src/vm/vmar/options.rs (96%) rename src/{kxos-std => services/libs/jinux-std}/src/vm/vmar/static_cap.rs (96%) rename src/{kxos-std => services/libs/jinux-std}/src/vm/vmo/dyn_cap.rs (98%) rename src/{kxos-std => services/libs/jinux-std}/src/vm/vmo/mod.rs (97%) rename src/{kxos-std => services/libs/jinux-std}/src/vm/vmo/options.rs (96%) rename src/{kxos-std => services/libs/jinux-std}/src/vm/vmo/pager.rs (97%) rename src/{kxos-std => services/libs/jinux-std}/src/vm/vmo/static_cap.rs (97%) create mode 100644 src/services/libs/jinux-util/Cargo.toml rename src/{kxos-util => services/libs/jinux-util}/src/frame_ptr.rs (93%) rename src/{kxos-util => services/libs/jinux-util}/src/lib.rs (71%) rename src/{kxos-util => services/libs/typeflags-util}/Cargo.toml (69%) rename src/{kxos-typeflags-util => services/libs/typeflags-util}/src/assert.rs (100%) rename src/{kxos-typeflags-util => services/libs/typeflags-util}/src/bool.rs (100%) rename src/{kxos-typeflags-util => services/libs/typeflags-util}/src/if_.rs (100%) rename src/{kxos-typeflags-util => services/libs/typeflags-util}/src/lib.rs (85%) rename src/{kxos-typeflags-util => services/libs/typeflags-util}/src/same.rs (100%) rename src/{kxos-typeflags-util => services/libs/typeflags-util}/src/set.rs (100%) rename src/{kxos-typeflags => services/libs/typeflags}/Cargo.toml (91%) rename src/{kxos-typeflags => services/libs/typeflags}/src/flag_set.rs (92%) rename src/{kxos-typeflags => services/libs/typeflags}/src/lib.rs (81%) rename src/{kxos-typeflags => services/libs/typeflags}/src/type_flag.rs (86%) rename src/{kxos-typeflags => services/libs/typeflags}/src/util.rs (92%) diff --git a/.gitattributes b/.gitattributes index 8675e119a..56078daf1 100644 --- a/.gitattributes +++ b/.gitattributes @@ -1,8 +1,8 @@ -src/kxos-user/hello_world/hello_world filter=lfs diff=lfs merge=lfs -text -src/kxos-user/fork/fork filter=lfs diff=lfs merge=lfs -text -src/kxos-user/hello_c/hello filter=lfs diff=lfs merge=lfs -text -src/kxos-user/execve/execve filter=lfs diff=lfs merge=lfs -text -src/kxos-user/execve/hello filter=lfs diff=lfs merge=lfs -text -src/kxos-user/fork_c/fork filter=lfs diff=lfs merge=lfs -text -src/kxos-user/signal_c/signal_test filter=lfs diff=lfs merge=lfs -text -src/kxos-user/busybox/busybox filter=lfs diff=lfs merge=lfs -text \ No newline at end of file +src/apps/hello_world/hello_world filter=lfs diff=lfs merge=lfs -text +src/apps/fork/fork filter=lfs diff=lfs merge=lfs -text +src/appshello_c/hello filter=lfs diff=lfs merge=lfs -text +src/apps/execve/execve filter=lfs diff=lfs merge=lfs -text +src/apps/execve/hello filter=lfs diff=lfs merge=lfs -text +src/apps/fork_c/fork filter=lfs diff=lfs merge=lfs -text +src/apps/signal_c/signal_test filter=lfs diff=lfs merge=lfs -text +src/apps/busybox/busybox filter=lfs diff=lfs merge=lfs -text \ No newline at end of file diff --git a/README.md b/README.md index 97254ccd0..dbd77bcf9 100644 --- a/README.md +++ b/README.md @@ -1,26 +1,26 @@ -# KxOS +# Jinux -KxOS is a modern and secure OS kernel written in Rust, especially suitable for Trusted Execution Environments (TEEs) +Jinux is a modern and secure OS kernel written in Rust, especially suitable for Trusted Execution Environments (TEEs) ## Design Goals -**1. Security by design.** Security is our top priority in the design of KxOS. As such, we adopt the widely acknowledged security best practice of [least privilege principle](https://en.wikipedia.org/wiki/Principle_of_least_privilege) and enforce it in a fashion that leverages the full strengths of Rust. To do so, we partition KxOS into two halves: a _privileged_ OS core and _unprivileged_ OS components. As a result, we can write the OS components almost entirely in _safe_ Rust, while taking extra cautions with the _unsafe_ Rust code in the OS core. Furthermore, we propose the idea of _everything-is-a-capability_, which elevates the status of [capabilities](https://en.wikipedia.org/wiki/Capability-based_security) to the level of a ubiquitous security primitive used throughout the OS. We make novel use of Rust's advanced features (e.g., [type-level programming](https://willcrichton.net/notes/type-level-programming/)) to make capabilities more accessible and efficient. The net result is improved security and uncompromised performance. +**1. Security by design.** Security is our top priority in the design of Jinux. As such, we adopt the widely acknowledged security best practice of [least privilege principle](https://en.wikipedia.org/wiki/Principle_of_least_privilege) and enforce it in a fashion that leverages the full strengths of Rust. To do so, we partition Jinux into two halves: a _privileged_ OS core and _unprivileged_ OS components. As a result, we can write the OS components almost entirely in _safe_ Rust, while taking extra cautions with the _unsafe_ Rust code in the OS core. Furthermore, we propose the idea of _everything-is-a-capability_, which elevates the status of [capabilities](https://en.wikipedia.org/wiki/Capability-based_security) to the level of a ubiquitous security primitive used throughout the OS. We make novel use of Rust's advanced features (e.g., [type-level programming](https://willcrichton.net/notes/type-level-programming/)) to make capabilities more accessible and efficient. The net result is improved security and uncompromised performance. -**2. Trustworthy OS-level virtualization.** OS-level virtualization mechanisms (like Linux's cgroups and namespaces) enable containers, a more lightweight and arguably more popular alternative to virtual machines (VMs). But there is one problem with containers: they are not as secure as VMs (see [StackExchange](https://security.stackexchange.com/questions/169642/what-makes-docker-more-secure-than-vms-or-bare-metal), [LWN](https://lwn.net/Articles/796700/), and [AWS](https://docs.aws.amazon.com/AmazonECS/latest/bestpracticesguide/security-tasks-containers.html)). There is a real risk that malicious containers may exploit privilege escalation bugs in the OS kernel to attack the host. [A study](https://dl.acm.org/doi/10.1145/3274694.3274720) found that 11 out of 88 kernel exploits are effective in breaking the container sandbox. The seemingly inherent insecurity of OS kernels leads to a new breed of container implementations (e.g., [Kata](https://katacontainers.io/) and [gVisor](https://gvisor.dev/)) that are based on VMs, instead of kernels, for isolation and sandboxing. We argue that this unfortunate retreat from OS-level virtualization to VM-based one is unwarranted---if the OS kernels are secure enough. And this is exactly what we plan to achieve with KxOS. We aim to provide a trustworthy OS-level virtualization mechanism on KxOS. +**2. Trustworthy OS-level virtualization.** OS-level virtualization mechanisms (like Linux's cgroups and namespaces) enable containers, a more lightweight and arguably more popular alternative to virtual machines (VMs). But there is one problem with containers: they are not as secure as VMs (see [StackExchange](https://security.stackexchange.com/questions/169642/what-makes-docker-more-secure-than-vms-or-bare-metal), [LWN](https://lwn.net/Articles/796700/), and [AWS](https://docs.aws.amazon.com/AmazonECS/latest/bestpracticesguide/security-tasks-containers.html)). There is a real risk that malicious containers may exploit privilege escalation bugs in the OS kernel to attack the host. [A study](https://dl.acm.org/doi/10.1145/3274694.3274720) found that 11 out of 88 kernel exploits are effective in breaking the container sandbox. The seemingly inherent insecurity of OS kernels leads to a new breed of container implementations (e.g., [Kata](https://katacontainers.io/) and [gVisor](https://gvisor.dev/)) that are based on VMs, instead of kernels, for isolation and sandboxing. We argue that this unfortunate retreat from OS-level virtualization to VM-based one is unwarranted---if the OS kernels are secure enough. And this is exactly what we plan to achieve with Jinux. We aim to provide a trustworthy OS-level virtualization mechanism on Jinux. -**3. High-velocity development.** Traditional OS kernels like Linux are hard to develop, test, and debug. Kernel development involves countless rounds of programming, failing, and rebooting on bare-metal or virtual machines. This way of life is unproductive and painful. Such a pain point is also recognized and partially addressed by [research work](https://www.usenix.org/conference/fast21/presentation/miller), but we think we can do more. In this spirit, we design the OS core to provide high-level APIs that are largely independent of the underlying hardware and implement it with two targets: one target is as part of a regular OS in kernel space and the other is as a library OS in user space. This way, all the OS components of KxOS, which are stacked above the OS core, can be developed, tested, and debugged in user space, which is more friendly to developers than kernel space. +**3. High-velocity development.** Traditional OS kernels like Linux are hard to develop, test, and debug. Kernel development involves countless rounds of programming, failing, and rebooting on bare-metal or virtual machines. This way of life is unproductive and painful. Such a pain point is also recognized and partially addressed by [research work](https://www.usenix.org/conference/fast21/presentation/miller), but we think we can do more. In this spirit, we design the OS core to provide high-level APIs that are largely independent of the underlying hardware and implement it with two targets: one target is as part of a regular OS in kernel space and the other is as a library OS in user space. This way, all the OS components of Jinux, which are stacked above the OS core, can be developed, tested, and debugged in user space, which is more friendly to developers than kernel space. -**4. High-fidelity Linux ABI.** An OS without usable applications is useless. So we believe it is important for KxOS to fit in an established and thriving ecosystem of software, such as the one around Linux. This is why we conclude that KxOS should aim at implementing high-fidelity Linux ABI, including the system calls, the proc file system, etc. +**4. High-fidelity Linux ABI.** An OS without usable applications is useless. So we believe it is important for Jinux to fit in an established and thriving ecosystem of software, such as the one around Linux. This is why we conclude that Jinux should aim at implementing high-fidelity Linux ABI, including the system calls, the proc file system, etc. ## Architecture -Here is an overview of the architecture of KxOS. +Here is an overview of the architecture of Jinux. ![architecture overview](docs/figures/arch_overview.png) ## Roadmap -While there is nothing revolutionary in KxOS, it does explore some new design points in constructing secure Rust OSes. To minimize the risks of the project, we plan to move towards Minimal Viable Product (MVP) in iterations. +While there is nothing revolutionary in Jinux, it does explore some new design points in constructing secure Rust OSes. To minimize the risks of the project, we plan to move towards Minimal Viable Product (MVP) in iterations. - [ ] Iteration 1: Build a minimal OS core runnable in both VMs and user space. - [ ] Iteration 2: Build a minimal set of OS components to run simple programs diff --git a/docs/README.md b/docs/README.md index b4c9b3445..501530b42 100644 --- a/docs/README.md +++ b/docs/README.md @@ -1,4 +1,4 @@ -# KxOS Documentation +# Jinux Documentation The documentation is rendered as a book with [mdBook](https://rust-lang.github.io/mdBook/), which can be installed with `cargo`. diff --git a/docs/book.toml b/docs/book.toml index 7a7ed5602..99f587534 100644 --- a/docs/book.toml +++ b/docs/book.toml @@ -3,7 +3,7 @@ authors = ["Tate, Hongliang Tian"] language = "en" multilingual = false src = "src" -title = "KxOS: A Secure, Fast, and Modern OS in Rust" +title = "Jinux: A Secure, Fast, and Modern OS in Rust" [rust] edition = "2021" diff --git a/docs/src/README.md b/docs/src/README.md index eadc2837f..5f3ab2fa9 100644 --- a/docs/src/README.md +++ b/docs/src/README.md @@ -14,7 +14,7 @@ # Introduction -This document describes KxOS, a secure, fast, and modern OS written in Rust. +This document describes Jinux, a secure, fast, and modern OS written in Rust. As the project is a work in progress, this document is by no means complete. Despite the incompleteness, this evolving document serves several important purposes: @@ -50,7 +50,7 @@ OSes, e.g., [Kerla](https://github.com/nuta/kerla), and [zCore](https://github.com/rcore-os/zCore). Despite their varying degrees of success, none of them are general-purpose, industrial-strength OSes that are or will ever be competitive with Linux. Eventually, a winner will emerge out of this -market of Rust OSes, and KxOS is our bet for this competition. +market of Rust OSes, and Jinux is our bet for this competition. Second, Rust OSes are a perfect fit for [Trusted Execution Environments (TEEs)](https://en.wikipedia.org/wiki/Trusted_execution_environment). @@ -79,24 +79,24 @@ relational databases: [Oracle and IBM are losing ground as Chinese vendors catch up with their US counterparts](https://www.theregister.com/2022/07/06/international_database_vendors_are_losing/). Can such success stories be repeated in the field of OSes? I think so. There are some China's home-grown OSes like [openKylin](https://www.openkylin.top/index.php?lang=en), but all of them are based on Linux and lack a self-developed -OS _kernel_. The long-term goal of KxOS is to fill this key missing core of the home-grown OSes. +OS _kernel_. The long-term goal of Jinux is to fill this key missing core of the home-grown OSes. ## Architecture Overview -Here is an overview of the architecture of KxOS. +Here is an overview of the architecture of Jinux. ![architecture overview](images/arch_overview.png) ## Features -**1. Security by design.** Security is our top priority in the design of KxOS. As such, we adopt the widely acknowledged security best practice of [least privilege principle](https://en.wikipedia.org/wiki/Principle_of_least_privilege) and enforce it in a fashion that leverages the full strengths of Rust. To do so, we partition KxOS into two halves: a _privileged_ OS core and _unprivileged_ OS components. All OS components are written entirely in _safe_ Rust and only the privileged OS core +**1. Security by design.** Security is our top priority in the design of Jinux. As such, we adopt the widely acknowledged security best practice of [least privilege principle](https://en.wikipedia.org/wiki/Principle_of_least_privilege) and enforce it in a fashion that leverages the full strengths of Rust. To do so, we partition Jinux into two halves: a _privileged_ OS core and _unprivileged_ OS components. All OS components are written entirely in _safe_ Rust and only the privileged OS core is allowed to have _unsafe_ Rust code. Furthermore, we propose the idea of _everything-is-a-capability_, which elevates the status of [capabilities](https://en.wikipedia.org/wiki/Capability-based_security) to the level of a ubiquitous security primitive used throughout the OS. We make novel use of Rust's advanced features (e.g., [type-level programming](https://willcrichton.net/notes/type-level-programming/)) to make capabilities more accessible and efficient. The net result is improved security and uncompromised performance. -**2. Trustworthy OS-level virtualization.** OS-level virtualization mechanisms (like Linux's cgroups and namespaces) enable containers, a more lightweight and arguably more popular alternative to virtual machines (VMs). But there is one problem with containers: they are not as secure as VMs (see [StackExchange](https://security.stackexchange.com/questions/169642/what-makes-docker-more-secure-than-vms-or-bare-metal), [LWN](https://lwn.net/Articles/796700/), and [AWS](https://docs.aws.amazon.com/AmazonECS/latest/bestpracticesguide/security-tasks-containers.html)). There is a real risk that malicious containers may exploit privilege escalation bugs in the OS kernel to attack the host. [A study](https://dl.acm.org/doi/10.1145/3274694.3274720) found that 11 out of 88 kernel exploits are effective in breaking the container sandbox. The seemingly inherent insecurity of OS kernels leads to a new breed of container implementations (e.g., [Kata](https://katacontainers.io/) and [gVisor](https://gvisor.dev/)) that are based on VMs, instead of kernels, for isolation and sandboxing. We argue that this unfortunate retreat from OS-level virtualization to VM-based one is unwarranted---if the OS kernels are secure enough. And this is exactly what we plan to achieve with KxOS. We aim to provide a trustworthy OS-level virtualization mechanism on KxOS. +**2. Trustworthy OS-level virtualization.** OS-level virtualization mechanisms (like Linux's cgroups and namespaces) enable containers, a more lightweight and arguably more popular alternative to virtual machines (VMs). But there is one problem with containers: they are not as secure as VMs (see [StackExchange](https://security.stackexchange.com/questions/169642/what-makes-docker-more-secure-than-vms-or-bare-metal), [LWN](https://lwn.net/Articles/796700/), and [AWS](https://docs.aws.amazon.com/AmazonECS/latest/bestpracticesguide/security-tasks-containers.html)). There is a real risk that malicious containers may exploit privilege escalation bugs in the OS kernel to attack the host. [A study](https://dl.acm.org/doi/10.1145/3274694.3274720) found that 11 out of 88 kernel exploits are effective in breaking the container sandbox. The seemingly inherent insecurity of OS kernels leads to a new breed of container implementations (e.g., [Kata](https://katacontainers.io/) and [gVisor](https://gvisor.dev/)) that are based on VMs, instead of kernels, for isolation and sandboxing. We argue that this unfortunate retreat from OS-level virtualization to VM-based one is unwarranted---if the OS kernels are secure enough. And this is exactly what we plan to achieve with Jinux. We aim to provide a trustworthy OS-level virtualization mechanism on Jinux. -**3. Fast user-mode development.** Traditional OS kernels like Linux are hard to develop, test, and debug. Kernel development involves countless rounds of programming, failing, and rebooting on bare-metal or virtual machines. This way of life is unproductive and painful. Such a pain point is also recognized and partially addressed by [research work](https://www.usenix.org/conference/fast21/presentation/miller), but we think we can do more. In this spirit, we design the OS core to provide high-level APIs that are largely independent of the underlying hardware and implement it with two targets: one target is as part of a regular OS in kernel space and the other is as a library OS in user space. This way, all the OS components of KxOS, which are stacked above the OS core, can be developed, tested, and debugged in user space, which is more friendly to developers than kernel space. +**3. Fast user-mode development.** Traditional OS kernels like Linux are hard to develop, test, and debug. Kernel development involves countless rounds of programming, failing, and rebooting on bare-metal or virtual machines. This way of life is unproductive and painful. Such a pain point is also recognized and partially addressed by [research work](https://www.usenix.org/conference/fast21/presentation/miller), but we think we can do more. In this spirit, we design the OS core to provide high-level APIs that are largely independent of the underlying hardware and implement it with two targets: one target is as part of a regular OS in kernel space and the other is as a library OS in user space. This way, all the OS components of Jinux, which are stacked above the OS core, can be developed, tested, and debugged in user space, which is more friendly to developers than kernel space. -**4. High-fidelity Linux ABI.** An OS without usable applications is useless. So we believe it is important for KxOS to fit in an established and thriving ecosystem of software, such as the one around Linux. This is why we conclude that KxOS should aim at implementing high-fidelity Linux ABI, including the system calls, the proc file system, etc. +**4. High-fidelity Linux ABI.** An OS without usable applications is useless. So we believe it is important for Jinux to fit in an established and thriving ecosystem of software, such as the one around Linux. This is why we conclude that Jinux should aim at implementing high-fidelity Linux ABI, including the system calls, the proc file system, etc. **5. TEEs as top-tier targets.** (Todo) diff --git a/docs/src/capabilities/README.md b/docs/src/capabilities/README.md index 682db3906..e5fd82c6a 100644 --- a/docs/src/capabilities/README.md +++ b/docs/src/capabilities/README.md @@ -20,12 +20,12 @@ capabilities in a limited fashion, mostly as a means to limit the access from external users (e.g., via syscall), rather than a mechanism to enforce advanced security policies internally (e.g., module-level isolation). -So we ask this question: is it possible to use capabilities as a _ubitiquous_ security primitive throughout KxOS to enhance the security and robustness of the +So we ask this question: is it possible to use capabilities as a _ubitiquous_ security primitive throughout Jinux to enhance the security and robustness of the OS? Specifically, we propose a new principle called "_everything is a capability_". Here, "everything" refers to any type of OS resource, internal or external alike. In traditional OSes, treating everything as a capability is unrewarding because (1) capabilities themselves are unreliable due to memory safety problems -, and (2) capabilities are no free lunch as they incur memory and CPU overheads. But these arguments may no longer stand in a well-designed Rust OS like KxOS. +, and (2) capabilities are no free lunch as they incur memory and CPU overheads. But these arguments may no longer stand in a well-designed Rust OS like Jinux. Because the odds of memory safety bugs are minimized and advanced Rust features like type-level programming allow us to implement capabilities as a zero-cost abstraction. diff --git a/docs/src/capabilities/zero_cost_capabilities.md b/docs/src/capabilities/zero_cost_capabilities.md index 9167adf4b..b07173c8c 100644 --- a/docs/src/capabilities/zero_cost_capabilities.md +++ b/docs/src/capabilities/zero_cost_capabilities.md @@ -1,6 +1,6 @@ # Zero-Cost Capabilities -To strengthen the security of KxOS, we aim to implement all kinds of OS resources +To strengthen the security of Jinux, we aim to implement all kinds of OS resources as capabilities. As the capabilities are going to be used throughout the OS, it is highly desirable to minimize their costs. For this purpose, we want to implement capabilities as a _zero-cost abstraction_. @@ -351,7 +351,7 @@ mod test { ### Implement access rights with typeflags -The `kxos-rights/lib.rs` file implements access rights. +The `Jinux-rights/lib.rs` file implements access rights. ```rust //! Access rights. @@ -376,7 +376,7 @@ typeflags! { } ``` -The `kxos-rights-proc/lib.rs` file implements the `require` procedural macro. +The `Jinux-rights-proc/lib.rs` file implements the `require` procedural macro. See the channel capability example later for how `require` is used. ```rust diff --git a/docs/src/privilege_separation/README.md b/docs/src/privilege_separation/README.md index 09f5b02cd..fd341d04d 100644 --- a/docs/src/privilege_separation/README.md +++ b/docs/src/privilege_separation/README.md @@ -1,15 +1,15 @@ # Privilege Separation -One fundamental design goal of KxOS is to support _privilege separation_, i.e., the separation between the privileged OS core and the unprivileged OS components. The privileged portion is allowed to use `unsafe` keyword to carry out dangerous tasks like accessing CPU registers, manipulating stack frames, and doing MMIO or PIO. In contrast, the unprivileged portion, which forms the majority of the OS, must be free from `unsafe` code. With privilege separation, the memory safety of KxOS can be boiled down to the correctness of the privileged OS core, regardless of the correctness of the unprivileged OS components, thus reducing the size of TCB significantly. +One fundamental design goal of Jinux is to support _privilege separation_, i.e., the separation between the privileged OS core and the unprivileged OS components. The privileged portion is allowed to use `unsafe` keyword to carry out dangerous tasks like accessing CPU registers, manipulating stack frames, and doing MMIO or PIO. In contrast, the unprivileged portion, which forms the majority of the OS, must be free from `unsafe` code. With privilege separation, the memory safety of Jinux can be boiled down to the correctness of the privileged OS core, regardless of the correctness of the unprivileged OS components, thus reducing the size of TCB significantly. To put privilege separation into perspective, let's compare the architectures -of the monolithic kernels, microkernels, and KxOS. +of the monolithic kernels, microkernels, and Jinux. ![Arch comparison](../images/arch_comparison.png) The diagram above highlights the characteristics of different OS architectures in terms of communication overheads and the TCB for memory safety. -Thanks to privilege separation, KxOS promises the benefit of being _as safe as a microkernel and as fast as a monolithic kernel_. +Thanks to privilege separation, Jinux promises the benefit of being _as safe as a microkernel and as fast as a monolithic kernel_. Privilege separation is an interesting research problem, prompting us to answer a series of technical questions. diff --git a/docs/src/privilege_separation/pci_virtio_drivers.md b/docs/src/privilege_separation/pci_virtio_drivers.md index aca7b7e49..b85e42092 100644 --- a/docs/src/privilege_separation/pci_virtio_drivers.md +++ b/docs/src/privilege_separation/pci_virtio_drivers.md @@ -22,7 +22,7 @@ Here are some of the elements in PCI-based Virtio devices that may involve `unsa ### Privileged part ```rust -// file: kxos-core-libs/pci-io-port/lib.rs +// file: jinux-core-libs/pci-io-port/lib.rs use x86::IoPort; /// The I/O port to write an address in the PCI @@ -49,7 +49,7 @@ pub const PCI_DATA_PORT: IoPort = { ### Unprivileged part ```rust -// file: kxos-comps/pci/lib.rs +// file: jinux-comps/pci/lib.rs use pci_io_port::{PCI_ADDR_PORT, PCI_DATA_PORT}; /// The PCI configuration space, which enables the discovery, @@ -128,7 +128,7 @@ pub struct PciCapabilities { Most code of Virtio drivers can be unprivileged thanks to the abstractions of `VmPager` and `VmCell` provided by the OS core. ```rust -// file: kxos-comp-libs/virtio/transport.rs +// file: jinux-comp-libs/virtio/transport.rs /// The transport layer for configuring a Virtio device. pub struct VirtioTransport { diff --git a/docs/src/privilege_separation/syscall_workflow.md b/docs/src/privilege_separation/syscall_workflow.md index e52d5a257..3873c8161 100644 --- a/docs/src/privilege_separation/syscall_workflow.md +++ b/docs/src/privilege_separation/syscall_workflow.md @@ -138,7 +138,7 @@ impl UserPtr { } ``` -The examples reveal two important considerations in designing KxOS: +The examples reveal two important considerations in designing Jinux: 1. Exposing _truly_ safe APIs. The privileged OS core must expose _truly safe_ APIs: however buggy or silly the unprivileged OS components may be written, they must _not_ cause undefined behaviors. 2. Handling _arbitrary_ pointers safely. The safe API of the OS core must provide a safe way to deal with arbitrary pointers. @@ -146,15 +146,15 @@ With the two points in mind, let's get back to our main goal of privilege separa ## Code organization with privilege separation -Our first step is to separate privileged and unprivileged code in the codebase of KxOS. For our purpose of demonstrating a syscall handling framework, a minimal codebase may look like the following. +Our first step is to separate privileged and unprivileged code in the codebase of Jinux. For our purpose of demonstrating a syscall handling framework, a minimal codebase may look like the following. ```text . -├── kxos +├── jinux │   ├── src │ │   └── main.rs │   └── Cargo.toml -├── kxos-core +├── jinux-core │   ├── src │ │   ├── lib.rs │ │   ├── syscall_handler.rs @@ -162,7 +162,7 @@ Our first step is to separate privileged and unprivileged code in the codebase o │ │ ├── vmo.rs │ │ └── vmar.rs │   └── Cargo.toml -├── kxos-core-libs +├── jinux-core-libs │ ├── linux-abi-types │ │   ├── src │ │   │ └── lib.rs @@ -171,34 +171,34 @@ Our first step is to separate privileged and unprivileged code in the codebase o │ ├── src │   │ └── lib.rs │  └── Cargo.toml -├── kxos-comps +├── jinux-comps │   └── linux-syscall │ ├── src │   │ └── lib.rs │   └── Cargo.toml -└── kxos-comp-libs +└── jinux-comp-libs    └── linux-abi ├── src   │ └── lib.rs    └── Cargo.toml ``` -The ultimate build target of the codebase is the `kxos` crate, which is an OS kernel that consists of a privileged OS core (crate `kxos-core`) and multiple OS components (the crates under `kxos-comps/`). +The ultimate build target of the codebase is the `jinux` crate, which is an OS kernel that consists of a privileged OS core (crate `jinux-core`) and multiple OS components (the crates under `jinux-comps/`). -For the sake of privilege separation, only crate `kxos` and `kxos-core` along with the crates under `kxos-core-libs` are allowed to use the `unsafe` keyword. To the contrary, the crates under `kxos-comps/` along with their dependent crates under `kxos-comp-libs/` are not allowed to use `unsafe` directly; they may only borrow the superpower of `unsafe` by using the safe API exposed by `kxos-core` or the crates under `kxos-core-libs`. To summarize, the memory safety of the OS only relies on a small and well-defined TCB that constitutes the `kxos` and `kxos-core` crate plus the crates under `kxos-core-libs/`. +For the sake of privilege separation, only crate `jinux` and `jinux-core` along with the crates under `jinux-core-libs` are allowed to use the `unsafe` keyword. To the contrary, the crates under `jinux-comps/` along with their dependent crates under `jinux-comp-libs/` are not allowed to use `unsafe` directly; they may only borrow the superpower of `unsafe` by using the safe API exposed by `jinux-core` or the crates under `jinux-core-libs`. To summarize, the memory safety of the OS only relies on a small and well-defined TCB that constitutes the `jinux` and `jinux-core` crate plus the crates under `jinux-core-libs/`. -Under this setting, all implementation of system calls goes to the `linux-syscall` crate. We are about to show that the _safe_ API provided by `kxos-core` is powerful enough to enable the _safe_ implementation of `linux-syscall`. +Under this setting, all implementation of system calls goes to the `linux-syscall` crate. We are about to show that the _safe_ API provided by `jinux-core` is powerful enough to enable the _safe_ implementation of `linux-syscall`. -## Crate `kxos-core` +## Crate `jinux-core` -For our purposes here, the two most relevant APIs provided by `kxos-core` is the abstraction for syscall handlers and virtual memory (VM). +For our purposes here, the two most relevant APIs provided by `jinux-core` is the abstraction for syscall handlers and virtual memory (VM). ### Syscall handlers The `SyscallHandler` abstraction enables the OS core to hide the low-level, architectural-dependent aspects of syscall handling workflow (e.g., user-kernel switching and CPU register manipulation) and allow the unprivileged OS components to implement system calls. ```rust -// file: kxos-core/src/syscall_handler.rs +// file: jinux-core/src/syscall_handler.rs pub trait SyscallHandler { fn handle_syscall(&self, ctx: &mut SyscallContext); @@ -243,8 +243,8 @@ an important concept that we will elaborate on later. Basically, they are capabi Here we demonstrate how to leverage the APIs of `ksos-core` to implement system calls with safe Rust code in crate `linux-syscall`. ```rust -// file: kxos-comps/linux-syscall/src/lib.rs -use kxos_core::{SyscallContext, SyscallHandler, Vmar}; +// file: jinux-comps/linux-syscall/src/lib.rs +use jinux_core::{SyscallContext, SyscallHandler, Vmar}; use linux_abi::{SyscallNum::*, UserPtr, RawFd, RawTimeVal, RawTimeZone}; pub struct SampleHandler; @@ -315,7 +315,7 @@ impl SampleHandler { This crate defines a marker trait `Pod`, which represents plain-old data. ```rust -/// file: kxos-core-libs/pod/src/lib.rs +/// file: jinux-core-libs/pod/src/lib.rs /// A marker trait for plain old data (POD). /// @@ -388,7 +388,7 @@ unsafe impl [T; N] for Pod {} ## Crate `linux-abi-type` ```rust -// file: kxos-core-libs/linux-abi-types +// file: jinux-core-libs/linux-abi-types use pod::Pod; pub type RawFd = i32; @@ -404,7 +404,7 @@ unsafe impl Pod for RawTimeVal {} ## Crate `linux-abi` ```rust -// file: kxos-comp-libs/linux-abi +// file: jinux-comp-libs/linux-abi pub use linux_abi_types::*; pub enum SyscallNum { diff --git a/src/.cargo/config.toml b/src/.cargo/config.toml index 2684f7bb5..d692eefbf 100644 --- a/src/.cargo/config.toml +++ b/src/.cargo/config.toml @@ -1,6 +1,6 @@ [target.'cfg(target_os = "none")'] -runner = "cargo run --package kxos-boot --" +runner = "cargo run --package jinux-boot --" [alias] kcheck = "check --target x86_64-custom.json -Zbuild-std=core,alloc,compiler_builtins -Zbuild-std-features=compiler-builtins-mem" diff --git a/src/Cargo.lock b/src/Cargo.lock index 7f4fb839f..3329c62a9 100644 --- a/src/Cargo.lock +++ b/src/Cargo.lock @@ -34,9 +34,9 @@ checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" [[package]] name = "bootloader" -version = "0.10.12" +version = "0.10.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f2d9b14b92a825ecc3b24e4c163a578af473fbba5f190bfaf48092b29b604504" +checksum = "24e13520aa8580a2850fc9f5390dc6753f1062fb66f90e5a61bd5c72b55df731" [[package]] name = "bootloader-locator" @@ -78,22 +78,16 @@ dependencies = [ ] [[package]] -name = "json" -version = "0.12.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "078e285eafdfb6c4b434e0d31e8cfcb5115b651496faca5749b88fafd4f23bfd" - -[[package]] -name = "kxos" +name = "jinux" version = "0.1.0" dependencies = [ "bootloader", - "kxos-frame", - "kxos-std", + "jinux-frame", + "jinux-std", ] [[package]] -name = "kxos-boot" +name = "jinux-boot" version = "0.1.0" dependencies = [ "anyhow", @@ -103,7 +97,7 @@ dependencies = [ ] [[package]] -name = "kxos-frame" +name = "jinux-frame" version = "0.1.0" dependencies = [ "bitflags", @@ -112,6 +106,8 @@ dependencies = [ "font8x8", "lazy_static", "linked_list_allocator", + "pod", + "pod-derive", "spin 0.9.4", "uart_16550", "volatile", @@ -119,28 +115,20 @@ dependencies = [ ] [[package]] -name = "kxos-frame-pod-derive" -version = "0.1.0" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "kxos-pci" +name = "jinux-pci" version = "0.1.0" dependencies = [ "bitflags", - "kxos-frame", - "kxos-frame-pod-derive", - "kxos-util", + "jinux-frame", + "jinux-util", "lazy_static", + "pod", + "pod-derive", "spin 0.9.4", ] [[package]] -name = "kxos-rights-proc" +name = "jinux-rights-proc" version = "0.1.0" dependencies = [ "proc-macro2", @@ -149,57 +137,53 @@ dependencies = [ ] [[package]] -name = "kxos-std" +name = "jinux-std" version = "0.1.0" dependencies = [ "bitflags", - "kxos-frame", - "kxos-frame-pod-derive", - "kxos-pci", - "kxos-rights-proc", - "kxos-typeflags", - "kxos-typeflags-util", - "kxos-virtio", + "jinux-frame", + "jinux-pci", + "jinux-rights-proc", + "jinux-virtio", "lazy_static", + "pod", + "pod-derive", "ringbuffer", "spin 0.9.4", + "typeflags", + "typeflags-util", "vte", "xmas-elf", ] [[package]] -name = "kxos-typeflags" +name = "jinux-util" version = "0.1.0" dependencies = [ - "itertools", - "proc-macro2", - "quote", - "syn", + "jinux-frame", + "pod", + "pod-derive", ] [[package]] -name = "kxos-typeflags-util" -version = "0.1.0" - -[[package]] -name = "kxos-util" -version = "0.1.0" -dependencies = [ - "kxos-frame", -] - -[[package]] -name = "kxos-virtio" +name = "jinux-virtio" version = "0.1.0" dependencies = [ "bitflags", - "kxos-frame", - "kxos-frame-pod-derive", - "kxos-pci", - "kxos-util", + "jinux-frame", + "jinux-pci", + "jinux-util", + "pod", + "pod-derive", "spin 0.9.4", ] +[[package]] +name = "json" +version = "0.12.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "078e285eafdfb6c4b434e0d31e8cfcb5115b651496faca5749b88fafd4f23bfd" + [[package]] name = "lazy_static" version = "1.4.0" @@ -211,9 +195,9 @@ dependencies = [ [[package]] name = "libc" -version = "0.2.132" +version = "0.2.137" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8371e4e5341c3a96db127eb2465ac681ced4c433e01dd0e938adbef26ba93ba5" +checksum = "fc7fcc620a3bff7cdd7a365be3376c97191aeaccc2a603e600951e452615bf89" [[package]] name = "linked_list_allocator" @@ -235,19 +219,32 @@ dependencies = [ [[package]] name = "lock_api" -version = "0.4.8" +version = "0.4.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9f80bf5aacaf25cbfc8210d1cfb718f2bf3b11c4c54e5afe36c236853a8ec390" +checksum = "435011366fe56583b16cf956f9df0095b405b82d76425bc8981c0e22e60ec4df" dependencies = [ "autocfg", "scopeguard", ] +[[package]] +name = "pod" +version = "0.1.0" + +[[package]] +name = "pod-derive" +version = "0.1.0" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + [[package]] name = "proc-macro2" -version = "1.0.43" +version = "1.0.47" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0a2ca2c61bc9f3d74d2886294ab7b9853abd9c1ad903a3ac7815c58989bb7bab" +checksum = "5ea3d908b0e36316caf9e9e2c4625cdde190a7e6f440d794667ed17a1855e725" dependencies = [ "unicode-ident", ] @@ -321,9 +318,9 @@ dependencies = [ [[package]] name = "syn" -version = "1.0.99" +version = "1.0.103" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "58dbef6ec655055e20b86b15a8cc6d439cca19b667537ac6a1369572d151ab13" +checksum = "a864042229133ada95abf3b54fdc62ef5ccabe9515b64717bcb9a1919e59445d" dependencies = [ "proc-macro2", "quote", @@ -332,24 +329,38 @@ dependencies = [ [[package]] name = "thiserror" -version = "1.0.33" +version = "1.0.37" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3d0a539a918745651435ac7db7a18761589a94cd7e94cd56999f828bf73c8a57" +checksum = "10deb33631e3c9018b9baf9dcbbc4f737320d2b576bac10f6aefa048fa407e3e" dependencies = [ "thiserror-impl", ] [[package]] name = "thiserror-impl" -version = "1.0.33" +version = "1.0.37" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c251e90f708e16c49a16f4917dc2131e75222b72edfa9cb7f7c58ae56aae0c09" +checksum = "982d17546b47146b28f7c22e3d08465f6b8903d0ea13c1660d9d84a6e7adcdbb" dependencies = [ "proc-macro2", "quote", "syn", ] +[[package]] +name = "typeflags" +version = "0.1.0" +dependencies = [ + "itertools", + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "typeflags-util" +version = "0.1.0" + [[package]] name = "uart_16550" version = "0.2.18" @@ -363,9 +374,9 @@ dependencies = [ [[package]] name = "unicode-ident" -version = "1.0.3" +version = "1.0.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c4f5b37a154999a8f3f98cc23a628d850e154479cd94decf3414696e12e31aaf" +checksum = "6ceab39d59e4c9499d4e5a8ee0e2735b891bb7308ac83dfb4e80cad195c9f6f3" [[package]] name = "utf8parse" diff --git a/src/Cargo.toml b/src/Cargo.toml index 1c252408d..7b1a1b491 100644 --- a/src/Cargo.toml +++ b/src/Cargo.toml @@ -1,26 +1,27 @@ [package] -name = "kxos" +name = "jinux" version = "0.1.0" edition = "2021" [dependencies] bootloader = {version="0.10.12"} -kxos-frame = {path = "kxos-frame"} -kxos-std = {path = "kxos-std"} +jinux-frame = {path = "framework/jinux-frame"} +jinux-std = {path = "services/libs/jinux-std"} [workspace] members = [ - "kxos-frame", - "kxos-std", - "kxos-boot", - "kxos-pci", - "kxos-virtio", - "kxos-util", - "kxos-frame-pod-derive", - "kxos-typeflags", - "kxos-typeflags-util", - "kxos-rights-proc", + "jinux-boot", + "framework/jinux-frame", + "framework/pod", + "framework/pod-derive", + "services/comps/jinux-pci", + "services/comps/jinux-virtio", + "services/libs/jinux-std", + "services/libs/jinux-rights-proc", + "services/libs/typeflags", + "services/libs/typeflags-util", + "services/libs/jinux-util", ] [package.metadata.bootloader] diff --git a/src/README.md b/src/README.md index 56438e95f..50f789b6a 100644 --- a/src/README.md +++ b/src/README.md @@ -1,27 +1,27 @@ -# KxOS Source Code +# Jinux Source Code ## Code organization The codebase is organized as a number of Rust crates. -* The `kxos` crate assembles all other crates into a runnable OS kernel image. +* The `jinux` crate assembles all other crates into a runnable OS kernel image. This is the only binary crate; all other crates are libraries. -* The `kxos-frame` crate constitutes the main part of the KxOS framework, +* The `jinux-frame` crate constitutes the main part of the jinux framework, providing a minimal set of _safe_ abstractions that encapsulates _unsafe_ Rust code to deal with hardware resources like CPU, memory, and interrupts. -* The `kxos-frame-*` crates complement `kxos-frame` by providing more _safe_ -types, APIs, or abstractions that are useful to specific aspects of the KxOS. -* The `kxos-std` crate is KxOS's equivalent of Rust's std crate, although +* The `jinux-frame-*` crates complement `jinux-frame` by providing more _safe_ +types, APIs, or abstractions that are useful to specific aspects of the Jinux. +* The `jinux-std` crate is Jinux's equivalent of Rust's std crate, although their APIs are quite different. This crate offers an extensive set of high-level safe APIs that are widely used throughout the OS code above the framework (i.e., the crates described below). -* The rest of `kxos-*` crates implement most of the functionalities of KxOS, e.g., +* The rest of `jinux-*` crates implement most of the functionalities of Jinux, e.g., Linux syscall dispatching, process management, file systems, network stacks, and device drivers. ## Privilege separation -KxOS is a _framekernel_, separating the entire OS into two halves: +Jinux is a _framekernel_, separating the entire OS into two halves: the _privileged_ half (so-called "frame") and the _unprivileged_ half. Only the privileged half is allowed to include any _unsafe_ Rust code. And it is the privileged half's responsibility to encapsulate the _unsafe_ Rust @@ -30,5 +30,5 @@ with safe Rust in the unprivileged half. This philosophy of privilege separationn is also reflected in the code organization. -* The privileged half consists of `kxos`, `kxos-frame`, and `kxos-frame-*` crates. -* The unprivileged half consists of `kxos-std` and the rest `kxos-*` crates. +* The privileged half consists of `jinux`, `jinux-frame`, and `jinux-frame-*` crates. +* The unprivileged half consists of `jinux-std` and the rest `jinux-*` crates. diff --git a/src/kxos-user/busybox/README.md b/src/apps/busybox/README.md similarity index 100% rename from src/kxos-user/busybox/README.md rename to src/apps/busybox/README.md diff --git a/src/kxos-user/busybox/busybox b/src/apps/busybox/busybox similarity index 100% rename from src/kxos-user/busybox/busybox rename to src/apps/busybox/busybox diff --git a/src/kxos-user/execve/Makefile b/src/apps/execve/Makefile similarity index 100% rename from src/kxos-user/execve/Makefile rename to src/apps/execve/Makefile diff --git a/src/kxos-user/execve/execve b/src/apps/execve/execve similarity index 100% rename from src/kxos-user/execve/execve rename to src/apps/execve/execve diff --git a/src/kxos-user/execve/execve.c b/src/apps/execve/execve.c similarity index 100% rename from src/kxos-user/execve/execve.c rename to src/apps/execve/execve.c diff --git a/src/kxos-user/execve/hello b/src/apps/execve/hello similarity index 100% rename from src/kxos-user/execve/hello rename to src/apps/execve/hello diff --git a/src/kxos-user/execve/hello.c b/src/apps/execve/hello.c similarity index 100% rename from src/kxos-user/execve/hello.c rename to src/apps/execve/hello.c diff --git a/src/kxos-user/fork/Makefile b/src/apps/fork/Makefile similarity index 100% rename from src/kxos-user/fork/Makefile rename to src/apps/fork/Makefile diff --git a/src/kxos-user/fork/fork b/src/apps/fork/fork similarity index 100% rename from src/kxos-user/fork/fork rename to src/apps/fork/fork diff --git a/src/kxos-user/fork/fork.s b/src/apps/fork/fork.s similarity index 100% rename from src/kxos-user/fork/fork.s rename to src/apps/fork/fork.s diff --git a/src/kxos-user/fork_c/Makefile b/src/apps/fork_c/Makefile similarity index 100% rename from src/kxos-user/fork_c/Makefile rename to src/apps/fork_c/Makefile diff --git a/src/kxos-user/fork_c/fork b/src/apps/fork_c/fork similarity index 100% rename from src/kxos-user/fork_c/fork rename to src/apps/fork_c/fork diff --git a/src/kxos-user/fork_c/fork.c b/src/apps/fork_c/fork.c similarity index 100% rename from src/kxos-user/fork_c/fork.c rename to src/apps/fork_c/fork.c diff --git a/src/kxos-user/hello_c/Makefile b/src/apps/hello_c/Makefile similarity index 100% rename from src/kxos-user/hello_c/Makefile rename to src/apps/hello_c/Makefile diff --git a/src/apps/hello_c/hello b/src/apps/hello_c/hello new file mode 100755 index 0000000000000000000000000000000000000000..aff26147fdfa247cace6a52492ed18117fc54a62 GIT binary patch literal 871896 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

Y-(ZTl=g|!{21A3 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

|Axj@PL_LaC3rXyX{=7IA(oFKd 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⪙5xfUhvwgTeIn+A;zfN(A@@(vZbnaTC`yB-ri!npF z221!r6H)^D7$sH`@^8RVTG3FqdS=(uoere!zzGK-kx0 zM2TXUey`pgi>q2m^aM%3MKOM2=(2N)?m0hZxfn(F`{k0*jG|j$W)GLgSwkgP2pE<4 z1d|h4sA!GJ*=}34*p5iOS^dh_B??9+c(X?q6ihnTc9~J_2`8E^Q>MC@c3FVMRl;S^ zB^v@Rk(PNv4>A>Gx6tum6)@Q*@JJSwUs-L--o( z*f;Yv==|NS)Ep(46{NVrb{p67Y7>Z#A{9mrw1O&ds$y?ME%D{--+A@tDRU~UJn?_R z{=SB#2Hn|{D>vZa^wk8ozMvXL>Xf4@y0>+SRcs9f> zu_(>jkBZI8SDnRv&Q@}oCfcx~tG;}zw7A~O-^#)3IaSoP=FMD-yN5fBA6MrVqZuV^ zNak$ZCTohLnenZqZGBNK((DS9S5=jX53{2oJ{&Pe-FdTF1O^aYkPM@%z?ly$hpHZw z5mhBlUiB;JTt(_m@^)pGuoLj)gEuqqf?vV*6TgJ>+$NvP4EF*|@oNOmzHOyb7V7O1 z6d8k*Lfp>kFR0#tdS$9_plxNGJh-NiJ6pQ`)oMj z3ohhLGP_c{3^2G){i=wLGGnvSHQ-b?(kR-b4sXghsL4l{eKcUkV=ZbF<>J%;k6oP_ zjBhV`VwK_h=F(@Ty9|nDTtAZ4<8CG?vSyyy=CEE@C7J3!-^*~;-Ruu1)e4qe(h?qW z6dw(GEB=gW%58j^mTC!TGp|PA77Ep3IOryYuqc#TS#{<)!X^Uq(q8lpdQuY~=R+Qo zB!OM)_b@apPtNn#uSo0w`h^)B1pgefYW4kB<~v#m%;wFlJ(=ovk26bg{YhrB)2=2Z zeX@{46ET*DY=3$SeW{-6e>{jG=ws?!7H#tB9wWnojv#zOPM>HrE;I`bI&DH+QOU8Y z1b7+V8BvBh+U_9y{d^xhn5-oRgD0bhlmaZA#IY4R%6PIapG!gz0iSwiK!6J3Wx)E> zU-%;DNFO)HxxTnLGC)wn%)M{Bw`$FsgX?vmWz{S3D{Yrhj2q*Z4sUO>umC0^nC%XD zPD$Tkp(Nh5-J7&FFpgxkR#M!J^~Gv9QIZYpS|0~O=%T8h_&GDa>Bj*A%QqqU zPXPEL7?~Yzrd!m(bv3U>B4`FmZvQA#pZXApO79?lfXubjb~R))wx_hMgxJL_+6`8! zgDkjcBz8i))T!(gn(cv8Kc>mYVHYrfh!3XpO%!O*H)^faG zRl9*b?nq|RWL1sCXoXu{C|$ff51=-o;H z6cK&QlpID!vRlk^^&kDu>-G5<|MS+bqAHhj7=7-`h^XWca(O>m%xPJst-DMn?XUCqy6N|^RYP!%g180*LM zeCad(U`C5o$yEPUgZbm4j=bp4IeR}{8-r{jJ|Vhg2*^K#zzvOlK1Zka^i&LhHqPJd@R$F=<`Zw7MmiU|N5(GjC>#)<~g zm?}aB34mLx73e*DS4XF@Q$vG5NV_G!rV}#PfpIMLe#>cWG>9ZI5b#ToWdZZa&NMcf z?xJb(eZ-=fC(7?r;S5eC-?^ll9mdyh!X$PbIVL`kf$NV{ut?=> zY%dwA9#iWUKwUMeyJ-Xsx|)&ZVEB7p0{~FiPd>xF)%eC8Y(0&8h9w4NPp3Ngb>FM@ zlH|x^2-r#z(JZ)Aw-K5X70c7^9Yho&iF4}v*VTp0j5%1o#D?zl<{XTlAXvAQ++0eV zYzb#>>fFD7|L%>0TZc6AFP?Q)H18;Vu(6T8)gr}D>;;3q*J&og@!f%$0lvyN3w5li(V6LM^#eY$?iJyYWNGA%rSTV zNR>IEpfA7*ttCkPH52U63PtfJcDi&{I?%HIvc?{Y0`Rm7jNpG`3?^<>%k75o45JQ( z0(A~tdpky7s0UURuUzQcC5F51Dbad28iar@>b<-F^Lq5(riEEE30Cqgzwc!|`u@Ft z)Az`K===6ZMA3Tmy?5u3Qu-bA7aHu&f~b|;KbUQ3Bm3vLAApj%`{-@=F2#+AxxY7H za~D_e2KyH_?4N!7d_g5joOWjUsoU6ooNdIL=A!tP>~*{zK>x5YxDp+Z@#AvmPo=0` z*oPRlWVZ{GSLuE5ZpE^#YDx4t&yS~Q5A86EAGM@cJW!s@KYBY@nps2q>w4X<*W#|%&a7OWg89hBMDi`% z=e{cqi0wS8@DxsFB!AoIOE5zJE%l3A^uS`#Vj@bukla!xnPV}@by&$K-wr{w(zl`V zh`RINH`SOZoFZmv3s0%2dm65EPj>JL0B}a&m|z%I>WY4nF5ZhzBnM1{P7fN;2SbK; z@TJx@{fIfUCF5G@Zy!PNWc7a8uUl!49QYYt6jQe+mD2P=5pA{kbv_03dU{QA#*sl@HL<1hKjN)Q*utK3b6Yi##gBWI_uQ}>In|4*XIk(NOoPy@c}`cUtVvRzzsXBF4Frwy`0 zsO2A>O?sX7kZFtnH%-JDu4}1!|C*}oy;PgSXAb6LAt=ZmEcynKGwQnUGuIMT(yb7) zSm3p&g*U^^OCUSN zh&Tfut$^d*e5iU3w(Tjm((mySb^m@h=oNJjww+UPoIVpQI4HZxY)dsHkGm?W>oA2; z=Yj(h;h#9%cJ7@@=W*(2jURzMyOkbOL>F5D>#kU9GP!)jR3Q zDpz%{=F^(Djb;eFp;#-Xi53%MOpgRTokS{tF>sE#KPawq-i;*p4Y5-5(Jg{1s!2xy zZpQSb*(<{e=rrh94IfpQ6aQwraFp#VyNb7{`=l&_VoqWKH=7`!OqGf<`RP}%kKoBz zdY(Xs;o{B-JFQqKV4uJ#Ht%DL@@yD}l2$)zak18F>UwRE$xr)Osc-nTVa`^eC$zR0 zw0Gcf`_pDJlw(E|>D!Eh(K_CWxc{6?-2RnZ8|J+?v1!-N-7brxI_K6>YGxEO>mAbw zYpz8aF)PB7ULx3}*Tt;bCNA)sM!pFPFrx$pB5!u#vKoG-_4UFYZ*KhpY|{r(UDR0_ zb#5)=Y0|mUMrb+wnsLzf5NrNdc|u64L7qDO`{DmW!T;^fEk2*ZsrG`HBFnhuvXEHe zIL@5%{GCioAloDi;>1jC%}MYM~#f6_e1unw5NL+{QqAptYoc6c8C zYT1xO>KWElak68G&SlMHW1E21%#eau;fYaqvF6iS-0w8L8x&ybIp=DLIhQVA*2b6T zrtvHOG}e~q&trcxkH7claa4bdgN?~oy2Sh}WnAZ+e z0cUm*V(r4unGa^}r$-ioOr=WzCpLc^h+j$>?M)H)5dXBOP)>hEQ)Y~P8~td}w2S54{UB;ld^sMZb=L$<%Zt9`S_6q-D@Hz-f$bcDb?nD?BD zw#(lt{8BKMg^Hux+r&@Qc@*JCC=W%DGMs5MmFohKLJ@~P**}u(=L_0dc`#V&9?;Gs z*5|h~78b4OXL!%3$&09p{!(|)4B_iSE27`$VE+gKDOF?0;)tIOf-FAEaMW(CdvD%k z)UhXMHi8Q1U%#M#G5691hGP5^Og3>Xf=n1LMyt*#jap;RDfM>Fm)|wFbfS4HoprdC zTu<&=cgUi@$n5tm%r<#v{?1VsVg|khN=mLkJCc)M++rAqSZEJ-PJAVP5Pvx{(^bRp z6Ve(C(r)MU$N6{G3wZ=LeJfQ!SSy)3gTgt2d$loq4oIhon(eRi9`yCA$O0^QL#Ye7 z&COr>qO|@pV;Qn0SZXJ+)N<7HLkdAopr#&A1~!bc2Q}Rd%{!2qzDZjBsK5KGa1uKk zbwEv5`L#h!m+I+1QPba%sV6n9b6l-oh$LPfc%aogri~n-glw{EbL2ASm{@w=1|qV> z{1_}g@mvvgTv5%alN1>h@r0nUZfpJiK|JS**~(P^oGFBO{+{dKed3uiw1X&@tX*sI z)xD=A_hab!ZS9Bzb=+pf3ePTX+zW2@j$j4518<+slFp2H;_yQ1B?utrc|l-4+dZ_-J%pi^Y5|+Iz9|MB zFa&``A39nRi-|JAn3V~>Ajlr+#4f<3achLxB<8&e=19J+^`jN6#Ax5}5z7pY!4QbJ zbDm2!UX+-9gXb)_t`KskP8rtYHhT;mJ5&BlO z#4oTGEtG`OzM?Sxo#eJ~q8=Vvb9VDUGiPsHDOLZSR{JRT%>L}8{gU;69W0LeM3SGLJa zosXZ$nxPcpk9(Ko%xK{eM$X)%&_X#G(@Nd?3H9U&n7{As2f~}BbYB6)03{yZ3mW=D z=85MUK9d@w&RvED&or>5-KD9@e#$|-KY#5-ZJfE)pb`7<6wP7D<2C#cpV4;y7jy3d zA60cd`e*Whpa~}^D87S+Hlv716=fupj7;PVP9#=EtYWP}eAFsJhKC9SX9jY5Jdn0f z>8<`sZ?&ZlmG)OKB4ENJ0etYX$ioLhE9Ve|_=12y?sx5TCX*oc+WWu1`~UIzkU5Wi z_G9g}*IIk+^{B{md@=x^+G#kia1H+9;DG-4HZ=qpw}@6VmmyvTO(i%<5CIM&68ABi zVN>zia`V@+cuA5{9i$!Mf!QcEO=|w;W5$G(v zNIdfLL7wzdjuaX+NzsYe0cArH=_tOqB8j4bs(g~{r6DK2`<`^GgPf=!cGnLSk$V=} zY|ayck!CE{?4piyYxeH7!J330Go-^<5cYe675<2Hcbf6F-yw zvb#^gEJF^az%NA}+cvgy7q==P`4hfwmnNoigC#pE*TD6Bgw?3}4r${0b}`0SY5#&y zitTcRSEYy--{td=+3U97i+F*M)!*&eVU3q~ ztf4N>c4QV7i$_0VO33GhBKcb4Ro-$VYsPtr>vsJqd~ipK4@!`Sa`Rfn2dB7v@C8;# ziv5W(pQ5rTp;=~IsvcwsJSkKaK6n>=@cV*O(A0r|9X@D6znFx-G1M?-$K`A`JzkdN zgKk*nB!Nxw!6PVNJZ8sYS6dX9XF{UoF4*=?=htD>c4_p=l~Y}eQhW_jsjIUTF+Ih9 zI`X$WFcDMy?QSkk$=~)dM@SfsxP!R#=xg{<8}v-^qtOCxj~_`;c;QD1`$R}-kzMz{ z;z!52E7*;|Dd*qdM-_Z!uOhGl;5vyPiPg2*uM5w1aIQ;^v!fjDMs!HOLC^_!iA7Rf z(mFh3I1(;ki|vtf*Hpa3Cvoe3R^PDuqJ~`;H5|RDp;dA~$Lcdga;PGg?XfOeA`@~Q zSg$3jTfn_Exq%N%kekn7lZsQ!@_|5|S|cu-G^T{bRAZ&u&l*qNm=@nc6>fu)e@_}5 z4IgysxFNRP)A9@BS;!AW{qIWp7F$F~BuBcr2s2k)A2ME;3~K4d>*dCAbYKETbWq_H z{I>CBTJyyoKT1{+lYDeuHAGPUkTMwhM9>1GWQbxBgpugi<*E`5E>RS)6k`u~#uGwt zZ(vupk^tT~MED@ZLkn?O6#Lgc@2E^=60ch_VEIpkGp6F%?uMQ*hZ1CaL)dtfu%Lm3 znN=g@g~)G90ZE#Y@R8DyM{uvpbY$H;E7eO}Y!!=okp0$iw}ZKY zCFUI%`LG+Fu^-!x9Z;JJweh`^TQ;P-R3C*{y0*iy$B4B$w*lRXm7`+XVB0Us`13f_ zK?yTZY80{l0zQ{>mr4=3MzATzkO4|Pjxi_gItx!%o&F(eKi96aD+X5{y-)QJSxnC3jZH#KLsiJ)ucM!=<|7l2&w#?owAD}!(6$F7pYZL8Op zTsv{31lAa(4|SnLN}zWo`3EZG>)g}2V(qb8&gb0o6*(~(sas`hlgBJIbb(kx3tmHG z!$owy&=cdS#Z#{dR4{y2m$x@H5w?b8aS@dND-CBz?;+LjOcC#n?f8mtc9P*5`2q8{9$bgq-N+ zB1K@t%*%lpMhFB{ypuM>nz)*7q6a5fTC8zkIPifMUrCYJcQd2=BId-RaO?yLR-O|U zYF&TKOY*r9v;M*`Yc^wK9s%@nCcef7KllnN0Ag(1MWV^=<<`iyuzyo?ACG_gwv}VP z-e+yZhwI{6&LM|O%>6*?gai~L-AoUe4`xQUOM>jTXFTSn#(o_w_h}Q?&@6rqd+^q& zQ(ta0IewX(9rnE;ak0etBGv#Ee=C_0-v5~dpbUI|s;m{CleMBl!a|iylq6hcX(q>Z z)oR8fSad)QRSa*yB<>f)CXyiDv~?B7`g*su`sw90x{>wTPl2_h#eTof@iv0hUeU@y z12ItLdy$A^TbKjU3<2+Iwlj;Af75Z~rrNMInz{SH{ya*cSZzr;#Q#G@lqGWn83+n| zH&`Xzx9m>bS_e_28r`@^LZx$T#OdiU5|}^H9bblrGJNHMt#J$iW2DU)FoX^oE@q}Qb7;LRo$RiF!zHKatVX`EeWMN249BsXU)uyzHDh0%> zgU@5Q+ZQAN9%2I^Us|_hw4fBbpV8{-OheAMLfPpQCQ#kw3S+7Yj>8B*FF~Tk>ife) zeeP8v4I0}xx?87jB3Ig8%;`T+=a!F@_9kZks6v!_`QqjyX*2l0R!(_8LXImV>KZkhKg{fJvOm>=hBR7h&JmwAo|Ksfs%!+Cd#&tLjDi+EeD0RCJK0K z-FTc88C2%t2CVPa`6O60q6@a{Wq-NQSS|;&dL_#}fF}a3Gm>{eA&m7z7V(g=ew7I` zZ=LT}!CJ=Dglv&a4M70GivC7}QC6es4{q6Id=fUkOM_u!T3*N~V|vS~)da- z592j(B2qbZKB+cGN!#?rO+iS}g(5o{&x?i==>x=U-_Mx0E&^K?hGYBF?Tbia8IfKY zO^s>F$fP;fqZ`<`_^OIShK)BZbZCAgv8zhO9TWsHZ^?kMUzK6MKfaYTa#u+BLHQuM zf$`M|6Izpcfu=NSL`>BelmV)%W_fjSy?g#B_AA&}VWkyr3Y`UEWN?ACOol>6M4X3I^kPq>aX^3vu^ku?%fZJ{+MC#<S(O1&#Mj7Nuw(zMMaLc&%H4jXe(NV7;zw7G=#~JmASeiCC(aPiFXwCTNCo^ zg^!5g9RM+}^cIgjk4IcPyJfp;P0r_)yOi#ROb-ON@}T0qX)euvP<=hRRz5XZ=uK(T z4TVBRhRQMunIOqe0Zp!eRHQlAaV0W_vsmP**pC-6rJJ0m*)ys+P-3}5I3Sr{g$T|u zrB}%v!C02QK^1TkAJ+(1UHGxjw%YB_PPRoE2%6%_Xe?hqqY@=^JQO-;91`C@V*^`X z2@w3kYF>JH9Xlb5i8iEg7Zz0s2jC~TCyE8)5L*rv-#HbMuPUdcZ&h~5Y0>@hbx}L^ zT`I zlcsvtU3yo!D!771q!a3+Cif!|tRlvrv!ucH-W&z%)R$+gFSjVV(G>3`tx%p1b~BK~ zHB?tCa49Jwf3OmPhx>xd@+lEqDs7cqipU2<-JAYI;SlgXL>TDrM`Q+|P%MdCxIck`XWDhuwX??CyJ~)p7oi zwvO^0AL>f1i0>iu(n5l@UC6l8SZi$KScl^Bh-6S9- z@^Hs*WfDUsW{3^G$Q0r+rZSzke9`|yJh zxJvhxsa^qi`2kwsE*Ix36He^IHgxJ#LZOxz>nogITO>T`KeK*3F`P zOR6p@V-CDJ1NOu|_{grvrxgB2po{bZy^r064tS;NuI222G$H<5)WO-8z!i*)B{Dj9CX-LXkZ$Bs2NZ)H+?G6PG0 zM8}zw-lD#+2A{`|y^IreUVp*$(tF(3N3gEv^`-LqSzfzxla;$k%1n04{M{|HjURgo zWjI5;f&shs^1)jMT%;RUipRuRVYgCzFw#Cc*4DhtrR#D;W7w|9@aHsB+!x@8V37zYL7?=MZyz^6T6P@{58t=PV+|!?$-Rb6pYjS z&lFTsz2<+epjQ3jHj zFI!|!esg3Y$eZ5wMX*RfB5MaL)M|c|zw!U${>qe@gRl7p{Y5hPm;L3S@xK(bk^`h8 zMDqYxXNbNj5=c8lLoPg#AyWPv7-8D?jb-zk%6~3to9-AW_KRmUU(qhF-GRC3&Z>(< zQUdp`;uFMrTWy~_Ck%I=;70cDG=EmEMXD>^x~ZnQU$Q=S&ZwW!=rq{)*PloiFYryR zsI{L&#TYm-zPl(40-K^+O&@jfaYbhHL3e#McTb&%h^VhE=~|Ls^+idys!vKTXNLzA zlvq`AnHHbRja9L+`e-+8)-zlOU&Xl=el3&^KAx!KS6ecSY&IX1jM5U%a!Zxz2u|Tw zpgZzUYrZ7aUP)m3`7yglpI;tWJE>4M9@2xbuU=cxwd9KFyR3>|S0ByNW-X(ln0=cn zH*s6Isa|T5^?PyiB?2dDQ@-^2HggQG<)8uqic=qKOzIgm^Cjh=&6IQoP^32aD$cI- zUltGLn~Obo1_P_c_oHLPU#MIg0l0@Zh7W&=oxL`5I^UIRFR|}y@|FA6x*grnp(V6l zab0uzQ)n0AjywY`Z_nJv4k{MM-%1+L0lNMmrYks7E=$co)SF$Fl8tB{w3)vWRgQUq=&M2BrUvS63%??N;eBagg->$D>0UV2>;nH91aQm!} z;D3mRQw1I*Z>tPU*oVgmyr&zvQ+ccVU)Nt*^+n;Gb5?#) zh>_|Yx^cm1dET&(xYb@9^7PozVr|wEWY4Co3SOeRMFEu1X;oY~xs;qvYro5-u}wQG zA>C<8+|A$ne*DP8Ab&b}aI4irNzp4%;G6rol%6&v#(7spqLwQ=_fG=7%da*>+1Zp> z(EfHVS9;xqdn+G#c+3Rh&SR13-*d; zUBVR0UUWtOapNBu`@lo@qAXi+9XqSW(rh_knYZg06sbu9hsJ*jQ`4<^i|Dz>8tq@a z?VhVhPy;g|=jHS_Ep2dGH7h2uh^N?72;c!av9$n#z@6ACm}u;h$Fkq{OJ4)Fme@;q z_-An&!ORrlP{&V%y|nw2*iwR_Qi0S)2qQ2k1h^9K9|M4vYQj{NV_q#aqqYtCLgm(! z(y&#EOrLf0bm4nhck+YZu?&g;hFWL9tRsYDmYWMlGwenmtL6~ZSNxIc7 zYy=1LdsA=z++G-LDwTM3Ao6lSG{s>t!jLgW469WAs1Dm7-$v9~tic+`|t!(aIq6y6P zn|De=eNR&#C?-|f7ru*x_dA!bs(kDVR1ZR;fAEDdDATW0v_!vho{$WQX`F`<5|_b1 z5L?Ha)iNWx_y+q-+|QfwV{Wt8Ayw*T?imR=r2kZP4#r~*c$9|ilCO5qqrbiUcL^pF z)9rb|F!oxUCNy*)6ddpVOG0sq^8yiI_UgvGfl{IIyr8MQbTsSDRFCMb94Q-H;c9&j z*yFait1)_>vsWfx_@f6m`~`8p5y4S6v#Li6CN7rRqz0>^Ez)P7z4ATx>#8?o_18SF z%BrC_ZHVrvc@-+`F(%J1C1UYxUDW92;^~+4u$WOPG zTH;CfHRn4w74f>(eLX+k^yUE)4jIdC~Y7uwfskq`cIGbgk)bNjNfJ-rV zg~{1kgDRwsn;V=LCwAx};nKD1 zk4R$FK#MjrO9*Lhlaw=B*k2I?(9GQ>w^mQi{*~|Xpop2fMjj!gg{_{x2s(U|oiH&p zXVN|G z&1P1Y5$fNJ#InN;PWqTwN#EYm^(tRWNNdO%AeCJ{g1;do_Wd_nIpGjyS^M#=e<3X> zzOdH$e?rTvbX6Hy-K9zcV*m0vV~tVSW6KO*#~RzRvZTJOw#nFKscu!}1hW3loi^)7 zOg;cmBa>C)o}V;y{5+^NoW>@vg%|@Zf!zO)&t}Fc+OZ6Mp1}(``#JsmoU7harGK&qzkCcUehV*_52pOw0izTH}aaqdLJbDK*{76tA{oR1#&6 z9uSlj4^sO!OcY$SJ-+5xM{h}Ye^EWS9BxhTvid)snHI$hpZPJe`f!6c7e4T2)?nf4 zfI$T8S<(T}uLsYH50zUwuET+(yezVm|5H71bix3&9%4_N);moyG1PN5)-Yigx`%KJ zdWEpmVGU?HsB{lA>8ssm68a+D3}@@U6P%pjac>5iU-HIF!;?tJiwmsFKSWi}!AZ2I zEU3n;r{JexP}YxGSj`+v=Kh0dxrP`{jtNJJXD|UA+oG~hT%y=aNK;xe zjL&q|;-3rT4vP=J^vL=_clJ+t_A{J5&}LOnmM24FBZ4Nw)8DLOV=QTM?;oT>{fkOx z758_H<~^4RK59Ivd@!;7y(N+|fI+zIDa6Md27V1#EX&9sSW;kIi}vIQULdY7!qQ4S z6+Z^=aaY75d+w_6po_F88ySQ1DStRG<1|Xn_RP@P5>iNu|Axo-lboHW59&3Y3ba{5 z{32%cD5e}n?z$xH*?+$+T?d!|;o*wvO!r#e*L(DOb zj`s+`uyWtt555bRU{Q_d8in5D{Mc`B1gqpJGwUX4*y{D5`We+-H!+ttA7HDq2^%ei z6>`c*;8fY;ALO#po?V&>0wM5@Skd$_C*@(|`~uzITzrUQWsWY@6xg5KBI82|#-<9j zmpNe9L~l|_3g^cCv2y!KKM7+c{aoLy`ni1{{VbrLf?uk2qscC~GTCy~6VfWhf1|2v zlJ)_sz4_+WHWep^(Ql=urTg7ltK3?5O092kOw8+-<@Evg^{wvf&*k+??(6yTy4ihw zwflOiysqW7{U^??PFlY#OQDJcrwpQ5V#OSeW+wCSddueC8{B1cwYO|^ql{1@g!Pc5 zmMZ?2N7wAr5jfm8YuIof9PO;va;j%4HG|+!?wtvP;uUbKN0c(I&f-uyrlYL zUNDVHzpg=KAekTYepq>2@Cc1Q77rK zWO)p}CjJ-pPm6%4A$Bb*rP|@THI7r$G*lgFuRI|GHMWQ;j2bgreZz*VN_&57o(&G3 z>40QEqaHAMldTZn=EuH_(`sHnqaF=-pC32*L@cYGh3c~}yA(3lKM8&}zg9B07CSe< zn^VA_{n<;^oi+G4Rn*Mu0;K`?-Mtmp!(BfIuL3^JD+%;f?`-T=+`NoZ|vhHl+nhuEp6f+S8tX6&L`Dgp6In>jcl>)IR13 zBb2H;!;o*Vy?D~O5>O{>^dxb|6RWdfVa@B36WG@4NywNg2@aiKD`$OSfJh4I)!Fui zG~m69{xi4?l0>>n#YbP8&yC%kVIt+s5lYDCXX?iNQaxBGMIAB6Y3tQT(aD4E=l1Im zQfC;?Q}l$@S3UxHy4OX6y(k%=E19z|8D!_ONkZH_M{fdC37Q_uJ%f_IRJd9I+EzG(hG7u2fXzZEP{zsuA)%vkL_Hxv&SPpQ=NT+CI0 zfw*|40BJMro==YJ(?bOr>Nir5seW%M$Wp&|7Iaa+V+y*e--ima)o)cnH}(5O!D(xb zOpg~xR4Oi>D!^evF6I`9#*>R@3X0r|=TvqLp8Q#*3FqQ(1$VozmZ@kpq#*QS*cR&M ztMXgLA#r6ZKpQu4vp#Y;$fKe#GC=_56dcY|3fKliHqtFG$>U*a6 z-JY&)nDS1`41@#rWT(>;UpCa5S;SL12W3flhyY; zKzSMW$>rx3l%~o9TFTSu)%X06@&cZd%Rf_4ohr{1P@eIvzUOwzm!6{ha|QKMzK7~R zQ$=|f6szyKiBBp{@d*+wbMJk^tn!Hqwbl28`9x;s(j8PAc$}THRwcfaW$1 z&{XRW6_oB2BGCaNC()y?(w|-bz39)H# zCPwm&H@n}M8p$^vB79?VB;T~-%ztBg1ZoE>`15~Ch|ULVzbPT=0!)a(d`cSBjd%YR z1@h$OuaSRR{(I4%Q^_4q&iTK%-WA!dhYxb`{{ycRj`LMs_YL^id$p%TpKr*8y!|NV zP9pQloQw3J^jHRZ5EV#ML|vux$`={9P-NgD?L{b_nCc<~X4`?M)I?}6MleP~3LyQ4 z3bjdmX^{uu?GkiT6e|kR+u2}m5ex+Xy!Pw$%laPw0XqY>6C!1QefxEi8C8xxppUA< za|?9ux5E1!<^A66{oe2Wj`Mye^Q*l$ro%ACn`#(d-P((=?SFeTu0FcMcrO2U$MbLX zzo}#Y|N4{v8~sn|-#2e>*T28BBdLF%`r;|{?~-#as1CK=M1XEqNbB;lchd=Cs8mgd zsyKW^r|^aSWe}~RH4c@%PhT}uWkFKA>}RA1r_%18`#(zA z>~f;AgC7kZoja z6*|9o!2;T(?cQ>@BwNIMF{e|T#X?MsyNFRY^TswDnK@#7(cH6Lk0JW7H;s*0_El<2 zZsowK9P{kx-s+>1wYY3Ov^k^rTYdB)Eq(Fe#9V39;;fAJb}yGst%2}Z%wZL>3?kZL-rb<^hoEiMHn0=3ug&% zQ8S{@WjI94ee!*`Ng3`sngqL)6Gg2s2iAlH|6*}CyOMB}O(f4bTv5+2LjmNTS9L1i zJcnieo4?C4AMg%YAO%syCGO!y-OMZy(tt)&t$VEpO2$sp?BQjn`kZYjubEg07=$u) zO@=d79$Zw4-2$k@^rXEC3UQ9m_kNml&gHE@P9o#m4QSex{tf#7C7aniTk9j5=Y#cn z(@?Jy8F#EoDMO`R;eS~8X)DfR6?})-;v22u8-vxY-6jsGKGIE_`8=%++~}r1)m9Ai zX)7?-!7xz#|3LeDn@D69A$6mwcaxr&-unco*BB-HR%Xy(Jp zj!bshs3&*aj!0l;?c`^K)i0luh&oZpyPko(KZAOLezI^8PR;2GVp{_qzyN@p?)H#D zV470mOZ;qntQNprE~UUtUV#gxK+{SFf!0u$b<01@z6t70I}3CxN}4g{9czEKU#xJ- z*76*r&0026D#Y#3%nC{eaVa!Qdj^fw_;m$i`+bwk@CQS_8fKmU?ck;_!}yGlm6i$? z5;aW)g}BbFD!M8d_+sLDdPcNPd}3R`B0AV_^0{SJWm{Qb@3aQ7JtC!S@Xp|9;cBB- zm06Gb5Qws^ZFT-L;+RST(NO}-k!TOV7 ziCKtv*~|z?ucJ$wtCRTW^<$v)1D7$cAAa-J+CewvjQ=jDPNA;0^+~b0X%{I>Hqt;c+PI70kj|ck`J@Ie?A-lIo$^ z>;dc_3}iVFrb{yJru-!(4hTo2U+Xj3(Xm`hye{D2>>lqUVo?#7Keo5U{^)8U`AznV zoX4JIPUrD$?5J{7n0dja%!H6jY=BtUt68>n!Pv(>t>z%mC6$!Id)8I|h^#fWw!og! zaKqm8p=Q;jk)#m{xc z9Qo*tI`z?SypNneDbu-9Na+&;p#twW4{-Tl(7Yyyn>Az%@J;ONfleSCjvdUgZ^eqv z1!1&X2={0q9&gMTymWv|C!hsF1+@4@fEP2<>O82Q$g;`xoC9pNInzP4&g+MndQeD{ zH&X}1LBm_m-{X05{jiEdfn5{+s%MndfwU1V)Y|;KNB?eJ=(SF+xRpg_S*@&@-!X~p z?YFPD7eR#1>+KnyBpZK}#^u`@p8c!!)@hl+umsasY8XCCqq9A^!WwY)o9dLV4?mdR zUHJy~foB57a_foey!QAL9zAg3)4g;5@ZUei2g&|z!Y)SoXNyH+XL_(}!pm4+M>3|? z9m?7cC&eDoPiNE;9Q>_1)q%ghE*;?MSTHX8n*Lg1I}i?5Pd*L8{T7#UnAt*%;ha=j zU|r1S@fh95>GOK+$%Qgi5)9YKy5)O<|Cx!iWx2<8waQ}UB$}N~uVP+d%{bn#zmmdy z(hIj^zJ6u8-mM|pZN_5?@vDY{)vY(VSnc#+7KAP(hJfSFG49kn)8uxF@Uw#-r&-Ki zo5~i*LU6E4L1?>9EuGE0@Rm*!mn;F1_nWd7c=dB>d6)L0#bOkmWpFQ|M6179WIVKH$l-yofGn%a7N;^`gaFSXq@2lVB=T|xb{C)e^% zHmL4-BSC|b=krSc#{C%mvdq3xYE_5LsHdNy&I(s4B9=!62~H$EGO87}qO!GPKbjxG zbBPV)owB#Qg&fE{E44rP9jzh=i!hDyg|9?4(_7RU`4I%)LdpGEBqI1g(a)69!%=Pd z9XjCZGelndYWvmzwiHarzwE*B-~Zb^(CI;EdjYJ-h&qnk*wg^SY$L=Irh{8XVVh}Y zt>%ZFj)1*wK-Y4h{*xIrX$>ifvro;+^d22cAEp8?9{>*h6BePs46lsS>^i#2tY zvyPcY$X9~88m&3IRz#q>#D>alkTq2{TW=bs>_n08vmZ=*kevXZ*uQuR%)$ObvIJ7$ z82w7O`l#$J^Y2(?C$QmGcVc*-5%0jtz>zqrVnbr zK#GP_ea~rZK6RujNV89v$$kNg_V%5Z7a;Ma>H{bP!v?-wx$gtsPOvEy*xXWZw)hk0 zr!w`y-+SAeFt49$&OKhV&)l*}+Tvmp% zmtY)PTC^LUTfPeP zOpfL6WyLpFUGDZg3^=v0Libi@nUQ@Am~4v|5>c7xK)S-Wl2zlvise z3HBerAMB;i}v8RFz=`8tS?N$S!RNsSlGmmyhqLJKW2kBW&0Rt_K% zF$JKyg-UCpQehU!YA6*5*lW8ezwCtQ<7CvOX<9<2QPNNkRNhr8W#<8?%z`z-Pjbi7 z8MK=0Q6>F*sZb$Z>QjKUC%g5<>!@6fS4)&h)mGN`_?)^tg{YN#p{nPUm0am{Y73RP zQ=uiA4{AY+n zEpNNKAG!30d)cemZ~t9T$koq4AOAnnqlt)YE4*R*_T|K<9f4nl zeThJ|R{*XEua?-UfG?6p2i*HeJrr{A72F%J`8$FD*j8oTNh5Agq-86&kglsn?}X}i zZh5e3IeNQCd`M<{Qj5yaQ4yf8w0ObYsztD!)d+ffEc_-YQAImyE4*|0Sa17^+@o#H z8$06Tjo^-pVrTNs8RDW=h|{Wi=VETax8^zaBpjnW`XpwtEqKSGGkl%%H!;8N0Pc7} zZypGj%W4G(`1+v6xGz{e5Mt2lBZ0k@JL>_T8#$6)(R#FCyqVO%8!faOSC6V5K+zg- zCXoh+gA445P`Fj3B_8&n7_0s!tn6>LKf~jhk>m!deM0&u~8^vDUs zWW2S zJ!vasjw$HZ{EWSy49y(`ekCuvrrI3V5nK?w+yW4pi2M$C=?cwgSYH6Px+#XDJqu*5 zk>&Lkf#a=d+FZn`JC!W#@(FT8fnKtZR@oD!RkdyeL=kfsXT~EK|7`=q4QqRhiLmyH z0CKoto!sQ88@*wD4?xjV-4xebn z7HWwdJ*{e7>}X!qWyYr1(d?>_ZnWa0hXE|UcUUH$6|7<8#OP>Zvpiw9c;SeDN2`>G z?II^yW|v?MNZE?JEglN3+N9mhI7@o(yLNidU|PHKeyRS-n{T-PJibPGWyuIw7N1=h%Ja(^fH-D)cEMHqRS+()=St)>EbY2@j0U&8(A zH5I3GpCkAExX-DnAOY*hT)8Lv-N@XUid^oy%Y6>_-D@hktMw4}uO~z3nIai=*h^i= z(iy1sAH>F0<(`WKwnmROZ;Tk*nm60uBCm{#AHiGH=@WF*?8+|ZwAl2_v07a0B_iex zg{}?cAkbFe&3Xi=KcqoVkgPi1|1t z5_BgdwcgCy9hxsWA#oHs3KrOPzo7!2i%!%W+FQSDD4L1Pl@aq|o+3gM=1oE#&ye=a z$4L*Z_i4#m9n)HJj=$cvt`Qysi?`9-@e06{BJ1oh%LT*%|+_|VMQ zFDWxRtfF`U$_UZ*yuJ8+FP^0Z z`AWO&>8#io;GQ9S0xGpXZ#mH>s^J{PGqJ8lE>m*Y2HnUhu%r1X*v%YrLQiJt9?@p~ zQd+m-1*Lo(v3^MN@D}d#xffQI-F%S?SLp&unzUfe^@K=2z~RI}LaXkrx+5s(g8D`| zP~3s$MO1AuyQ@B*0h8sb8=ISkQZeGVl%~Ue^uM}tw0q6NL-JMRQfVe`cn*gEN7|zM zy{e;F{36ZkfrC|9_Wle`1YmRmxpqcJNC<#}uY>@YpnFN_3$qTQZGCvW`ba-)9fWh6 zB?Tq@AG?}W~v;rTl=*1t>zy&WE&d}By-5p&qpPP>|4glG`QOK44ies z{fwT~0Vn zymiMdywX~xz-$~4ovgr}SKJbs_$gFLK3&L<5$@o zzN)&1FQk;~KVDmI9B`HiVw+vdt?RL`MipyxA)bs`)s?HNF0H^X;)gId`PT9>)|#z7 z*_#izE?#H66>C75mUB(Hky8|C7=O??&KAB-@N}%?6*x#7=}Hg$NIimFmWF z;a%oqqYRY?FOE$M%p2jSJw|p@Vm~FMb{?{(+)J~^LZUC^Qxu=dGx)!r|0^~BJYqt$ z*>(R=&(#ftkvzva>H*<-AIZIgE%{h&XVy@Dy$^^GlP}*@pZwjobJcgb-&Wr|;+A@l zO%N5e*FM`vsgPE&kMyIADj{GB87~M>B4iL+Ekgf*2l&w|;Ym&PI7ca=TYEW^JzOu7 zH)Hz}2gAyWNLkV)^S^}yJh!U)eOa+jeWspC>~fVP=pIHLb21a_g4(a^r)9^9;Qo7H zO0ZKiA&?gAmpGYWR_OwPn>@JUVlK>ze0@+wp%&{Sch>k!LM-PurC&}V=OJoU=Tqj* z`Akhk^$=!W%}!JcV>O8Ww0*jk&Zj+h#@OD#c9ts)LBncJPtBxpHM2!kcT-Pq`lT%y zV%^qOTBGt$RUe(I&FUp{zg+d1bIt4Mb7}k#fhD9i&W8c3ZjQ`0$KP!%79=p|$=?oW zkl5@x{Ap$LqybP={V3!}>;c2!Q-@ahss`=6bf>NTMglfQwdLV zZ{$~-xs8v;f&sQ9pmmPWa7uy`Sb6|(Bo3xIPsXcPZeNiP*ik4Mmf$S=JhH8*_zd>; zEhpMc^%TJvIGm1kl3HUy<4rf#vf#8Puy9dCTQVx=(5lktL$N)q3ZYUdOgIbF?}Q2U zoLZzX;jePnjtSDG=6e;NIkc)mOZa6jKQJYjt#!urr@a)7Q%6g!c4-S>)hN&oNNMg-~()*)kS+gGwS=UHadS)g#Q6lkEK z2@k^dP>VJ8k#EJrk0YSQw9B2>RH14>nP&fJV-j1OH^ID)E2veCVzY7h6*(3 zZWwxO0UAE+60#nB!^`e!>@n7p_{G>*yw<-lRzIYnwM(o%6X#DWbB#KLB-Ri-bjC+2 z5SB#2`rpOF-|fbFep`gm#Fa8OsbY^ZUg%iWUUofRbzaJ;e-&lFL#--;bWe#OEjo0u zv8Ed1R`!JL@w!&I&$fNDcwMOq2}#ZIrzj#&ut`Yjvg+88bZvHT(wJUnWfmvut%@O9 zcw@uSE(?cfiEp7;mQ1=f|odtKS-t)#`ENUwnpwD_w$cCiL)8MfC4dxw0x7u7bvDs8i8J?r*E&yd7mu)EoGOd^}B?zpW_o9W8WW)$th)N0<;s7`))rs`x3 z>$O_fmWMXB8k-a*|8zQiCR)67Q;)R_3HnzmQ@Jg>%80bwZH;t2QKrhgpq7NGAV+7X zJ*ZmHmRG&gDtWPEhlUVfUx@b2tYqSZjpHk}M8IBx6)Lz!2$^n;qM^oY(TjxnRcG8A zSt}#V%wiS8ylOjQZzAmiL|k?OPl6YWMNu9zn5kFZlx=o15;9|m8M{;)TM*dN3@eWt zGqcu6tmb9Oy;}SQEiJ8jx!kea+{lD9CAM+Xg_%gKo7`OuR4Z#R)YFi;SOhyWA;ZLy zM2mk5v?T?GHfL}z`E(4=$I2wC;!O#gs<q$@zA)u;riphgMegO6^T^Q0}W0EemV@h?Nz<^aulU(gEs z{713SoTkkhMsK0xT6_c-L1Ue^VqoCtq_;^#8ZxYRsfhC8p6>P!OC0rYh#pW6v{_dW zN{-Q}L7A2e!dNV;g#iEBtTT9tU6Uma`9dC7{>PCvQ@!T=AU8atP5kAxSp??uSIvB{p*V=6L{c4>1rbIm*fJ3twguE!Sl7Jf!Dfk7MFRb>-R{wET zx7e3V@<@hks+j>1XAeG)2}BWQJ}V!T8;1#EF5fUWYCzVVu^hEt*fG-EO#2ox_ymn% z$H4k%v-zwCbt!8+`vz5nt~Bh>QH1d@HSZapxjivee}YB>Ms(B93k6=tr;IlHErdmoM97LyoBa}Z zh*C-rkk0;|j7HK~BCK|cwHA@Z6;AKggdwTaFV#)^OY?e{zs2^WGdUHH+evu;2T`wl zmCZHWewT9wr$k>X_{Xr~LGXWwpHmC|Px8hS{6|PxPw;or$xfM)AF(kz%asKJA`8sC zlW8On1hN39n>Bg7MggZ}1^0c{SKkwrDhUs39=PCSyuQbnxC%%vDVo@4Xizx)D^N15i8(xKuJtUbz4Luar|^RvQoi}u1z@!+y*XQny(RiNo+I~-O38grhGdwEsW68tx$Fp` z8puHh2<1DYK|&9Xis#g8d?f!qSAz!{UY2+ppvZ2gMS(N!G5g_W3czDoUO7 zR$(wIZdFWzy52h9IjC?(X!g%k(RB+w;?!b zvo3~NO2W&8pNm-QRnvO1L&pq`yV5xO*Q@1yZ7A^i^s}4K2MBQm9SOM`JBab{>(jah zW7CfnRecPV>f^0LVTIA2W7G}s(w&Hkg+N2X1}E?X z_hUSgA%wIQ-BS2V1}vjB4(YJ z*Yjy){#mUdBb~a!zMu@_+hthKsKf!mz$X*VF+TI`O{F!Sj6dMbGd8mXo1*?k!YR)* zhGj+qhbQeDVU@gO&J!^vb`)OuB;)ER^T;g!4iE*6vzN*SmV}8!Je-uxk&QO{F!QVw z-3rf%U**C6YCS_AQ zgUz7Z5pUJ;bv&Pur}psY!ef)fO$p%ze3RO2pCxzgY5<}2?YyVKhp?8jFrPq9?(QNs zIj;x-La}}tnsWrnDP$@=qF16!1YljDP@0=9LDLi2^d4E)tX?QpYcIJnTvF6jnkUYF!cRZjGRz>DFt7dJ|E7V{EyS!H}Br zXda8yGif_kk8meGYaL>@%0?3L?&}hMb`0{|dDG}hbwc{eC2Cvk8Nwr9P^7?IE{~C) z()dB8DESd#fvuGMXqc>3t9KKt}3@P)oA{el0OldSxz_?qDMs@qZ@vQ?W05YO^m# z8V;M!6l{}8X{xV2FTzh_;l=!*;q()`u~83vs>MDLz?nk_(sO|%+VzM*x*RN}l;|&c znAHWXtM?Kp^kX>5Fsq->n*@*)H1T@r3Nw?D13mN>IrIT;sX*|Y<)Ajpd&%~!#am_C z?_nwxuFn&hB;y4kU(VHhqSm!5uEvx=;FG0O2^)?niPdLX0t(++S7LR-!l0A%Ojt$^ z><3ZN*>O7Fu-tP@u@!0pZ4|YNO0M&F-orz**$rHv)H)WnM10laH!)SF;)KO*fyJei zj}|z;76#<*8=KOK0IfNW*y?sB6B^j6#jAN8I}xbbGibR0D|(r^TsoL&o7RVe60XRx zqPjdtRj9@9<%3X$f-HQ&C~_Op;*vcFPNmKHo^*c-e`=G&W}gszc&71*e^YEvzDxOq zk3B1LBCh6%b<@riij#N-o3|9bXOHI8^CSr$A`!dDtkhHX=q!bBj>KwbW@^4*_=NBZ z`94AYVLxJmO-4O)JefvB7C~91E=`r#SWYdQl;{CW(wto_LK0-Zuk;{xElWV86Qxo-$P09}lCxZ; z`h>xlY-TD=qMp(u4hI#=tbXU0`H#zCniijbx^!XI0=mZ*AK7N&F=%D<6;#Ce49UJ= zjj&F2?aIE*b)NiG*n3J`paG-JGdCsj6bH?N1lOPk1wOJy~m_>q2A4P}@{NxqfD->}qVU+}%hGh%- z!3%So5a=&BjqR--~!!HJ7J~TaKWr4ZWPRVO<`7ubkj=rq0R0oqkeW9v=!ki z)j31$$o;E~XJz`GO^_RRzCn60Uer%YO=nlt@cm-xUXx;r3<1Dg5Um$eyX1<17f3aS z-~YO$aW`)jN~oHg=cvTPe~d{QvdcM#G+1d{?Eya#JXP{D)&k@(ZBZ~*5U4HB4mNy*G5se)jJJZu8;7?BeTUrcThlT^EUow; z`e9v9$md3Fw&(?Q{QucCiszWPe#f6==^=N`t`$XZthsk!LQl~K5)M%`f>!P-yq-~| zxvSqzbByVLZenJ#Nqg#Y1}au*R)q6XW4(Q^0p?sL56Ofmy>|w4BSVPbM+x35>0tB|Je3Y!x5T1&joA`V;M%XYP7E*;j*(?W8hUdbWu)`)e! z0t0&v<~)}vp<^#4rL;4a`alXmA?ZvJj?CJ`T*jpdBO?R|SGHWKx?tGa0`Y*}>lR!y}?Wh&C}Ok<-v)tAy7Z zS)57z!TEcRv^f>zw)WarM`(}IpA?CDUCA&V4pZYIHMbw8PL#WL5|vMfoQqTALFlOm z;z6aJ7}Jz?vAo}f0i@TSt1^u>r+1*&&#H}x?eo;9f(J=b?=-UUmHB5ZP6i~HBaq6? z4JR%l4FvhC_ca_im#h-84~O^_!~AX>s$nUj<}T)-@2#LUa!61MZ{?^#a(H6VWw`rf zP&>X_GE!U9;Hyfv=5bDpQ4TwQ;MLe#;on4fY-3B7?&?hS`ObPeWnD*-uEU2#3ToG+ zI)C9sY`F}FUDb2KwM?aodl z?j4Ok>@I|I%C=(mPv8&jy2Uv|n*~{vc%e%jiSO`$g{^9EuI9!}sy6dtF9@jd<5#*= zMkmbC7?snchQW23lf?%ja;||N6xWY1bBaF;Ys>1%4yA0oqQD5JqTp+#6#lGSTZW>t zKBV1PAM|gCR5q89;b(RM^h2o;4q(}JM6cXA+`8%--M_;g7ZU(0S%()9|BpG;P~uUt zzz9{qlbF0yh>ciWV#3wXnuha}v61|9FgT&A&Tp7-#C(B^BE#u*U(O}ok;2uM^v(=%I zH5@D~pO4mH93O*%n;=;8V@j>S8`Vd5i)bjkaXw)c7jMQ6!Wk(#uqEQI(OE6GVKgdv zS1*y$?P-a3z*6T`CI&ips?X-1`m<{JEUrE)WiD3?VK@;F{Qi$*;0;0JbK?`_CTkG$ zT3*STTzP|4buOxl4Lu9VIk=8s2Lbh582 zvE(EvhU#UZxYA1pnxm+;69(?F3W?Ic&DqIiilmFZ zo=fnZWB;IxyL+=&?Euu?A;rsFJNJNWr(RP7Z$A}TLe>9!^x~;gF>mp}dy02DJ7jjf z6)M{zcZE8)^M$vpJ=bA*|7l*HbZW3<$Y$an7FFKbEIt;eYYmS}#p z_y+(qrq~$lZCqwkX{K;)=MHe#+v3R%I;tbQIX?nzJaF6ZVxa8|1z`3{d=EVQbnak# zFG;0~lZQWc=xs$E1bdywV8|XAsaqaFR`Ud}Wk;lx$VA9MFNHSRKHdGWx0Etq%#F^J zkELXjSJEE7<%qN^1;BZ*UneRACt05o^WZt+P=BMzV{hE z+ACX~W=PU0X83hLmwcR0-@J*xTcM|CA!1*z8c~vf%kPp1j}qllc_*@7!v_Lp7vmMP z^)^%O{MPw3B|I>qbd(ve`{fH-4;|QnSbD%kLnkGi0D$$#Q~QzL$dPIe1oEz0!zpB` zu&0qPk`uLw^rT7$=uTF$K1T>nC2E&X%l*5YSzu$bcENjRJ=6g4B>vg^G8!e0sOdtY zikMfI%d2zPYPJhi;E>2wjVZYbGYn@XDk<`}(VM0;L2N_kFk5LZ)R9cKsN(8*?wy3t zkT9dB&`c%bS$Ae|AdBgu`ocZ@B24_aj^>^&!JsE3M#>x~2ft&ejjdcYoNjT(Fsk3r->VX1GyaS|E2?>bisvywSO81qYrHlALMR5OB zS*XS{$J)r%SKQ`|gas;X3060s{ZfpB4%;`pj{x8vP#M>A3UYmRB+xpsJDaec&T!b3 z^ZB8}%q+)5(|Rjz#hX0Q^rA1cAO7TUn^Qn379Cp?{)zoDd!&Ux9ycD>0}Pv$BByeT z;@|R~^DL%MS$#~rp!s5@kCo7K66-1mgYa)CnKtQk?DNjhR&)<+n6xK^7mdeHi21;_ znt$0A0-w$zu=^4R4ENRjTlg9gQU%B3$VY0hgBBFlbduQ1`P zpQzechd-0{ts3H3QDg4SJZ^rz9X`eNv$7UY9k?>>g|gz!%Hv=KLStIpdiCAlCwZ%7 zHP^cBAb|^xwb1JadpMVct$%B;sEV)0e<7pfF)3f;43345bt!;Dq zO4(Flb@R+ z*YWn0@bk-yB>c|j#vbzc{|Wrsb(OMjSMW>bC(^}ba>oA2%$WIIFgjPca2gHuBse1) zyBG1|nS%Q%P`p!o+f5DzpD5^OY>4gkaZ$LC6K6krDI7i)$pj{SJ$_gkG9MTftS%{F z2p?Pk{SyuLRxZTJ4;|WRk;)0#VnlyBUnAJ|;J;@?k3*mxT}(;Qbw#j0lS}}4yvHko zzq#iS(@`wwef(+_J7aqY_Kt0e9dy5ma@hSy?&tHQ5T6v;ftTI7=8Qs9B7rk8-Vlex zb-~z)V8kM20mIYgHhA$BIrd?B$cOoB1$Cb)DB?XR{L{Ij>*NRyZx|KbGi-wq>iHwBML zS4got;p{Mm6HUQZ)wRGo6S_79KUeP*6b|no$#}VySqmI!cT78IJy;U`lpV&Jce@z% z;f6i=;clx0 z$b2V(El~_2zO^pI|3WaEju0;ZIZ_Z$ku2d6UkCSw&TtPV;T{gG1n$<96CT{bkrdny z?L$V;&tm!)T4{g)6dG+PpKH%`ahA=CnnXifV=>_AaTmNx7}(D>4N^fhfo192ruwf#6IW0t;7*~BPq!uBT$rfDyS z3Z@~&I+cX1Ir(p8&%H5~|bdtW?%;+JyG#OC8)rq$d{rF!Kj zg5AbCoG9@wEyl8B(Fp7O9?e5i^A~PfxeLOkYb!R4DL2mu#!7y2uQq!q0BlUdi4YUU z*n!NZ>oWzGVL3PGO2yiefs885 z_8E(P%*{E6R?^!W5dL@ix7Y84Udg`PST$o$8qYq!ljJbA5j!vM^V9S+5=G=CeMx-6 zz+L|y&L{q}R_y=!j^l^M(ykM!4|~8Txc997MoS4T^a=lWVF9u$UxdsOx)L%UD(J^S zNTwLR{T$5^(_dJ;Q^@gjSyE{!c6b zEMf9l>8n`7+;raWoX(*TIkC zJ0Kd4hQcz%trY>wjkKAR_YSSB&=S}1c@l^j05Orz)CdQheKr>Y&GO3Q$%c_tWjAyQ z@Uris1BkQaECp9(I{xlKAL}$JBpF7K@)t;#<^Ew1AvOBD<<5hs=T`LqA1HYhKO*0! zT90@^HQ$caDz@Pn=lT`>ku&F{U(x%sg=_ZDJ;bjz>m}Lhnac`9QYIA9w0ekyFfZYU zocY23br9__OUQL=a0X(v#_9E5$b1ttd*xG{rU^YM=G;j!$FNWUOrGkUu?% zc<+G&hm7rthlJpO*dw`2T4*(ntcMr~G{vs27tX<>5Tv?DdUlMSGE!c`KqQ^vOl9~X zZpQVPZbf{AY2B(f9DprK*wCY=PrQx;$8rN9`H|coGH6oFq)QIAu>bXlv0e1BJ#^eT zY?x+46eq<`B!#@rG3DWHP>gCl@JZFT@nk(l!fwSC0~;m~`$}(ZDped)=e}!Gsmn1* zE8ouH;d7{$4{w&?m4F!Z+XmHEK?@ zm**DDWY|LO|IjiW;xn&)Y{R}xj}u_o0}5%0&p}BQCht{lleC}3nqSAakPWD}TnGg( zYXZ#qkxEi~|4k)1A}q9=@3H$*d@=%{pHuh3udxHx?L#ZvnW%6%r#1LqQ`D49jYN^t zQ$Y!8;TYw{XJS>TAMPBFVAXYI=C6ZBS4wb%3773QX|ua#wI$L8x1h-eOn6Nefr z7-XzI1E3I7uL8I`ZqzY;1mdoUdr*cH}+vn;{QQBreZ)dPPQWU2uC z{p|UBJeIFOEtUFL24f%P%S$csM*yb!Ay#38Z{(I4>BsV$Jx8u35PKz(300~kt?K2d zFo6_#P>VNiY|iq7CUIiu{b(tndD_erya zpUYjRl`e51g|G-!n5=r7Sip!Cm8hl*x;ZXiH}yh2@Rk;PL_H8WoDc}QQIX%&MX=Yr zBO8gV!UBcmIQ3^z>J&yLK6tvrIC-rHJ>Oyin zBe~O7i2UjuWE!X80q&~x6F-%%fsq^>D$A$-0`)s3dLcomWc>ia#8nVXHM4u{bsrvX zljS0~SOEaat$yes7eaaEi_+#kivDO-XO(=pDI03JY`T@Gt1Y_xe&c&)rrQaGCoPk+MB zrW`jC*0b8|Actdoc&g0~K?Y_n12Ld<9u<_mjO=qnUS(p6WV4fJ|LOym?iGpr&8kjr zc9>52z?Huz2E)b{q1i70%CI$VKly(fnh6Lk){n^B1Q9que(6;m_BoBZAG-N|xmEJA z>~k*FvFXKrsC}bz4qKyi9<GHfqp0sSw|-UU92@@o9wO|lRboS>l5qJ|nP zQK>{l2@uJ`MrL7GQ9)3^OHoAID#9+Hpb2R;%x?Rk5utw)#q~0%E~UxFn!r z055psrs52%T-1i(E&uO%W_GinegE(8$49d>^W4vKo^#G~p7Wf;@?%Ox-h;VwoZi}4 zgT)*5W|vGawa!wD`J|TdSVa=DOJ=ydbOEYAo&)o#*+^d?a?W$KNCN z3?6a%(NUwSKf;*dUS-VS3WZGtWiqP2P`CrX?XMrAa%t4tkK}~W^HtHTFnX?Yhm@g9<%-h?}H|Io@#X) za`J1@iMj+jXu4u(e!e%ne4L{EN;;BVFX2SH|CBA2=|fxQ?Uv1$@Z^WmtbxAH-6-5S zrppS~eU2DUnZg|G+sFw7eJf>H&b1VA;jlu6lufK?F&dqVB&|N2_$t?)zed{Il5Ou6 z#5>wcEv7n!U}b7*vIus9yn$fB#J7xG85M?%b3~f;G4v4lTUKjLDo`d1w}Xt4i8v$? zEV(gKg}IP8htn>%v0f}x){DOr0mN9Fsmjiq+s?F0e~86A#$JePsTYPS?6A1t~QQTZJ9G08#WvE0*0XtS-n8@PpoB`>+sRkw5O6 zj@Xx6owqM(Do_jSaccAQ4k7Vnw_g!0`@rvAu3qCdu7Xi?%-aDNB&7im{%e80(3=i@fo`9c0bwKRWP4J}yIllHG|3 zpIlfzP zSFaRwI7pRXL*J0VH}SPPQ}`~C?!#m4Dd}Kh=XWT{`-F`3%GUYYqt^drN3_vD+eRa> zm{}GwpjPM}5SD|+8yx&$VE%7~s~qe3FoC@!D-%r{B)9XAzDZ9+^7hND@(ab7ytV>| zGM`~_{;kBZ&aPa!>mOe!SoGunlf$C59rOla6R5q&5_TN^a4$KFzup|7)#Q{Sd%awr35`V$b1z^TiyU5gr=dV>qbR&n<(atSesF~#eR zoKtIjifmn5@g=9qLI3*^f18$^K-sWzN>D5Dh2pNb!(Ie<40OevW~YQcX6aWR8VlNV zp!*HXoM1tg+c5jIDd$TbE}YWJZU4mjJ{Tf^`B5-`gqrNTh&eKq*^c*K=ob&DC2Gd8 za*h}oIc8;k&UWN5$s3QmqTKNWE8eg5e;KVp&X!;_-ycbfjAZNpcO;vf%W`}}RL`%% zixDb%3+m5@eCDJ6dkQVHwD2|6(<9iDsTetBvh;etP?Zj4h;us`WImY~VfHm4W4HKk zT7&@$^z>aN1WE7CdB8)3r@*hE)xF3W4;#wDTP7ZoQRe&taxU^sR?h6&I7i8uCO`QK z9(niV%$btIQ}8&aawy(WUh5qL&{mJxZY7s_m1rZkqfXE2ifTHl>f=_WL{>)^hE^@t z2;}OS>|b67cSYa!z#lk#mD^{@ReW(4@#fJh@^{gaf0eIe-#gU74?EyD`Uv=)>zo67 z7Jb;~0;Grft0}~l4!G#dRj{vPb%?!`q{p-Ar%3t@-%B5zP46e^gFDiRz#_9#rk^_= zwY$vEV{nT6`PqoAsxvN&f9gnCTKobz#HIVtz@(ouf5)cB_BczJg6uDux{*$anzkBW zcDg&Zp7uYeL1j|erLN>(s3C8KjkKn~C{l|Vrx3jqA%y4}3nROIwSW1&IuJOh&vW(5HsF_kQx1!3NQm}`iuuUklV-Io+%!9{zV`_thI}SJXn!MEHl?*M> zSm4NRDK~wgi(P~QT!Wa~)xzf~ZTF<4S7$ljR~FP91(Nf@9mWk&AFr5la=R*-ThDou zQ-6Q{1S_Mcbqpa?$gbb{@BqDP@+Uem^#0BwS)I!c963>o`yDf ziRA8m>IgIKET@H>JOiyoKjF+1o4Avx+j$@6EwbEHSzC`Ga|&W*XE=EgHcNT)&$zNl zx8)@zN701v7v~9PpJO@aK}-zgw>zdcxmmxMBHpY^NFJrf5o|b~-h1Cq5~92e^FFRTuo$E~*O}V|flHRCB6OBcVpEle= z9U00fq;zm9S4B&9FGVM}U2gIz#~HBw z*fWPQ16ivi%;zOLF%Q9h-HKyrGON6c+4T`hizx|KZ0k^a7nNH`QwsxAoC+0T{{pBe`1V4+3kQ^JNJUWX5gVO`JqQOAv5sen~Z#3n~yc4 zC7&j55T0xF_#>ag6A_@tx1>92i(j1R^Ly&>3(8{8uj@ z9)gEAQ%>w)*8U(4UPdZ*Fn@K&SD98lmgUe#5>(_smO~jY_9bIk4i|&#_)GTgx2)hz z?1vP(MtSzy6?o|8%M0nCIjo5DTCUv3`w^8z)=?gfh<8ey?`J#?6Ho&iH!wDkALwXkWKx?t!JXt6Fb?g{;QPTz8vtY7{uJYmkicvf9Jb% zH_t8})9ox+xUuB3XMK``3DCHDqMV%qm%zbe`~r?O5dD%WfaVL!1PW)G)lcjx#O!5)^X9VUv_ik69i2>>&F=Uo zdoID&4E9bd;8P5jav z;#xR!wWgJ-h!49I8^84lG4D2TD33R3=Jvrx(Rp57q%Biy7G(C>fBHL}d5p>Y-98{-9@2-1(M%5U;bx zIr7mu%}qP4oHyqlY12BbuROmc**f%BF1%IvhM&v=|Hl8GtjzPVZ2ot?F4dQKw8>rH zlD~38}1>pz6d~ku>ulLBGH{+@#DQEvyYdK^2(#QIXLmF;$yW1 zizy?wX00Bt{fd=7vFKj>R$SV?Gbi^CMd351Fa401Rm=qMM*m#=Dv26jxn-R5d^bVk z8q%kgD9$j>d4f;qub1mUTKs~KbM9PwC`*>{+O-Frb8iILPd%y@uR9+5>$?cj_vR7fgIeQjJuj}5LQm9RsQG34&cd{Zk*w2e;ju+L8;my9s9p1}gUu!r0 z;Yj|7fBz%K(>phwUkYY<1CsH`L0y@B2`d%*_R6$KXIO_xh@7qeMNai(Fl5=Zl*$R7 zIHm9I2KbWE_FrTF?G9*9?z~d)EjUUbKN@3HyBghupl7kjZweop)?np9ef{<_(wjr( znYbW|oifhYuOf|*%Q=QJx%qk7$K2X)vD<_5E*Ib!>u(MjluE}pj`K)yzdH6R6PT{A z24bT!-uZ+R<2-qxHE{lpLZ7I|PFH*)aI0VuF@AIQ+bYmV#5|kuDY4T;Fyv<11#7S( z@b4tnO6=72&;HTYL$xHt$mr$zCjz?8YaR>2JQ! z|Be@zyv5CWxvv<%L%kPv>2ja$Z*6Fgou(cOTy=%a}I&yH*+xCX_7Wz zVtPR0Fltt@Z#TY6?9sI3fAc6qn}}QW9-BGH3gcgfs4ra#l(EmGpmrw~js1Nvj{y@K zPpJ4@pV+|FtK;Q$%K(fL7X5)51TVx`eyP6%f6!}+R7vYmyN~M-VB&@WcsOq>nLA0&gvOC1;b)wyc%c4DvEUC0# zU~5$ikol`nG%GNLBo;Pkms>7wd9%mI+?UHF5<53YYB-)pq_%ji>Pl;F3Q!i?mq z*xJT|Kbad&+|tnI|6Z!_w*gotpoWOj@314}0>?&eKJqK=aGOKb`7`RARG(jw^yO3e zs@*w;NtzB8z1=7uKXE_aP{zl1__#(s?sh-k+Lw>JsJ4a#6?*5tNYD>84F;64DQ;V> zJRjZCy+72_>>p}rruR`=Qq4+4K4!7DY9Hw7Ek6d89>E>#XS+GK# z`vQBHA0-;g=8QXf=nLF>js)_(M^^6E`wSliGZw8?scwr6GWI|5fkj6BN7f#npfKq{ zFF*76Hu>XY)Pk(>xgG3(fDYD?MZNo3fZ6_f=_UE;R;Yhj{(D8^^!}h2pWOO*?=7P) zfxf$FIK5Qf%R1hXUj!<|3*-_{ZnZ!slzb&C%N_?t@~Dnp{4#MQ=Zscrp^Dci_K+;U1xv*J7ulR+bd(z<`iOHHHnmvRwarlDao0x8%Nc0hXUX%3Gt9JSrP&lz`E`z8O6wU`vja1Lrr;nkD={HdA^jmLS_gThS_d({1 zb+2VUquO=SlhNO+cE-9yW6d1e?SP$7Hr_kBD{3(LK)o(>7x6)WyJ(%4LU}hu@ToGr z4k#VbK_88DG!gHm3X8HJubudh+=6O8JkU?S6|hTf+4nIp(lYN`UJKA`HC59uA-(2* zNXHvm`o2v* zNNq*O>H`Da$uO;pZuU5lhe?T|A%408KUeZ5`e$z2sgOL)QnA_Nvuy~M9U^_QT+CvT zfMsa@09TA%EN0OC?xo1ftYM%1$ar;SZ=u{bQAtg2lf;!ApMBb$--`IZ zu!1Bgc3R(zqB(Fj&~hW>T0MTB&8r)IZly~0@?-gl7-xm~2^oC`sE?eqH6_ah3`IU) ziP%5)mOuUFk1l`4%Ad*dXQr5W3l7WgBhrh9?{Iq|G*?W0MN0D7Psp3GM~wk#enrg? z&G%oyLv08kf1y*H>Y>U;kh&8iWUYdrK}*L8tnOE^>Da`K#T;Ism{Z2r@xq>DOKhtG z#&t441*a*LPo-y;Rc=wh0fvvgMLSJ_pOZ!Y+53L^ZF}YqN|%>;$gcaD8z06DJhmNO zS#JKW=F$O)Dkv_ObK%>DNGDNK8fjegHuMK zF#nT^#la}{X?|`bahf@l`Dq;zD0JgaM$LO$_#pa_^THJ7?u4$a{ct*3LpwIZp^aui z5>)&;Zmu_Q(2kn4i#l>}wYRuRe~WbUgouT$Ur^nP4b-!Rblc9MN4Ay88{b zxg9Hr_>sz9wY??tw(vVum)gi9SvF+;NwC5NMQ4fDl#66>gEcVdEI|)3^-nbQR9o%U z^Z1~ydvZoF5!{7N+}z}r0!+RYqW5#UE2Qq4Ad<_yqUM&|fzo+9Rgyg8o29Cx{V-Y&T=g&PU> z-Vb<_d{6-^NCT->=D6Wz^CC6JYC5shPKljd$SjGN&&sr_xxU?ZrCexMS;BsZYJ-l|l42KR2CCj; z)^SD6X-Cu0p7g?(DZ<|5T>NnPmJ=M92RVUlcLTfg&ok@eEfJ( z;fFYN5cw$&-?UT_`TzfMjw|1sTYcutCO2EY{d@&FG z>m{fZ*PdSZCubbFV@KjT_BEF`vx={iV~1Y%Lo}3%TjIrLljUIgsgk8S)*{5me#-=m`_1`98N2# zBV>GqU3t|PQ~y4~3VjCq+F2CwAK=it#GKO8XfeaZ70p%ar~Xo<`XN_4iz+sU{p*9q zVfq3$JelUW;4MMO$5ukz_SstKa^~3Ya%aY&(+uE1@#)OTYdUGSLpMW{SAH1hXpLG;rC>$W-QPX z?7vnw7YM|y;q*;b_@Ir1RUjBZl4{AFz@MGT!EBw(L}F*jAhawkiOuYszl!e`hEw#O z|Dg68Owe~08JmoVRH~&iQj{d&0y~Rzza23rmzXuBwPw6H;y=hryOp?vlR~@p0oN>m zfUxPTzZ4MBO z7&pt6vYW*KuHQEb1Lckx&blyK9p@AA&M!>K;pFyM63+-?W2yLivSgGn~#c z95seJ{+lrvk1__PS_g*tG1BW)`-$ppf5>JZEZMJ<>{i!50nbWU%^p|9`_X)N{gLwG zktrKV=>WN?Y;`$RIho*NK3{R{GIhn)4xLWdWMuSsEM9%gk)=o&RrL1ST=VH?X#TxF zEa$9+c0(Kwoi24NIca6(qQez616J>KL&4GC_hr$#U ztcAW*eMu2k5AI-pdSq2q*A>tBm&!06VhJ*0ug}Ys7}Oi&`UOZnj{aOswh7#k zQ`b_ReM1F^)%SAD2xr*ITjt&GueZ^w%NbW*1V(j$LlAp7J|T}J_(AQ{_PtLtO#-1` z7l|xT{j;ZmYofYmt?V!1+ zl%KOCMh+&S*r0?HtA!2mrcwxZ)Y5Bp0a{Gw%*RXd` zfyyn}b&pM7s}huo;%8tl^@emt;sdinP8EYc<8v=Lwo8(vU#}Q%$q^(IXvCM;1K3EL z@g*Va4&`TQ945yhV{h0T^hSNAxZZo@7*JMldzE9Q)D{6exoM4D62 zpX_|L);^7$dl|5U`YgW@W>l-xrD7>!l^q#P3qsbm>P%t1JgZ;w@~e$>5OMvI(Hwgx_VRZW~&*{J}JZw>s7(vYAvRF>^wb`3qwT;yopSGYql2W{4tJ?s*m z<4{(_(`>sHrkW*eb+u#t{=Re`TwZCv@X;xw9Wm z3_8F7yC~5)zL(tq26PV#erxmp%-?WRQ41XdAs?1zqSky_pjay%+Zs6diga8Vl6A;G z_Dgah;6hm&svW`!qGOqX>c#%YAjLedVuqbJ5T#YRkmBB0>3cU)sQQpy%DcOIM)Z}H zGkPhjXAM^8xz!U*+y9&`?}zN4V>j%)09L#02@p7phKRqxHmA5A&QrB{+O;0G7|l%L zdN`+xExW^6Y}uxyG&racecIl3CCK7(*CI3ev^OiU=R;MyLt1E;s&eWxZhLwnFm@v= zIDV{CLbLTA3(^vwg7mq$+exzxL2bEechXtKMRMIEzBSkUhG5-ag_(2k&Bmh?$Y;f`XRXDqueoFnDw#s4&s_1kJO8vw9TO4g0y@b>Sx@#2_moZnJ|tRuqgiX}b#!xbFD<~6Ls>Sg0Z z&v0wR_`u$Vy+p2HMy(^1vx+3ye6|K=QFTrHye!#2U_WlRW7%^Isl z+=GtW$EOdq2kTbL9QooK^J@O73@dG)PR$unX*?tqcpJ)rZUxu!W54!tM+I7{>yh1a z$U!CV^rw5DL#n8!kJR%QwZ~P$ne{ z&v$i>b|C=(lvrbpe-naP#~^&|C+f)miA=FxwJ!d7*nCjw@I}qnBWxCxj}v7sT7{fF zlHZy= zYgPZ1JSSSFk%(4X@WoNJQmmh})ctf0tD4Aq7N;k3;tc|2%1C^jRQG5s#ClCO@k*Di z3_#U*k{jYNb}*+&vDACIgv;W3xl)8M%`jDAlw6#6m`G8tvE4m{QIt4uf;wOg>FZI!Hpu6{`#DBZUDJ>w?-Lz3Si znZ@hkH%g`+&5zT$j(GCo;%*_uBIew_H49&W4!5(LP&)|XGZb)Y2WTyXCiV#UL6yJ< z#)nOT?Wn3FLR!eYu{dlIm=|$O47hW$a)Ul^mn$p3q8sn%RjZoEY<%2N*Z+gu9oNxvf1H!zKm4C6JL~9RwdDS4(XYN^So7Mu>$-YN^${ zyZz8o&++U{zyb-~fs`3Cw&SivENz!wM>m52Y4oP+YghP!FY*yqvu1s2E)VQ}>}*^Sa7S>+k+b|PeCobJ7CrY^ zX1DHNSKIt*BRKu4FbZ&+b#Fo{fP-n+iR;1)@s8xiKm#V3C-I4J%Wd3Z90ge)GXf? z9f%r~t;R8w&sJnKCUzI%5))luvX-II_4v!uEfG=qhIu%6n=BW>mA&6$KDu!tbcAK2 zc8N?wQg_=~61AQ#Z=ryk(;+x3TJn0PqCPTk#S~bZmRdp6i523&58a-(A$5f;LG~W_ zXozpk?o*jdLHZ0ga_cIVV?V5Dj#vfb|Rn4yF4mVw3{uVQTOYHMG`cTJpOyCkGaxn{X znL;CCNiS3n%+bQI!TC6&6JYNIh6*5w6|$<@V_m|Wv&&ccchoE|I2B~Co4o>RG&&vS zNG`RH<`dP+Rwy(x(aPwi;ug*e2vf4IWqy@Jsinj&Hirz(lOlj5W-n&q!Mb*7Rp9}x z26>kKm;7_aNTS@!z)zeg9ivMi9miZP#`$1u*S;MX>zqQBGA5yI%-mwerKNCwn!_r! zX~@H-)N_<@{>`9r{8P#cZ1C+ola?cfic`g`t&`rsCnxhYwD6%>{NVPlj&>H>w@w#% zbaWlJzTAXVnsYPB398^n`$j3_#!Avs;y@fi)a8nNLG_laph11%LR3AM+|DRErQ>&q zCfDO^1+-IwNWEN5YCwzf76~o!gVvR}YhzV0qXIF(TY(~h*cS@~WHf5KX*}qD&s#}c zF>PNhP)rb+lAmOQe zsyCxcg{gsqX-Y4KvZq9sd2{Y8hq!dSvn~2#5@;irS=E(jg{gR{RIK=9U1~Y>oe$I^ zwbc>|Z~kmJ5dp)4NM7q}n;G%=0NdR1#!v;WO=m9-TcLoTg_@>EvS63WZ^SyUAajx{ z4??i;pi-=SUDboVbpw6zy-_^afSPIprO1>btDn&nYEY%0&{9ZWglwP9BpDIzAm0)u%`b0SfWlMO&lHzzFdE_~T{4F*x2OTlSOa3;S*9sE=F9gJp)fO+mrE)4Zz zj_}#R#9qlU7YyQT>1D%itTP%jUFk;|+Yv354#GM5K@->p})6{ z^=CHcZRxHP0+6;xoXct#_X=!Ao_&%2vZd*rwhQTlY*e_$(~#KZx4%T4!tUmHhW~`* zG6GY%DZ|0dNHS^5qAQTz{0pPam^J&g`J;r!um;6j`psBE$8KP|oJOx5KKFNm&Jy!8 zIZ{Eb>#5X(A4e_OOWrXPPa-0zDy6!CwP|gBK&mrpsbKU{r%iM>ITKJW!<>k6fP>rc zxrqo7hNiyq6RJ1L;)%7td<8Aj-{qV3`&dxnNrM?EW)-K8?i5VrFEVtRmx(g z8!aH@M?s^e*xA7RDC2lV|C|$eWnfnK;;Oe|+tIF4W0$R7!FboIw_}|+N;A5AfldyY z)L+#yW4qCoc^my3TQQ4q(?%-8=6RHvt)&2B{Ul)na`CQ+A|fnWcc2Be5MNk$0zdi(gAwFAQZ)_tSr@r# zPVi&jA<2pAYvxj~mh>*H-3@)P-NKP4kUGz+A_pP5CxVDLfw8V^OoyfVy|D%_1;jK^fObc$8>d& z8Tc1R@N~5|%5KiT=ZOE3MD@keS}a6w9$i%Eo8T;;y&T}xQM0cpFrN}`|8Icu)Wir; z6c^>$=YSb{IFPPqUdqX1+@JLLcJ2XH@DI?RtG!WGN01_f5)&mCTpu zuNe2oSvwrD1eqzZ84aO_Dh$lRXp@AfpD#A52HtcC-MCBlv#l7Sbtn_o>ja=@CiIF! za#mmUa{LX6OyFFao8%ZOUJ3@uUZ!--Fkjy@}{t=cp7 z?NHV1bgYEVHHT1QS%ZSkdx9J0lOot2MN)F}CDJu|wrAjrsQliI6RYW#X zShITg2;>$(jChyov}I>dE62p67t1~bQ%Y-%c7YbChYSIocN?fyd$XpU2x{El31cJa{oZiLnSNBAkGwI#4Q z`&1edR!g1Qayh&oy=0Pck?veY5zceW`681kijSK`;5M?@^fAxgdJsP)NvS<(tl{hM zs-Ewn$1xMxx#{WPNh6Qnx^R69m$_1z0(Ly(JS=(K{#A|Zt)+szCtmuLhT(7jhAlYf z^Ci0;a)yAV^zISXV#NFjCV|C~!W-Fjb`BFJoo#5=+zTxwbc9viHd6+|ZA|0eY85uz z$0~gPZdru{eO-$T51qN2JTdNARsTs+S4(PsO%Ub4JIKq5)zwZ8nxm17XVPlz6i&6S zQi@~@iewG$yl@hM)s@=H`MP7SIx zayjRaqeFg^_BfMtWkF@B!VUIF#d>GWadIiwwO7u@OA+GP-#qPoIFRv9L#8mXt8?PR z&fJVftV(>%-*j1H{5CVNoD53}V>b|$SS~)|;VD+$$5_949~ABrKj0E?SLfAe4>k2_ z!cSgMduVMC59&sHu-BKh#XI8zBxb^Sm7j(B&noW|FTxc{_r%wjzwKv2L;Xq8QZoej z+^6lZ0(9}T7P7|t2Z<$BD^ixkeWrt)C(4SFCPTg2rLRe$cgj`UJJc$6hg~4Dkhh9f zW%W=T?+v+3iBOE|#>Ae^IC3nAcg1H*C#)K~Ko^X4HR*i?beVOF^W0*Vay%^>q!HAt zo7F*}AQvcHc4_siyg}$q_w}{L&djkMy%F0M z^PKDuOS};#c6LtN3?&WIYtyUVif>ah5UNZ&GZolkE3OAt$vA{{#vy6?z6Y;WBK96BKc0_qj`*n2JsRsEv8i*~Qb@>~(W ze!kip$&}*_vUdn{`zZlM(5~EEetsASN8&D0)rSk>uzB8E4_xpJ;8m`ufLhZHL>72Di~ zy`6%IPX=?u^cL5Lq#OFy-7nVANT}j4mb){4(y_jELX#YGl1fCgNI*0QK*=}>|bgM0wWsf;YMv%IcTnb)deis@ju%6$*q~pL#mI>hHFR&GpNkj$= zKGgxX{Y>X?I1-$BfkG!HGE}+K`H5^GJLH*uy`C=gv5lAgw#uy;CsVVB(S6VgXII5P ze#ELcZi4j0Td=}kbL;gaZ{ChtqRN-?A6;_@}#&&dO_cfHeEy zcr@i{=NGcYaK39fQRW*%eAdDpjoL|dLY%d3h4_ncLyeL)C1O6ZSYhQoaFLOd zb#p4e^};E27n34 zw8SX;%B0*g2N{aY6OiWiM$CmJln7hhf1Mel^6A8W^~HkB`jvP{-mL}ezUmaaAc7@+ z#4L&WKaWs7_(RYlO&t5}3@>s5!Q#+=((BI2)eOn_q!Xf%qL=~r^yyY6tOSXf&=hJkR5 z^t6Ki7!KLCNE|yZU~LXpy*9OXtP4(PN+N!ucDy$2RK^nP6t23uc$&t=m@WfPj%dSn zcyMnjr9Cb2HETp$c14k~F-@?Gy?)FZXY9_@0bG&U?Mui7Lo5JY5UVIXtZuaOOz{T_j}^2gR%R#{Q!D-oz?E0!BC~UQLt5o zT%^-l>L$KAL-^CG?j~^0=xViEdX(J`!8T9OjT4<9Usy&G3elZMkw3KM4=4(I?j^V) zh~1(shaSEx#1;Ur171EAzHoOTcaTqRhLN0H4=D#dzID?M!&C~n@GF-jL^0AIeO&B} zM1Oyr&D=r#T)jm6H&6RmDUgs7>ZF*uPR+QLyao8~F3Ftd;v+lW#8>UH(=l0n8{N`d zqCRt=s^ZF5qNKZWMt=F=m@wK*Z)DgU?`sR2zwjO4_~>HsOEOkw zg^PT;%Me9D&aTK8^?wr;ch8>^=?MdE7H%!#D|aTNRi9`Nd`QJ;zFeaPkYQw43pYir z?iWYJxi_|kFoQPcF>1UiPTKg=pZg7A<5N#Q?jLSyBDtO2Q*UHs>@$QJ({}1&MUvEE z&0*nT!e;FXZrABmieC%YO*(2ZB8*3v9Z}Z7EeN2XHlFtT%!zPAmx)A-LAEYVtIcSe z4%g|cS-+xT-LNCZ$GE~qycBLu{;}L0R{aPkkXw_=GSG^Dw?b5~>^47BuoU;$T2y)F zq=dqU2oZ)GcH$)DyY|&8j~2l<$3-RJT0vXHkD3qw#LD|i-6Jzs!f&#p+be4P=#S_w z&R@&qj8P4Vt8QWxEd#Q(>|ic82JMtyGR{xgrx&}O+(?7!tK5+2&7%@)%4ULk68lbO zMpuC$)NPjMW*vg{5GNwsgpnw7>P~{dJ&D>w?I=o>n4qd5V#628h#CuKJA4SG##>UY zE^a2JTU7vdJ1fgZ_dB&jOPxs-;i{sOw1n(&r2D%6ooU+~@!iR~3d^OE)TPX?yKaRy zHOU|1P5%N@xo*m9dkrG_sbuz5Yh3 zc1nLE6+4OGGK2m;MB#8%t*s?YdCK*7HgEJ-JI?KA#2U5n06spVV%U&fW?^$UY>KO~ z1H$OL=by=_uCT_RjRUavw1q!rz|pE5+5=aDr`cr^5iJJ3xg(n1rXPAQb759~iAW&i z!_#ICZwh^&Oeuti5h%$2x{j53IFa#3tG?FmU&SbiwMLT{&}57(VC%;4A&`smn~QaAVd70P2ul(WIZUIrB%!UzvuAL{Oi* z*np!YA(qCr%rbZUVY5HezOgMgb{%```C_*vUYAQQw~7=MjTpP4{ssvFGV{kmPAQxe zBm*gnj@J(zg40Uu#A5ckZSf3HnNtzA!fnxt29bVA$mW+oQ%02_~_4nfS;XNrXU8KSR-FKuQPvBj|mgRWx*D@l1qzJydF8F!CB3>slB+E zfqPHHImRA=@GTaFFiL$WY)4*T1C;54ViK zLvoiL0gq>Z2a_S=qBP($h86QD@PJ5OQNpvp1Ib|wbGp8arc?z256XJwD5Uy%1x{OX zhjAV}Tzxk(i3lWNGQ>_&PXf`MgYiEMwf7KEY|_|F!EX!)@7(<|PfB`tM|G${s&D7YEaI~XSDiQPn3 zLxvF(#?h#dTd>Ml$~~HJ#diAyxF%Y4rFSOBim-oe)aueXf)(8ZZb&aF1)prx&vG^W z+*sKSfkq*+_J_3nYvY;x9w~Kychvo8yCXPD#tP_{nA&_0#t~G+_%Ld`O2i4(HBpUY zSftj6x|N|i2@dU%D`B@Izd@zcrTMS8cWQ4K$Ok!qE}XDJtet*UtQY#_hA+p3qK)A2 zgY}C{}xYbwoZ4BO;`9v0eZT{qgP5ihYs7TUJD?{ypd3sMue=PoRm2 z`OAe8Oe6KYqWP%F{b->>+uEFrqTD`vsN2et%dLx)Fg4sL;{M+pTKZZ%E0c?PSgKn+ zxhM_j1{h z#gXH`U*N8-sI%6sh+RnpyGrSWJy7;?b>pC_Szo)*i*&PL-tnBVhEVyf=twaP= zbl#WNFzBmHXZf?rYjlUzr~P3}viDQqEHw;|e{yk35DBv*UGxB(m=-#YK3y$qB~KH1 z1@JZ6HB*7XGcJDURa{qmLNbG76qviw`7LkuzfQ~dcIf)ExjG6O1262k4}pL0sW8r4 ze2EVWV;7*Bja@r;NVxqKl%hswXD9eL+=^{49&XLr(H1`R9%U=vBL?JfvuHaDJo7Wo zkhV+W0XLDUrQ*!BQm9S7BmBOHZBp3Sk{Kf(56DM^OKM6>O^w6N&~~myZqAH{eqL^L z-x2n^wRdX?sxt(7dASkUQ5^QC^=?}wJMs;mLOV+E&=KyoMLw1AX}B?dM`=)@I0QHB zcdL$K8_{jE3>C-jGavI>h;(aIm8zJWEjfRm!q3!xvSTx;8*h3SQrUwa>r&lk0E?Cs z+cp#-b2QNMW1g`Vw#VHiRQGc0JoSOqdakUou+fPd_g~pUkH+{ILMZ)PfZH^*~z<`TGqia zROR9J8s{4t5|pQ(*>5hsuZ{0lfd@Lq@4}mXci4E_WtXpUiCQ^l;iN0^DJ@`vh2Dq# zU+>s$5$h(X!8d1Ui+%n}Mwneb8E&0N?AG0!gtG~>8!na{E+OL<9!q9t z)Q_<{H`9!wLh|piA0rE(&j3w551NcOY`hvaJ`ZpHMy%UqYGJGe(h0DTqbyH3ATCMK z7Ic;b_LkDGHPC6i?5KGlUa7@PluBbra7c1hMARKtqCMKk#z=cCU5rxwH`GFXMcSf; zJW;5avjo1_cc6- z0*A#e-O>Gf?H|({rM^C&i3|%ngu@t}w1k)?N#rqH?)0q3E+4LMjUj22uzyZTM40

QVotIy5MwOMvSwjjjzLNo$ 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�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 = Vec::new(); diff --git a/src/kxos-frame/src/linker.ld b/src/framework/jinux-frame/src/linker.ld similarity index 100% rename from src/kxos-frame/src/linker.ld rename to src/framework/jinux-frame/src/linker.ld diff --git a/src/kxos-frame/src/log.rs b/src/framework/jinux-frame/src/log.rs similarity index 100% rename from src/kxos-frame/src/log.rs rename to src/framework/jinux-frame/src/log.rs diff --git a/src/kxos-frame/src/mm/address.rs b/src/framework/jinux-frame/src/mm/address.rs similarity index 100% rename from src/kxos-frame/src/mm/address.rs rename to src/framework/jinux-frame/src/mm/address.rs diff --git a/src/kxos-frame/src/mm/frame_allocator.rs b/src/framework/jinux-frame/src/mm/frame_allocator.rs similarity index 100% rename from src/kxos-frame/src/mm/frame_allocator.rs rename to src/framework/jinux-frame/src/mm/frame_allocator.rs diff --git a/src/kxos-frame/src/mm/heap_allocator.rs b/src/framework/jinux-frame/src/mm/heap_allocator.rs similarity index 100% rename from src/kxos-frame/src/mm/heap_allocator.rs rename to src/framework/jinux-frame/src/mm/heap_allocator.rs diff --git a/src/kxos-frame/src/mm/memory_set.rs b/src/framework/jinux-frame/src/mm/memory_set.rs similarity index 100% rename from src/kxos-frame/src/mm/memory_set.rs rename to src/framework/jinux-frame/src/mm/memory_set.rs diff --git a/src/kxos-frame/src/mm/mod.rs b/src/framework/jinux-frame/src/mm/mod.rs similarity index 100% rename from src/kxos-frame/src/mm/mod.rs rename to src/framework/jinux-frame/src/mm/mod.rs diff --git a/src/kxos-frame/src/mm/page_table.rs b/src/framework/jinux-frame/src/mm/page_table.rs similarity index 100% rename from src/kxos-frame/src/mm/page_table.rs rename to src/framework/jinux-frame/src/mm/page_table.rs diff --git a/src/kxos-frame/src/prelude.rs b/src/framework/jinux-frame/src/prelude.rs similarity index 100% rename from src/kxos-frame/src/prelude.rs rename to src/framework/jinux-frame/src/prelude.rs diff --git a/src/kxos-frame/src/sync/atomic_bits.rs b/src/framework/jinux-frame/src/sync/atomic_bits.rs similarity index 100% rename from src/kxos-frame/src/sync/atomic_bits.rs rename to src/framework/jinux-frame/src/sync/atomic_bits.rs diff --git a/src/kxos-frame/src/sync/mod.rs b/src/framework/jinux-frame/src/sync/mod.rs similarity index 100% rename from src/kxos-frame/src/sync/mod.rs rename to src/framework/jinux-frame/src/sync/mod.rs diff --git a/src/kxos-frame/src/sync/rcu/mod.rs b/src/framework/jinux-frame/src/sync/rcu/mod.rs similarity index 100% rename from src/kxos-frame/src/sync/rcu/mod.rs rename to src/framework/jinux-frame/src/sync/rcu/mod.rs diff --git a/src/kxos-frame/src/sync/rcu/monitor.rs b/src/framework/jinux-frame/src/sync/rcu/monitor.rs similarity index 100% rename from src/kxos-frame/src/sync/rcu/monitor.rs rename to src/framework/jinux-frame/src/sync/rcu/monitor.rs diff --git a/src/kxos-frame/src/sync/rcu/owner_ptr.rs b/src/framework/jinux-frame/src/sync/rcu/owner_ptr.rs similarity index 100% rename from src/kxos-frame/src/sync/rcu/owner_ptr.rs rename to src/framework/jinux-frame/src/sync/rcu/owner_ptr.rs diff --git a/src/kxos-frame/src/sync/spin.rs b/src/framework/jinux-frame/src/sync/spin.rs similarity index 100% rename from src/kxos-frame/src/sync/spin.rs rename to src/framework/jinux-frame/src/sync/spin.rs diff --git a/src/kxos-frame/src/sync/up.rs b/src/framework/jinux-frame/src/sync/up.rs similarity index 100% rename from src/kxos-frame/src/sync/up.rs rename to src/framework/jinux-frame/src/sync/up.rs diff --git a/src/kxos-frame/src/sync/wait.rs b/src/framework/jinux-frame/src/sync/wait.rs similarity index 100% rename from src/kxos-frame/src/sync/wait.rs rename to src/framework/jinux-frame/src/sync/wait.rs diff --git a/src/kxos-frame/src/task/mod.rs b/src/framework/jinux-frame/src/task/mod.rs similarity index 100% rename from src/kxos-frame/src/task/mod.rs rename to src/framework/jinux-frame/src/task/mod.rs diff --git a/src/kxos-frame/src/task/processor.rs b/src/framework/jinux-frame/src/task/processor.rs similarity index 100% rename from src/kxos-frame/src/task/processor.rs rename to src/framework/jinux-frame/src/task/processor.rs diff --git a/src/kxos-frame/src/task/scheduler.rs b/src/framework/jinux-frame/src/task/scheduler.rs similarity index 100% rename from src/kxos-frame/src/task/scheduler.rs rename to src/framework/jinux-frame/src/task/scheduler.rs diff --git a/src/kxos-frame/src/task/switch.S b/src/framework/jinux-frame/src/task/switch.S similarity index 100% rename from src/kxos-frame/src/task/switch.S rename to src/framework/jinux-frame/src/task/switch.S diff --git a/src/kxos-frame/src/task/task.rs b/src/framework/jinux-frame/src/task/task.rs similarity index 100% rename from src/kxos-frame/src/task/task.rs rename to src/framework/jinux-frame/src/task/task.rs diff --git a/src/kxos-frame/src/timer.rs b/src/framework/jinux-frame/src/timer.rs similarity index 100% rename from src/kxos-frame/src/timer.rs rename to src/framework/jinux-frame/src/timer.rs diff --git a/src/kxos-frame/src/trap/handler.rs b/src/framework/jinux-frame/src/trap/handler.rs similarity index 97% rename from src/kxos-frame/src/trap/handler.rs rename to src/framework/jinux-frame/src/trap/handler.rs index 95c67ca14..b7ba5308b 100644 --- a/src/kxos-frame/src/trap/handler.rs +++ b/src/framework/jinux-frame/src/trap/handler.rs @@ -26,7 +26,7 @@ pub(crate) extern "C" fn trap_handler(f: &mut TrapFrame) { current.inner_exclusive_access().is_from_trap = true; *current.trap_frame() = *SWITCH_TO_USER_SPACE_TASK.trap_frame(); if is_cpu_fault(current.trap_frame()) { - // if is cpu fault, we will pass control to trap handler in kxos std + // if is cpu fault, we will pass control to trap handler in jinux std unsafe { context_switch( get_idle_task_cx_ptr() as *mut TaskContext, @@ -68,7 +68,7 @@ fn is_from_kernel(cs: u64) -> bool { /// Aborts: Some severe unrecoverable error. /// This function will determine a trap is a CPU faults. -/// We will pass control to kxos-std if the trap is **faults**. +/// We will pass control to jinux-std if the trap is **faults**. pub fn is_cpu_fault(trap_frame: &TrapFrame) -> bool { match trap_frame.id { DIVIDE_BY_ZERO diff --git a/src/kxos-frame/src/trap/irq.rs b/src/framework/jinux-frame/src/trap/irq.rs similarity index 99% rename from src/kxos-frame/src/trap/irq.rs rename to src/framework/jinux-frame/src/trap/irq.rs index 9c9ca3710..7482ea70c 100644 --- a/src/kxos-frame/src/trap/irq.rs +++ b/src/framework/jinux-frame/src/trap/irq.rs @@ -28,7 +28,7 @@ pub(crate) fn allocate_target_irq(target_irq: u8) -> Result { } } -/// The handle to a allocate irq number between [32,256), used in std and other parts in kxos +/// The handle to a allocate irq number between [32,256), used in std and other parts in jinux /// /// When the handle is dropped, all the callback in this will be unregistered automatically. #[derive(Debug)] diff --git a/src/kxos-frame/src/trap/mod.rs b/src/framework/jinux-frame/src/trap/mod.rs similarity index 100% rename from src/kxos-frame/src/trap/mod.rs rename to src/framework/jinux-frame/src/trap/mod.rs diff --git a/src/kxos-frame/src/trap/trap.S b/src/framework/jinux-frame/src/trap/trap.S similarity index 100% rename from src/kxos-frame/src/trap/trap.S rename to src/framework/jinux-frame/src/trap/trap.S diff --git a/src/kxos-frame/src/trap/vector.S b/src/framework/jinux-frame/src/trap/vector.S similarity index 100% rename from src/kxos-frame/src/trap/vector.S rename to src/framework/jinux-frame/src/trap/vector.S diff --git a/src/kxos-frame/src/user.rs b/src/framework/jinux-frame/src/user.rs similarity index 99% rename from src/kxos-frame/src/user.rs rename to src/framework/jinux-frame/src/user.rs index 5725a9123..899e72d1d 100644 --- a/src/kxos-frame/src/user.rs +++ b/src/framework/jinux-frame/src/user.rs @@ -69,7 +69,7 @@ impl UserSpace { /// Here is a sample code on how to use `UserMode`. /// /// ```no_run -/// use kxos_frame::task::Task; +/// use jinux_frame::task::Task; /// /// let current = Task::current(); /// let user_space = current.user_space() diff --git a/src/kxos-frame/src/util/align_ext.rs b/src/framework/jinux-frame/src/util/align_ext.rs similarity index 100% rename from src/kxos-frame/src/util/align_ext.rs rename to src/framework/jinux-frame/src/util/align_ext.rs diff --git a/src/kxos-frame/src/util/mod.rs b/src/framework/jinux-frame/src/util/mod.rs similarity index 100% rename from src/kxos-frame/src/util/mod.rs rename to src/framework/jinux-frame/src/util/mod.rs diff --git a/src/kxos-frame/src/util/recycle_allocator.rs b/src/framework/jinux-frame/src/util/recycle_allocator.rs similarity index 100% rename from src/kxos-frame/src/util/recycle_allocator.rs rename to src/framework/jinux-frame/src/util/recycle_allocator.rs diff --git a/src/kxos-frame/src/util/type_map.rs b/src/framework/jinux-frame/src/util/type_map.rs similarity index 100% rename from src/kxos-frame/src/util/type_map.rs rename to src/framework/jinux-frame/src/util/type_map.rs diff --git a/src/kxos-frame/src/vm/frame.rs b/src/framework/jinux-frame/src/vm/frame.rs similarity index 99% rename from src/kxos-frame/src/vm/frame.rs rename to src/framework/jinux-frame/src/vm/frame.rs index 8a34b6f23..05684ae37 100644 --- a/src/kxos-frame/src/vm/frame.rs +++ b/src/framework/jinux-frame/src/vm/frame.rs @@ -1,6 +1,7 @@ use core::iter::Iterator; -use crate::{config::PAGE_SIZE, mm::address::PhysAddr, prelude::*, Error, Pod}; +use crate::{config::PAGE_SIZE, mm::address::PhysAddr, prelude::*, Error}; +use pod::Pod; use super::VmIo; diff --git a/src/kxos-frame/src/vm/io.rs b/src/framework/jinux-frame/src/vm/io.rs similarity index 99% rename from src/kxos-frame/src/vm/io.rs rename to src/framework/jinux-frame/src/vm/io.rs index c447d3a7c..870d16de2 100644 --- a/src/kxos-frame/src/vm/io.rs +++ b/src/framework/jinux-frame/src/vm/io.rs @@ -1,5 +1,5 @@ use crate::prelude::*; -use crate::vm::Pod; +use pod::Pod; /// A trait that enables reading/writing data from/to a VM object, /// e.g., `VmSpace`, `VmFrameVec`, and `VmFrame`. diff --git a/src/kxos-frame/src/vm/mod.rs b/src/framework/jinux-frame/src/vm/mod.rs similarity index 90% rename from src/kxos-frame/src/vm/mod.rs rename to src/framework/jinux-frame/src/vm/mod.rs index 34c00fad8..88c91845f 100644 --- a/src/kxos-frame/src/vm/mod.rs +++ b/src/framework/jinux-frame/src/vm/mod.rs @@ -8,10 +8,9 @@ pub type Paddr = usize; mod frame; mod io; -mod pod; +mod offset; mod space; pub use self::frame::{VmAllocOptions, VmFrame, VmFrameVec, VmFrameVecIter}; pub use self::io::VmIo; -pub use self::pod::Pod; pub use self::space::{VmMapOptions, VmPerm, VmSpace}; diff --git a/src/framework/jinux-frame/src/vm/offset.rs b/src/framework/jinux-frame/src/vm/offset.rs new file mode 100644 index 000000000..634716037 --- /dev/null +++ b/src/framework/jinux-frame/src/vm/offset.rs @@ -0,0 +1,35 @@ +/// Get the offset of a field within a type as a pointer. +/// +/// ```rust +/// #[repr(C)] +/// pub struct Foo { +/// first: u8, +/// second: u32, +/// } +/// +/// assert!(offset_of(Foo, first) == (0 as *const u8)); +/// assert!(offset_of(Foo, second) == (4 as *const u32)); +/// ``` +#[macro_export] +macro_rules! offset_of { + ($container:ty, $($field:tt)+) => ({ + // SAFETY. It is ok to have this uninitialized value because + // 1) Its memory won't be acccessed; + // 2) It will be forgoten rather than being dropped; + // 3) Before it gets forgten, the code won't return prematurely or panic. + let tmp: $container = unsafe { core::mem::MaybeUninit::uninit().assume_init() }; + + let container_addr = &tmp as *const _; + let field_addr = &tmp.$($field)* as *const _; + + ::core::mem::forget(tmp); + + let field_offset = (field_addr as usize - container_addr as usize) as *const _; + + // Let Rust compiler infer our intended pointer type of field_offset + // by comparing it with another pointer. + let _: bool = field_offset == field_addr; + + field_offset + }); +} diff --git a/src/kxos-frame/src/vm/space.rs b/src/framework/jinux-frame/src/vm/space.rs similarity index 100% rename from src/kxos-frame/src/vm/space.rs rename to src/framework/jinux-frame/src/vm/space.rs diff --git a/src/kxos-frame/src/x86_64_util.rs b/src/framework/jinux-frame/src/x86_64_util.rs similarity index 100% rename from src/kxos-frame/src/x86_64_util.rs rename to src/framework/jinux-frame/src/x86_64_util.rs diff --git a/src/kxos-frame-pod-derive/Cargo.toml b/src/framework/pod-derive/Cargo.toml similarity index 89% rename from src/kxos-frame-pod-derive/Cargo.toml rename to src/framework/pod-derive/Cargo.toml index f1ed8313a..6325f297a 100644 --- a/src/kxos-frame-pod-derive/Cargo.toml +++ b/src/framework/pod-derive/Cargo.toml @@ -1,5 +1,5 @@ [package] -name = "kxos-frame-pod-derive" +name = "pod-derive" version = "0.1.0" edition = "2021" diff --git a/src/kxos-frame-pod-derive/src/lib.rs b/src/framework/pod-derive/src/lib.rs similarity index 88% rename from src/kxos-frame-pod-derive/src/lib.rs rename to src/framework/pod-derive/src/lib.rs index 69d231cd6..095d38232 100644 --- a/src/kxos-frame-pod-derive/src/lib.rs +++ b/src/framework/pod-derive/src/lib.rs @@ -1,5 +1,5 @@ -//! This crate is used to provide a procedural macro to derive Pod trait defined in kxos_frame. -//! When use this crate, kxos-frame should also be added as a dependency. +//! This crate is used to provide a procedural macro to derive Pod trait defined in framework/pod. +//! When use this crate, framework/pod should also be added as a dependency. //! This macro should only be used outside //! When derive Pod trait, we will do a check whether the derive is safe since Pod trait is an unsafe trait. //! For struct, we will check that the struct has valid repr (e.g,. repr(C), repr(u8)), and each field is Pod type. @@ -53,7 +53,7 @@ fn impl_pod_for_struct( .map(|field| { let field_ty = field.ty; quote! { - #field_ty: ::kxos_frame::Pod + #field_ty: ::pod::Pod } }) .collect::>(); @@ -62,12 +62,12 @@ fn impl_pod_for_struct( if where_clause.is_none() { quote! { #[automatically_derived] - unsafe impl #impl_generics ::kxos_frame::Pod #type_generics for #ident where #(#pod_where_predicates),* {} + unsafe impl #impl_generics ::pod::Pod #type_generics for #ident where #(#pod_where_predicates),* {} } } else { quote! { #[automatically_derived] - unsafe impl #impl_generics ::kxos_frame::Pod #type_generics for #ident #where_clause, #(#pod_where_predicates),* {} + unsafe impl #impl_generics ::pod::Pod #type_generics for #ident #where_clause, #(#pod_where_predicates),* {} } } } @@ -88,7 +88,7 @@ fn impl_pod_for_enum_or_union( let (impl_generics, type_generics, where_clause) = generics.split_for_impl(); quote! { #[automatically_derived] - unsafe impl #impl_generics ::kxos_frame::Pod #type_generics for #ident #where_clause {} + unsafe impl #impl_generics ::pod::Pod #type_generics for #ident #where_clause {} } } diff --git a/src/kxos-typeflags-util/Cargo.toml b/src/framework/pod/Cargo.toml similarity index 84% rename from src/kxos-typeflags-util/Cargo.toml rename to src/framework/pod/Cargo.toml index f47df8145..be11d00df 100644 --- a/src/kxos-typeflags-util/Cargo.toml +++ b/src/framework/pod/Cargo.toml @@ -1,5 +1,5 @@ [package] -name = "kxos-typeflags-util" +name = "pod" version = "0.1.0" edition = "2021" diff --git a/src/kxos-frame/src/vm/pod.rs b/src/framework/pod/src/lib.rs similarity index 64% rename from src/kxos-frame/src/vm/pod.rs rename to src/framework/pod/src/lib.rs index 479dbce11..6c03a19c5 100644 --- a/src/kxos-frame/src/vm/pod.rs +++ b/src/framework/pod/src/lib.rs @@ -1,3 +1,5 @@ +#![no_std] + use core::{fmt::Debug, mem::MaybeUninit}; /// A marker trait for plain old data (POD). @@ -57,43 +59,7 @@ macro_rules! impl_pod_for { $(unsafe impl Pod for $pod_ty {})* }; } - +// impl Pod for primitive types impl_pod_for!(u8, u16, u32, u64, i8, i16, i32, i64, isize, usize); - +// impl Pod for array unsafe impl Pod for [T; N] {} - -/// Get the offset of a field within a type as a pointer. -/// -/// ```rust -/// #[repr(C)] -/// pub struct Foo { -/// first: u8, -/// second: u32, -/// } -/// -/// assert!(offset_of(Foo, first) == (0 as *const u8)); -/// assert!(offset_of(Foo, second) == (4 as *const u32)); -/// ``` -#[macro_export] -macro_rules! offset_of { - ($container:ty, $($field:tt)+) => ({ - // SAFETY. It is ok to have this uninitialized value because - // 1) Its memory won't be acccessed; - // 2) It will be forgoten rather than being dropped; - // 3) Before it gets forgten, the code won't return prematurely or panic. - let tmp: $container = unsafe { core::mem::MaybeUninit::uninit().assume_init() }; - - let container_addr = &tmp as *const _; - let field_addr = &tmp.$($field)* as *const _; - - ::core::mem::forget(tmp); - - let field_offset = (field_addr as usize - container_addr as usize) as *const _; - - // Let Rust compiler infer our intended pointer type of field_offset - // by comparing it with another pointer. - let _: bool = field_offset == field_addr; - - field_offset - }); -} diff --git a/src/kxos-boot/Cargo.toml b/src/jinux-boot/Cargo.toml similarity index 94% rename from src/kxos-boot/Cargo.toml rename to src/jinux-boot/Cargo.toml index c41e2dbbf..333eb44f8 100644 --- a/src/kxos-boot/Cargo.toml +++ b/src/jinux-boot/Cargo.toml @@ -1,5 +1,5 @@ [package] -name = "kxos-boot" +name = "jinux-boot" version = "0.1.0" edition = "2021" # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html diff --git a/src/kxos-boot/src/main.rs b/src/jinux-boot/src/main.rs similarity index 100% rename from src/kxos-boot/src/main.rs rename to src/jinux-boot/src/main.rs diff --git a/src/kxos-std/src/user_apps.rs b/src/kxos-std/src/user_apps.rs deleted file mode 100644 index 2180310c4..000000000 --- a/src/kxos-std/src/user_apps.rs +++ /dev/null @@ -1,122 +0,0 @@ -use crate::prelude::*; - -pub struct UserApp { - pub app_name: CString, - pub app_content: &'static [u8], - pub argv: Vec, - pub envp: Vec, -} - -impl UserApp { - pub fn new(app_name: &str, app_content: &'static [u8]) -> Self { - let app_name = CString::new(app_name).unwrap(); - UserApp { - app_name, - app_content, - argv: Vec::new(), - envp: Vec::new(), - } - } - - pub fn set_argv(&mut self, argv: Vec) { - self.argv = argv; - } - - pub fn set_envp(&mut self, envp: Vec) { - self.envp = envp; - } -} - -pub fn get_all_apps() -> Vec { - let mut res = Vec::with_capacity(16); - - // Most simple hello world, written in assembly - let asm_hello_world = UserApp::new("hello_world", read_hello_world_content()); - res.push(asm_hello_world); - - // Hello world, written in C language. - // Since glibc requires the app name starts with "/", and we don't have filesystem now. - // So we manually add a leading "/" for app written in C language. - let hello_c = UserApp::new("/hello_c", read_hello_c_content()); - res.push(hello_c); - - // Fork process, written in assembly - let asm_fork = UserApp::new("fork", read_fork_content()); - res.push(asm_fork); - - // Execve, written in C language. - let execve_c = UserApp::new("/execve", read_execve_content()); - res.push(execve_c); - - // Fork new process, written in C language. (Fork in glibc uses syscall clone actually) - let fork_c = UserApp::new("/fork", read_fork_c_content()); - res.push(fork_c); - - // signal test - let signal_test = UserApp::new("/signal_test", read_signal_test_content()); - res.push(signal_test); - - // busybox - let mut busybox = UserApp::new("/busybox", read_busybox_content()); - // -l option means the busybox is running as logging shell - let argv = ["/busybox", "sh", "-l"]; - // let envp = ["SHELL=/bin/bash", "COLORTERM=truecolor", "TERM_PROGRAM_VERSION=1.73.0", "LC_ADDRESS=zh_CN.UTF-8", "LC_NAME=zh_CN.UTF-8", "LC_MONETARY=zh_CN.UTF-8", "PWD=/", "LOGNAME=root", "XDG_SESSION_TYPE=tty", "VSCODE_GIT_ASKPASS_NODE=/home/jiangjf/.vscode-server/bin/8fa188b2b301d36553cbc9ce1b0a146ccb93351f/node", "MOTD_SHOWN=pam", "HOME=/home/jiangjf", "LC_PAPER=zh_CN.UTF-8", "LANG=en_US.UTF-8", "LS_COLORS=rs=0:di=01;34:ln=01;36:mh=00:pi=40;33:so=01;35:do=01;35:bd=40;33;01:cd=40;33;01:or=40;31;01:mi=00:su=37;41:sg=30;43:ca=30;41:tw=30;42:ow=34;42:st=37;44:ex=01;32:*.tar=01;31:*.tgz=01;31:*.arc=01;31:*.arj=01;31:*.taz=01;31:*.lha=01;31:*.lz4=01;31:*.lzh=01;31:*.lzma=01;31:*.tlz=01;31:*.txz=01;31:*.tzo=01;31:*.t7z=01;31:*.zip=01;31:*.z=01;31:*.dz=01;31:*.gz=01;31:*.lrz=01;31:*.lz=01;31:*.lzo=01;31:*.xz=01;31:*.zst=01;31:*.tzst=01;31:*.bz2=01;31:*.bz=01;31:*.tbz=01;31:*.tbz2=01;31:*.tz=01;31:*.deb=01;31:*.rpm=01;31:*.jar=01;31:*.war=01;31:*.ear=01;31:*.sar=01;31:*.rar=01;31:*.alz=01;31:*.ace=01;31:*.zoo=01;31:*.cpio=01;31:*.7z=01;31:*.rz=01;31:*.cab=01;31:*.wim=01;31:*.swm=01;31:*.dwm=01;31:*.esd=01;31:*.jpg=01;35:*.jpeg=01;35:*.mjpg=01;35:*.mjpeg=01;35:*.gif=01;35:*.bmp=01;35:*.pbm=01;35:*.pgm=01;35:*.ppm=01;35:*.tga=01;35:*.xbm=01;35:*.xpm=01;35:*.tif=01;35:*.tiff=01;35:*.png=01;35:*.svg=01;35:*.svgz=01;35:*.mng=01;35:*.pcx=01;35:*.mov=01;35:*.mpg=01;35:*.mpeg=01;35:*.m2v=01;35:*.mkv=01;35:*.webm=01;35", "GIT_ASKPASS=/home/jiangjf/.vscode-server/bin/8fa188b2b301d36553cbc9ce1b0a146ccb93351f/extensions/git/dist/askpass.sh", "SSH_CONNECTION=30.177.3.156 54687 30.77.178.76 22", "VSCODE_GIT_ASKPASS_EXTRA_ARGS=", "LESSCLOSE=/usr/bin/lesspipe %s %s", "XDG_SESSION_CLASS=user", "TERM=xterm-256color", "LC_IDENTIFICATION=zh_CN.UTF-8", "LESSOPEN=| /usr/bin/lesspipe %s", "USER=jiangjf", "VSCODE_GIT_IPC_HANDLE=/run/user/1015/vscode-git-623b69fb06.sock", "SHLVL=2", "LC_TELEPHONE=zh_CN.UTF-8", "LC_MEASUREMENT=zh_CN.UTF-8", "XDG_SESSION_ID=8884", "XDG_RUNTIME_DIR=/run/user/1015", "SSH_CLIENT=30.177.3.156 54687 22", "LC_TIME=zh_CN.UTF-8", "VSCODE_GIT_ASKPASS_MAIN=/home/jiangjf/.vscode-server/bin/8fa188b2b301d36553cbc9ce1b0a146ccb93351f/extensions/git/dist/askpass-main.js", "XDG_DATA_DIRS=/usr/local/share:/usr/share:/var/lib/snapd/desktop", "BROWSER=/home/jiangjf/.vscode-server/bin/8fa188b2b301d36553cbc9ce1b0a146ccb93351f/bin/helpers/browser.sh", "PATH=/home/jiangjf/.vscode-server/bin/8fa188b2b301d36553cbc9ce1b0a146ccb93351f/bin/remote-cli:/home/jiangjf/.cargo/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin", "DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/1015/bus", "LC_NUMERIC=zh_CN.UTF-8", "TERM_PROGRAM=vscode", "VSCODE_IPC_HOOK_CLI=/run/user/1015/vscode-ipc-ed06ed64-441d-4b59-a8fe-90ce2cf29a8a.sock", "OLDPWD=/"]; - let envp = [ - "SHELL=/bin/sh", - "PWD=/", - "LOGNAME=root", - "HOME=/", - "USER=root", - "PATH=", - "OLDPWD=/", - ]; - - let argv = to_vec_cstring(&argv).unwrap(); - let envp = to_vec_cstring(&envp).unwrap(); - busybox.set_argv(argv); - busybox.set_envp(envp); - res.push(busybox); - - res -} - -fn read_hello_world_content() -> &'static [u8] { - include_bytes!("../../kxos-user/hello_world/hello_world") -} - -fn read_hello_c_content() -> &'static [u8] { - include_bytes!("../../kxos-user/hello_c/hello") -} - -fn read_fork_content() -> &'static [u8] { - include_bytes!("../../kxos-user/fork/fork") -} - -fn read_execve_content() -> &'static [u8] { - include_bytes!("../../kxos-user/execve/execve") -} - -pub fn read_execve_hello_content() -> &'static [u8] { - include_bytes!("../../kxos-user/execve/hello") -} - -fn read_fork_c_content() -> &'static [u8] { - include_bytes!("../../kxos-user/fork_c/fork") -} - -fn read_signal_test_content() -> &'static [u8] { - include_bytes!("../../kxos-user/signal_c/signal_test") -} - -fn read_busybox_content() -> &'static [u8] { - include_bytes!("../../kxos-user/busybox/busybox") -} - -fn to_vec_cstring(raw_strs: &[&str]) -> Result> { - let mut res = Vec::new(); - for raw_str in raw_strs { - let cstring = CString::new(*raw_str)?; - res.push(cstring); - } - Ok(res) -} diff --git a/src/kxos-user/hello_c/hello b/src/kxos-user/hello_c/hello deleted file mode 100755 index 4db2c3de7..000000000 --- a/src/kxos-user/hello_c/hello +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:dda5a7d6081cc2252056375d0550731ef2fd24789aa5f17da189a36bf78c588d -size 871896 diff --git a/src/kxos-virtio/Cargo.toml b/src/kxos-virtio/Cargo.toml deleted file mode 100644 index e248d9693..000000000 --- a/src/kxos-virtio/Cargo.toml +++ /dev/null @@ -1,18 +0,0 @@ -[package] -name = "kxos-virtio" -version = "0.1.0" -edition = "2021" - -# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html - -[dependencies] -bitflags = "1.3" -spin = "0.9.4" -kxos-frame = {path = "../kxos-frame"} -kxos-pci = {path="../kxos-pci"} -kxos-util = {path="../kxos-util"} -kxos-frame-pod-derive = {path = "../kxos-frame-pod-derive"} - - -[features] - diff --git a/src/kxos-pci/Cargo.toml b/src/services/comps/jinux-pci/Cargo.toml similarity index 56% rename from src/kxos-pci/Cargo.toml rename to src/services/comps/jinux-pci/Cargo.toml index e936683aa..dff4cd5fe 100644 --- a/src/kxos-pci/Cargo.toml +++ b/src/services/comps/jinux-pci/Cargo.toml @@ -1,5 +1,5 @@ [package] -name = "kxos-pci" +name = "jinux-pci" version = "0.1.0" edition = "2021" @@ -8,9 +8,10 @@ edition = "2021" [dependencies] bitflags = "1.3" spin = "0.9.4" -kxos-frame = {path = "../kxos-frame"} -kxos-util = {path="../kxos-util"} -kxos-frame-pod-derive = {path = "../kxos-frame-pod-derive"} +jinux-frame = {path = "../../../framework/jinux-frame"} +jinux-util = {path="../../libs/jinux-util"} +pod = {path = "../../../framework/pod"} +pod-derive = {path = "../../../framework/pod-derive"} [dependencies.lazy_static] version = "1.0" diff --git a/src/kxos-pci/src/capability/exp.rs b/src/services/comps/jinux-pci/src/capability/exp.rs similarity index 100% rename from src/kxos-pci/src/capability/exp.rs rename to src/services/comps/jinux-pci/src/capability/exp.rs diff --git a/src/kxos-pci/src/capability/mod.rs b/src/services/comps/jinux-pci/src/capability/mod.rs similarity index 100% rename from src/kxos-pci/src/capability/mod.rs rename to src/services/comps/jinux-pci/src/capability/mod.rs diff --git a/src/kxos-pci/src/capability/msi.rs b/src/services/comps/jinux-pci/src/capability/msi.rs similarity index 100% rename from src/kxos-pci/src/capability/msi.rs rename to src/services/comps/jinux-pci/src/capability/msi.rs diff --git a/src/kxos-pci/src/capability/msix.rs b/src/services/comps/jinux-pci/src/capability/msix.rs similarity index 100% rename from src/kxos-pci/src/capability/msix.rs rename to src/services/comps/jinux-pci/src/capability/msix.rs diff --git a/src/kxos-pci/src/capability/pm.rs b/src/services/comps/jinux-pci/src/capability/pm.rs similarity index 100% rename from src/kxos-pci/src/capability/pm.rs rename to src/services/comps/jinux-pci/src/capability/pm.rs diff --git a/src/kxos-pci/src/capability/sata.rs b/src/services/comps/jinux-pci/src/capability/sata.rs similarity index 100% rename from src/kxos-pci/src/capability/sata.rs rename to src/services/comps/jinux-pci/src/capability/sata.rs diff --git a/src/kxos-pci/src/capability/vendor/mod.rs b/src/services/comps/jinux-pci/src/capability/vendor/mod.rs similarity index 100% rename from src/kxos-pci/src/capability/vendor/mod.rs rename to src/services/comps/jinux-pci/src/capability/vendor/mod.rs diff --git a/src/kxos-pci/src/capability/vendor/virtio.rs b/src/services/comps/jinux-pci/src/capability/vendor/virtio.rs similarity index 100% rename from src/kxos-pci/src/capability/vendor/virtio.rs rename to src/services/comps/jinux-pci/src/capability/vendor/virtio.rs diff --git a/src/kxos-pci/src/lib.rs b/src/services/comps/jinux-pci/src/lib.rs similarity index 94% rename from src/kxos-pci/src/lib.rs rename to src/services/comps/jinux-pci/src/lib.rs index f83952167..856a7be7a 100644 --- a/src/kxos-pci/src/lib.rs +++ b/src/services/comps/jinux-pci/src/lib.rs @@ -1,4 +1,4 @@ -//! The pci of kxos +//! The pci of jinux #![no_std] #![forbid(unsafe_code)] #![allow(dead_code)] @@ -6,8 +6,9 @@ pub mod capability; pub mod msix; pub mod util; extern crate alloc; -use kxos_frame::info; -extern crate kxos_frame_pod_derive; +use jinux_frame::info; +#[macro_use] +extern crate pod_derive; use alloc::{sync::Arc, vec::Vec}; use lazy_static::lazy_static; diff --git a/src/kxos-pci/src/msix.rs b/src/services/comps/jinux-pci/src/msix.rs similarity index 93% rename from src/kxos-pci/src/msix.rs rename to src/services/comps/jinux-pci/src/msix.rs index 803e0291b..a34125ee0 100644 --- a/src/kxos-pci/src/msix.rs +++ b/src/services/comps/jinux-pci/src/msix.rs @@ -1,12 +1,11 @@ use alloc::vec::Vec; use crate::util::{CSpaceAccessMethod, Location, BAR}; -use kxos_frame_pod_derive::Pod; use super::capability::msix::CapabilityMSIXData; -use kxos_frame::{offset_of, IrqAllocateHandle}; -use kxos_util::frame_ptr::InFramePtr; +use jinux_frame::{offset_of, IrqAllocateHandle}; +use jinux_util::frame_ptr::InFramePtr; #[derive(Debug, Default)] pub struct MSIX { @@ -72,7 +71,7 @@ impl MSIX { // let mut value = MSIXTableEntry::default(); value.write_at(offset_of!(MSIXTableEntry, msg_addr), 0xFEE0_0000 as u32); // allocate irq number - let handle = kxos_frame::allocate_irq().expect("not enough irq"); + let handle = jinux_frame::allocate_irq().expect("not enough irq"); value.write_at(offset_of!(MSIXTableEntry, msg_data), handle.num() as u32); value.write_at(offset_of!(MSIXTableEntry, vector_control), 0 as u32); cap.table.push(MSIXEntry { diff --git a/src/kxos-pci/src/util.rs b/src/services/comps/jinux-pci/src/util.rs similarity index 98% rename from src/kxos-pci/src/util.rs rename to src/services/comps/jinux-pci/src/util.rs index 316508052..06315cf62 100644 --- a/src/kxos-pci/src/util.rs +++ b/src/services/comps/jinux-pci/src/util.rs @@ -1,4 +1,4 @@ -extern crate kxos_frame; +extern crate jinux_frame; use crate::capability::Capability; use alloc::vec::Vec; use bitflags::bitflags; @@ -37,9 +37,9 @@ impl CSpaceAccessMethod { ); match self { CSpaceAccessMethod::IO => { - kxos_frame::device::pci::PCI_ADDRESS_PORT + jinux_frame::device::pci::PCI_ADDRESS_PORT .write_u32(loc.encode() | ((offset as u32) & 0b11111100)); - kxos_frame::device::pci::PCI_DATA_PORT.read_u32().to_le() + jinux_frame::device::pci::PCI_DATA_PORT.read_u32().to_le() } //MemoryMapped(ptr) => { // // FIXME: Clarify whether the rules for GEP/GEPi forbid using regular .offset() here. // ::core::intrinsics::volatile_load(::core::intrinsics::arith_offset(ptr, offset as usize)) @@ -71,9 +71,9 @@ impl CSpaceAccessMethod { ); match self { CSpaceAccessMethod::IO => { - kxos_frame::device::pci::PCI_ADDRESS_PORT + jinux_frame::device::pci::PCI_ADDRESS_PORT .write_u32(loc.encode() | (offset as u32 & 0b11111100)); - kxos_frame::device::pci::PCI_ADDRESS_PORT.write_u32(val.to_le()) + jinux_frame::device::pci::PCI_ADDRESS_PORT.write_u32(val.to_le()) } //MemoryMapped(ptr) => { // // FIXME: Clarify whether the rules for GEP/GEPi forbid using regular .offset() here. // ::core::intrinsics::volatile_load(::core::intrinsics::arith_offset(ptr, offset as usize)) diff --git a/src/services/comps/jinux-virtio/Cargo.toml b/src/services/comps/jinux-virtio/Cargo.toml new file mode 100644 index 000000000..07da9189a --- /dev/null +++ b/src/services/comps/jinux-virtio/Cargo.toml @@ -0,0 +1,19 @@ +[package] +name = "jinux-virtio" +version = "0.1.0" +edition = "2021" + +# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html + +[dependencies] +bitflags = "1.3" +spin = "0.9.4" +jinux-frame = {path = "../../../framework/jinux-frame"} +jinux-pci = {path="../jinux-pci"} +jinux-util = {path="../../libs/jinux-util"} +pod = {path = "../../../framework/pod"} +pod-derive = {path = "../../../framework/pod-derive"} + + +[features] + diff --git a/src/kxos-virtio/src/block.rs b/src/services/comps/jinux-virtio/src/block.rs similarity index 91% rename from src/kxos-virtio/src/block.rs rename to src/services/comps/jinux-virtio/src/block.rs index c02127952..ccbd33960 100644 --- a/src/kxos-virtio/src/block.rs +++ b/src/services/comps/jinux-virtio/src/block.rs @@ -1,6 +1,6 @@ -use kxos_pci::capability::vendor::virtio::CapabilityVirtioData; -use kxos_pci::util::BAR; -use kxos_util::frame_ptr::InFramePtr; +use jinux_pci::capability::vendor::virtio::CapabilityVirtioData; +use jinux_pci::util::BAR; +use jinux_util::frame_ptr::InFramePtr; pub const BLK_SIZE: usize = 512; diff --git a/src/kxos-virtio/src/lib.rs b/src/services/comps/jinux-virtio/src/lib.rs similarity index 94% rename from src/kxos-virtio/src/lib.rs rename to src/services/comps/jinux-virtio/src/lib.rs index 88bc3534c..3a6197b59 100644 --- a/src/kxos-virtio/src/lib.rs +++ b/src/services/comps/jinux-virtio/src/lib.rs @@ -1,4 +1,4 @@ -//! The virtio of kxos +//! The virtio of jinux #![no_std] #![forbid(unsafe_code)] #![allow(dead_code)] @@ -6,17 +6,16 @@ extern crate alloc; use alloc::{sync::Arc, vec::Vec}; use bitflags::bitflags; -use kxos_frame::{info, offset_of, TrapFrame}; -use kxos_frame_pod_derive::Pod; -use kxos_pci::util::{PCIDevice, BAR}; -use kxos_util::frame_ptr::InFramePtr; +use jinux_frame::{info, offset_of, TrapFrame}; +use jinux_pci::util::{PCIDevice, BAR}; +use jinux_util::frame_ptr::InFramePtr; use spin::{mutex::Mutex, MutexGuard}; use self::{block::VirtioBLKConfig, queue::VirtQueue}; -use kxos_pci::{capability::vendor::virtio::CapabilityVirtioData, msix::MSIX}; +use jinux_pci::{capability::vendor::virtio::CapabilityVirtioData, msix::MSIX}; #[macro_use] -extern crate kxos_frame_pod_derive; +extern crate pod_derive; pub mod block; pub mod queue; @@ -157,8 +156,8 @@ impl PCIVirtioDevice { let mut common_cfg_frame_ptr_some = None; for cap in dev.capabilities.iter() { match &cap.data { - kxos_pci::capability::CapabilityData::VNDR(vndr_data) => match vndr_data { - kxos_pci::capability::vendor::CapabilityVNDRData::VIRTIO(cap_data) => { + jinux_pci::capability::CapabilityData::VNDR(vndr_data) => match vndr_data { + jinux_pci::capability::vendor::CapabilityVNDRData::VIRTIO(cap_data) => { match cap_data.cfg_type { PCI_VIRTIO_CAP_COMMON_CFG => { common_cfg_frame_ptr_some = @@ -196,10 +195,10 @@ impl PCIVirtioDevice { } }, - kxos_pci::capability::CapabilityData::MSIX(cap_data) => { + jinux_pci::capability::CapabilityData::MSIX(cap_data) => { msix = MSIX::new(&cap_data, bars, loc, cap.cap_ptr); } - kxos_pci::capability::CapabilityData::Unknown(id) => { + jinux_pci::capability::CapabilityData::Unknown(id) => { panic!("unknown capability device:{}", id) } _ => { diff --git a/src/kxos-virtio/src/queue.rs b/src/services/comps/jinux-virtio/src/queue.rs similarity index 97% rename from src/kxos-virtio/src/queue.rs rename to src/services/comps/jinux-virtio/src/queue.rs index e7e1b4c5f..3e2351890 100644 --- a/src/kxos-virtio/src/queue.rs +++ b/src/services/comps/jinux-virtio/src/queue.rs @@ -4,8 +4,8 @@ use super::VitrioPciCommonCfg; use alloc::vec::Vec; use bitflags::bitflags; use core::sync::atomic::{fence, Ordering}; -use kxos_frame::offset_of; -use kxos_util::frame_ptr::InFramePtr; +use jinux_frame::offset_of; +use jinux_util::frame_ptr::InFramePtr; #[derive(Debug)] pub enum QueueError { InvalidArgs, @@ -239,7 +239,7 @@ struct Descriptor { impl Descriptor { fn set_buf(&mut self, buf: &[u8]) { - self.addr = kxos_frame::virt_to_phys(buf.as_ptr() as usize) as u64; + self.addr = jinux_frame::virt_to_phys(buf.as_ptr() as usize) as u64; self.len = buf.len() as u32; } } @@ -247,7 +247,7 @@ impl Descriptor { fn set_buf(inframe_ptr: &InFramePtr, buf: &[u8]) { inframe_ptr.write_at( offset_of!(Descriptor, addr), - kxos_frame::virt_to_phys(buf.as_ptr() as usize) as u64, + jinux_frame::virt_to_phys(buf.as_ptr() as usize) as u64, ); inframe_ptr.write_at(offset_of!(Descriptor, len), buf.len() as u32); } diff --git a/src/kxos-rights-proc/Cargo.toml b/src/services/libs/jinux-rights-proc/Cargo.toml similarity index 91% rename from src/kxos-rights-proc/Cargo.toml rename to src/services/libs/jinux-rights-proc/Cargo.toml index 2ae1454c2..81c8dd134 100644 --- a/src/kxos-rights-proc/Cargo.toml +++ b/src/services/libs/jinux-rights-proc/Cargo.toml @@ -1,5 +1,5 @@ [package] -name = "kxos-rights-proc" +name = "jinux-rights-proc" version = "0.1.0" edition = "2021" diff --git a/src/kxos-rights-proc/src/lib.rs b/src/services/libs/jinux-rights-proc/src/lib.rs similarity index 96% rename from src/kxos-rights-proc/src/lib.rs rename to src/services/libs/jinux-rights-proc/src/lib.rs index 12cf35291..8058aac48 100644 --- a/src/kxos-rights-proc/src/lib.rs +++ b/src/services/libs/jinux-rights-proc/src/lib.rs @@ -1,5 +1,5 @@ -//!This crate defines the require procedural macros to implement capability for kxos. -//! When use this crate, kxos-typeflags and kxos-typeflags-util should also be added as dependency. +//!This crate defines the require procedural macros to implement capability for jinux. +//! When use this crate, typeflags and typeflags-util should also be added as dependency. //! //! The require macro are used to ensure that an object has the enough capability to call the function. //! The **require** macro can accept constrait [SomeRightSet] > [SomeRight], diff --git a/src/kxos-rights-proc/src/require_attr.rs b/src/services/libs/jinux-rights-proc/src/require_attr.rs similarity index 92% rename from src/kxos-rights-proc/src/require_attr.rs rename to src/services/libs/jinux-rights-proc/src/require_attr.rs index 24f50e6f1..7c22b0c73 100644 --- a/src/kxos-rights-proc/src/require_attr.rs +++ b/src/services/libs/jinux-rights-proc/src/require_attr.rs @@ -98,10 +98,10 @@ fn set_contain_where_clause( let type_set = require_attr.type_set.clone(); let mut where_predicates = Vec::new(); where_predicates.push(parse_quote!( - #type_set: ::kxos_typeflags_util::SetContain<#required_type> + #type_set: ::typeflags_util::SetContain<#required_type> )); where_predicates.push(parse_quote!( - ::kxos_typeflags_util::SetContainOp<#type_set, #required_type>: ::kxos_typeflags_util::IsTrue + ::typeflags_util::SetContainOp<#type_set, #required_type>: ::typeflags_util::IsTrue )); let comma = parse_quote!(,); @@ -150,14 +150,14 @@ fn set_include_where_clause( let mut additional_where_prediates = Vec::new(); additional_where_prediates.push(parse_quote!( - #required_type_set: ::kxos_typeflags_util::Set + #required_type_set: ::typeflags_util::Set )); additional_where_prediates.push(parse_quote!( - #type_set: ::kxos_typeflags_util::SetInclude<#required_type_set> + #type_set: ::typeflags_util::SetInclude<#required_type_set> )); additional_where_prediates.push(parse_quote!( - ::kxos_typeflags_util::SetIncludeOp<#type_set, #required_type_set>: ::kxos_typeflags_util::IsTrue - )); + ::typeflags_util::SetIncludeOp<#type_set, #required_type_set>: ::typeflags_util::IsTrue + )); match old_where_clause { None => { diff --git a/src/kxos-std/Cargo.toml b/src/services/libs/jinux-std/Cargo.toml similarity index 52% rename from src/kxos-std/Cargo.toml rename to src/services/libs/jinux-std/Cargo.toml index a8dc8db24..138d83c33 100644 --- a/src/kxos-std/Cargo.toml +++ b/src/services/libs/jinux-std/Cargo.toml @@ -1,18 +1,19 @@ [package] -name = "kxos-std" +name = "jinux-std" version = "0.1.0" edition = "2021" # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html [dependencies] -kxos-frame = {path = "../kxos-frame"} -kxos-frame-pod-derive = {path = "../kxos-frame-pod-derive"} -kxos-pci = {path="../kxos-pci"} -kxos-virtio = {path="../kxos-virtio"} -kxos-typeflags = {path="../kxos-typeflags"} -kxos-typeflags-util = {path="../kxos-typeflags-util"} -kxos-rights-proc = {path="../kxos-rights-proc"} +jinux-frame = {path = "../../../framework/jinux-frame"} +pod = {path = "../../../framework/pod"} +pod-derive = {path = "../../../framework/pod-derive"} +jinux-pci = {path="../../comps/jinux-pci"} +jinux-virtio = {path="../../comps/jinux-virtio"} +typeflags = {path="../typeflags"} +typeflags-util = {path="../typeflags-util"} +jinux-rights-proc = {path="../jinux-rights-proc"} # parse elf file xmas-elf = "0.8.0" diff --git a/src/kxos-std/src/driver/mod.rs b/src/services/libs/jinux-std/src/driver/mod.rs similarity index 100% rename from src/kxos-std/src/driver/mod.rs rename to src/services/libs/jinux-std/src/driver/mod.rs diff --git a/src/kxos-std/src/driver/pci/mod.rs b/src/services/libs/jinux-std/src/driver/pci/mod.rs similarity index 72% rename from src/kxos-std/src/driver/pci/mod.rs rename to src/services/libs/jinux-std/src/driver/pci/mod.rs index 2afba6e5f..ca2290a14 100644 --- a/src/kxos-std/src/driver/pci/mod.rs +++ b/src/services/libs/jinux-std/src/driver/pci/mod.rs @@ -1,10 +1,10 @@ pub mod virtio; -use kxos_frame::info; +use jinux_frame::info; pub fn init() { - kxos_pci::init(); - for index in 0..kxos_pci::device_amount() { - let pci_device = kxos_pci::get_pci_devices(index) + jinux_pci::init(); + for index in 0..jinux_pci::device_amount() { + let pci_device = jinux_pci::get_pci_devices(index) .expect("initialize pci device failed: pci device is None"); if pci_device.id.vendor_id == 0x1af4 && (pci_device.id.device_id == 0x1001 || pci_device.id.device_id == 0x1042) diff --git a/src/kxos-std/src/driver/pci/virtio/block.rs b/src/services/libs/jinux-std/src/driver/pci/virtio/block.rs similarity index 97% rename from src/kxos-std/src/driver/pci/virtio/block.rs rename to src/services/libs/jinux-std/src/driver/pci/virtio/block.rs index 981dbc3c5..bec9f7486 100644 --- a/src/kxos-std/src/driver/pci/virtio/block.rs +++ b/src/services/libs/jinux-std/src/driver/pci/virtio/block.rs @@ -3,16 +3,16 @@ use core::hint::spin_loop; use crate::process::Process; use alloc::sync::Arc; use alloc::vec::Vec; -use kxos_frame::info; -use kxos_pci::PCIDevice; -use kxos_virtio::PCIVirtioDevice; +use jinux_frame::info; +use jinux_pci::PCIDevice; +use jinux_virtio::PCIVirtioDevice; use lazy_static::lazy_static; use spin::mutex::Mutex; use super::BlockDevice; pub const BLK_SIZE: usize = 512; -use kxos_frame::Pod; -use kxos_frame::TrapFrame; +use jinux_frame::TrapFrame; +use pod::Pod; pub struct VirtioBlockDevice { virtio_device: PCIVirtioDevice, } diff --git a/src/kxos-std/src/driver/pci/virtio/mod.rs b/src/services/libs/jinux-std/src/driver/pci/virtio/mod.rs similarity index 100% rename from src/kxos-std/src/driver/pci/virtio/mod.rs rename to src/services/libs/jinux-std/src/driver/pci/virtio/mod.rs diff --git a/src/kxos-std/src/error.rs b/src/services/libs/jinux-std/src/error.rs similarity index 92% rename from src/kxos-std/src/error.rs rename to src/services/libs/jinux-std/src/error.rs index 7f2c91f83..7792ca993 100644 --- a/src/kxos-std/src/error.rs +++ b/src/services/libs/jinux-std/src/error.rs @@ -178,17 +178,17 @@ impl From for Error { } } -impl From for Error { - fn from(frame_error: kxos_frame::Error) -> Self { +impl From for Error { + fn from(frame_error: jinux_frame::Error) -> Self { match frame_error { - kxos_frame::Error::AccessDenied => Error::new(Errno::EFAULT), - kxos_frame::Error::NoMemory => Error::new(Errno::ENOMEM), - kxos_frame::Error::InvalidArgs => Error::new(Errno::EINVAL), - kxos_frame::Error::IoError => Error::new(Errno::EIO), - kxos_frame::Error::NotEnoughResources => Error::new(Errno::EBUSY), - kxos_frame::Error::PageFault => Error::new(Errno::EFAULT), - kxos_frame::Error::InvalidVmpermBits => Error::new(Errno::EINVAL), - kxos_frame::Error::NoChild => Error::new(Errno::ECHILD), + jinux_frame::Error::AccessDenied => Error::new(Errno::EFAULT), + jinux_frame::Error::NoMemory => Error::new(Errno::ENOMEM), + jinux_frame::Error::InvalidArgs => Error::new(Errno::EINVAL), + jinux_frame::Error::IoError => Error::new(Errno::EIO), + jinux_frame::Error::NotEnoughResources => Error::new(Errno::EBUSY), + jinux_frame::Error::PageFault => Error::new(Errno::EFAULT), + jinux_frame::Error::InvalidVmpermBits => Error::new(Errno::EINVAL), + jinux_frame::Error::NoChild => Error::new(Errno::ECHILD), } } } diff --git a/src/kxos-std/src/fs/events.rs b/src/services/libs/jinux-std/src/fs/events.rs similarity index 100% rename from src/kxos-std/src/fs/events.rs rename to src/services/libs/jinux-std/src/fs/events.rs diff --git a/src/kxos-std/src/fs/fcntl.rs b/src/services/libs/jinux-std/src/fs/fcntl.rs similarity index 100% rename from src/kxos-std/src/fs/fcntl.rs rename to src/services/libs/jinux-std/src/fs/fcntl.rs diff --git a/src/kxos-std/src/fs/file.rs b/src/services/libs/jinux-std/src/fs/file.rs similarity index 100% rename from src/kxos-std/src/fs/file.rs rename to src/services/libs/jinux-std/src/fs/file.rs diff --git a/src/kxos-std/src/fs/file_table.rs b/src/services/libs/jinux-std/src/fs/file_table.rs similarity index 100% rename from src/kxos-std/src/fs/file_table.rs rename to src/services/libs/jinux-std/src/fs/file_table.rs diff --git a/src/kxos-std/src/fs/ioctl/mod.rs b/src/services/libs/jinux-std/src/fs/ioctl/mod.rs similarity index 100% rename from src/kxos-std/src/fs/ioctl/mod.rs rename to src/services/libs/jinux-std/src/fs/ioctl/mod.rs diff --git a/src/kxos-std/src/fs/mod.rs b/src/services/libs/jinux-std/src/fs/mod.rs similarity index 100% rename from src/kxos-std/src/fs/mod.rs rename to src/services/libs/jinux-std/src/fs/mod.rs diff --git a/src/kxos-std/src/fs/poll.rs b/src/services/libs/jinux-std/src/fs/poll.rs similarity index 100% rename from src/kxos-std/src/fs/poll.rs rename to src/services/libs/jinux-std/src/fs/poll.rs diff --git a/src/kxos-std/src/fs/stat.rs b/src/services/libs/jinux-std/src/fs/stat.rs similarity index 100% rename from src/kxos-std/src/fs/stat.rs rename to src/services/libs/jinux-std/src/fs/stat.rs diff --git a/src/kxos-std/src/fs/stdio.rs b/src/services/libs/jinux-std/src/fs/stdio.rs similarity index 100% rename from src/kxos-std/src/fs/stdio.rs rename to src/services/libs/jinux-std/src/fs/stdio.rs diff --git a/src/kxos-std/src/lib.rs b/src/services/libs/jinux-std/src/lib.rs similarity index 90% rename from src/kxos-std/src/lib.rs rename to src/services/libs/jinux-std/src/lib.rs index c56094f57..af17bb177 100644 --- a/src/kxos-std/src/lib.rs +++ b/src/services/libs/jinux-std/src/lib.rs @@ -1,4 +1,4 @@ -//! The std library of kxos +//! The std library of jinux #![no_std] #![forbid(unsafe_code)] #![allow(dead_code)] @@ -12,7 +12,7 @@ #![feature(extend_one)] use crate::{prelude::*, user_apps::UserApp}; -use kxos_frame::{info, println}; +use jinux_frame::{info, println}; use process::Process; use crate::{ @@ -38,7 +38,7 @@ mod user_apps; mod util; pub mod vm; #[macro_use] -extern crate kxos_frame_pod_derive; +extern crate pod_derive; pub fn init() { driver::init(); @@ -57,7 +57,7 @@ pub fn init_process() { info!("current ppid = {}", ppid); }); info!( - "[kxos-std/lib.rs] spawn kernel process, pid = {}", + "[jinux-std/lib.rs] spawn kernel process, pid = {}", process.pid() ); @@ -68,7 +68,7 @@ pub fn init_process() { argv, envp, } = app; - info!("[kxos-std/lib.rs] spwan {:?} process", app_name); + info!("[jinux-std/lib.rs] spwan {:?} process", app_name); print!("\n"); print!("BusyBox v1.35.0 built-in shell (ash)\n\n"); Process::spawn_user_process(app_name.clone(), app_content, argv, Vec::new()); diff --git a/src/kxos-std/src/memory/mod.rs b/src/services/libs/jinux-std/src/memory/mod.rs similarity index 97% rename from src/kxos-std/src/memory/mod.rs rename to src/services/libs/jinux-std/src/memory/mod.rs index 3849085ee..51565e051 100644 --- a/src/kxos-std/src/memory/mod.rs +++ b/src/services/libs/jinux-std/src/memory/mod.rs @@ -1,5 +1,6 @@ use crate::prelude::*; -use kxos_frame::vm::{Pod, VmIo}; +use jinux_frame::vm::VmIo; +use pod::Pod; pub mod vm_page; diff --git a/src/kxos-std/src/memory/vm_page.rs b/src/services/libs/jinux-std/src/memory/vm_page.rs similarity index 98% rename from src/kxos-std/src/memory/vm_page.rs rename to src/services/libs/jinux-std/src/memory/vm_page.rs index cfafc4ec4..6553b716f 100644 --- a/src/kxos-std/src/memory/vm_page.rs +++ b/src/services/libs/jinux-std/src/memory/vm_page.rs @@ -1,7 +1,7 @@ //! A Page in virtual address space use crate::prelude::*; use core::ops::Range; -use kxos_frame::vm::{VmAllocOptions, VmFrameVec, VmIo, VmMapOptions, VmPerm, VmSpace}; +use jinux_frame::vm::{VmAllocOptions, VmFrameVec, VmIo, VmMapOptions, VmPerm, VmSpace}; /// A set of **CONTINUOUS** virtual pages in VmSpace pub struct VmPageRange { diff --git a/src/kxos-std/src/prelude.rs b/src/services/libs/jinux-std/src/prelude.rs similarity index 82% rename from src/kxos-std/src/prelude.rs rename to src/services/libs/jinux-std/src/prelude.rs index 7a80a5708..05784017e 100644 --- a/src/kxos-std/src/prelude.rs +++ b/src/services/libs/jinux-std/src/prelude.rs @@ -11,9 +11,9 @@ pub(crate) use alloc::vec; pub(crate) use alloc::vec::Vec; pub(crate) use bitflags::bitflags; pub(crate) use core::ffi::CStr; -pub(crate) use kxos_frame::config::PAGE_SIZE; -pub(crate) use kxos_frame::vm::Vaddr; -pub(crate) use kxos_frame::{debug, error, info, print, println, trace, warn}; +pub(crate) use jinux_frame::config::PAGE_SIZE; +pub(crate) use jinux_frame::vm::Vaddr; +pub(crate) use jinux_frame::{debug, error, info, print, println, trace, warn}; pub(crate) use spin::Mutex; #[macro_export] diff --git a/src/kxos-std/src/process/clone.rs b/src/services/libs/jinux-std/src/process/clone.rs similarity index 99% rename from src/kxos-std/src/process/clone.rs rename to src/services/libs/jinux-std/src/process/clone.rs index 7a17af55a..9aace2982 100644 --- a/src/kxos-std/src/process/clone.rs +++ b/src/services/libs/jinux-std/src/process/clone.rs @@ -1,4 +1,4 @@ -use kxos_frame::{ +use jinux_frame::{ cpu::CpuContext, user::UserSpace, vm::{VmIo, VmSpace}, diff --git a/src/kxos-std/src/process/elf/aux_vec.rs b/src/services/libs/jinux-std/src/process/elf/aux_vec.rs similarity index 100% rename from src/kxos-std/src/process/elf/aux_vec.rs rename to src/services/libs/jinux-std/src/process/elf/aux_vec.rs diff --git a/src/kxos-std/src/process/elf/elf.rs b/src/services/libs/jinux-std/src/process/elf/elf.rs similarity index 99% rename from src/kxos-std/src/process/elf/elf.rs rename to src/services/libs/jinux-std/src/process/elf/elf.rs index 1f6d215aa..6fb402e6d 100644 --- a/src/kxos-std/src/process/elf/elf.rs +++ b/src/services/libs/jinux-std/src/process/elf/elf.rs @@ -6,7 +6,7 @@ use crate::{ prelude::*, }; use core::{cmp::Ordering, ops::Range}; -use kxos_frame::vm::{VmAllocOptions, VmFrameVec, VmIo, VmPerm, VmSpace}; +use jinux_frame::vm::{VmAllocOptions, VmFrameVec, VmIo, VmPerm, VmSpace}; use xmas_elf::{ header, program::{self, ProgramHeader, ProgramHeader64, SegmentData}, diff --git a/src/kxos-std/src/process/elf/init_stack.rs b/src/services/libs/jinux-std/src/process/elf/init_stack.rs similarity index 99% rename from src/kxos-std/src/process/elf/init_stack.rs rename to src/services/libs/jinux-std/src/process/elf/init_stack.rs index 3c951085b..82caea531 100644 --- a/src/kxos-std/src/process/elf/init_stack.rs +++ b/src/services/libs/jinux-std/src/process/elf/init_stack.rs @@ -4,7 +4,7 @@ use crate::{memory::vm_page::VmPageRange, prelude::*}; use core::mem; -use kxos_frame::{ +use jinux_frame::{ vm::{VmIo, VmPerm, VmSpace}, AlignExt, }; diff --git a/src/kxos-std/src/process/elf/mod.rs b/src/services/libs/jinux-std/src/process/elf/mod.rs similarity index 96% rename from src/kxos-std/src/process/elf/mod.rs rename to src/services/libs/jinux-std/src/process/elf/mod.rs index 0f889928c..0dcb86cc7 100644 --- a/src/kxos-std/src/process/elf/mod.rs +++ b/src/services/libs/jinux-std/src/process/elf/mod.rs @@ -2,7 +2,7 @@ pub mod aux_vec; pub mod elf; pub mod init_stack; -use kxos_frame::vm::VmSpace; +use jinux_frame::vm::VmSpace; use self::elf::ElfLoadInfo; use crate::prelude::*; diff --git a/src/kxos-std/src/process/exception.rs b/src/services/libs/jinux-std/src/process/exception.rs similarity index 93% rename from src/kxos-std/src/process/exception.rs rename to src/services/libs/jinux-std/src/process/exception.rs index 394b9820d..a183cebc9 100644 --- a/src/kxos-std/src/process/exception.rs +++ b/src/services/libs/jinux-std/src/process/exception.rs @@ -1,4 +1,4 @@ -use kxos_frame::cpu::CpuContext; +use jinux_frame::cpu::CpuContext; use crate::{prelude::*, process::signal::signals::fault::FaultSignal}; diff --git a/src/kxos-std/src/process/fifo_scheduler.rs b/src/services/libs/jinux-std/src/process/fifo_scheduler.rs similarity index 92% rename from src/kxos-std/src/process/fifo_scheduler.rs rename to src/services/libs/jinux-std/src/process/fifo_scheduler.rs index 9ba6f41c9..21a07e33e 100644 --- a/src/kxos-std/src/process/fifo_scheduler.rs +++ b/src/services/libs/jinux-std/src/process/fifo_scheduler.rs @@ -1,5 +1,5 @@ use crate::prelude::*; -use kxos_frame::task::{set_scheduler, Scheduler, Task}; +use jinux_frame::task::{set_scheduler, Scheduler, Task}; pub const TASK_INIT_CAPABILITY: usize = 16; diff --git a/src/kxos-std/src/process/mod.rs b/src/services/libs/jinux-std/src/process/mod.rs similarity index 99% rename from src/kxos-std/src/process/mod.rs rename to src/services/libs/jinux-std/src/process/mod.rs index cd5a69c78..a934465cd 100644 --- a/src/kxos-std/src/process/mod.rs +++ b/src/services/libs/jinux-std/src/process/mod.rs @@ -15,8 +15,8 @@ use self::task::create_user_task_from_elf; use crate::fs::file_table::FileTable; use crate::prelude::*; use crate::tty::get_console; -use kxos_frame::sync::WaitQueue; -use kxos_frame::{task::Task, user::UserSpace, vm::VmSpace}; +use jinux_frame::sync::WaitQueue; +use jinux_frame::{task::Task, user::UserSpace, vm::VmSpace}; pub mod clone; pub mod elf; diff --git a/src/kxos-std/src/process/name.rs b/src/services/libs/jinux-std/src/process/name.rs similarity index 100% rename from src/kxos-std/src/process/name.rs rename to src/services/libs/jinux-std/src/process/name.rs diff --git a/src/kxos-std/src/process/process_filter.rs b/src/services/libs/jinux-std/src/process/process_filter.rs similarity index 100% rename from src/kxos-std/src/process/process_filter.rs rename to src/services/libs/jinux-std/src/process/process_filter.rs diff --git a/src/kxos-std/src/process/process_group.rs b/src/services/libs/jinux-std/src/process/process_group.rs similarity index 100% rename from src/kxos-std/src/process/process_group.rs rename to src/services/libs/jinux-std/src/process/process_group.rs diff --git a/src/kxos-std/src/process/process_vm/mmap_area.rs b/src/services/libs/jinux-std/src/process/process_vm/mmap_area.rs similarity index 98% rename from src/kxos-std/src/process/process_vm/mmap_area.rs rename to src/services/libs/jinux-std/src/process/process_vm/mmap_area.rs index 8d990d284..ab64fe833 100644 --- a/src/kxos-std/src/process/process_vm/mmap_area.rs +++ b/src/services/libs/jinux-std/src/process/process_vm/mmap_area.rs @@ -1,7 +1,7 @@ use core::sync::atomic::{AtomicUsize, Ordering}; use crate::{memory::vm_page::VmPageRange, prelude::*, process::elf::init_stack::INIT_STACK_BASE}; -use kxos_frame::vm::{VmPerm, VmSpace}; +use jinux_frame::vm::{VmPerm, VmSpace}; // The definition of MMapFlags is from occlum bitflags! { diff --git a/src/kxos-std/src/process/process_vm/mod.rs b/src/services/libs/jinux-std/src/process/process_vm/mod.rs similarity index 100% rename from src/kxos-std/src/process/process_vm/mod.rs rename to src/services/libs/jinux-std/src/process/process_vm/mod.rs diff --git a/src/kxos-std/src/process/process_vm/user_heap.rs b/src/services/libs/jinux-std/src/process/process_vm/user_heap.rs similarity index 98% rename from src/kxos-std/src/process/process_vm/user_heap.rs rename to src/services/libs/jinux-std/src/process/process_vm/user_heap.rs index 82599ee09..e100de35c 100644 --- a/src/kxos-std/src/process/process_vm/user_heap.rs +++ b/src/services/libs/jinux-std/src/process/process_vm/user_heap.rs @@ -4,7 +4,7 @@ use crate::{ memory::vm_page::{VmPage, VmPageRange}, prelude::*, }; -use kxos_frame::vm::{VmPerm, VmSpace}; +use jinux_frame::vm::{VmPerm, VmSpace}; pub const USER_HEAP_BASE: Vaddr = 0x0000_0000_1000_0000; diff --git a/src/kxos-std/src/process/signal/c_types.rs b/src/services/libs/jinux-std/src/process/signal/c_types.rs similarity index 98% rename from src/kxos-std/src/process/signal/c_types.rs rename to src/services/libs/jinux-std/src/process/signal/c_types.rs index d9fc0a6cd..88fdadafe 100644 --- a/src/kxos-std/src/process/signal/c_types.rs +++ b/src/services/libs/jinux-std/src/process/signal/c_types.rs @@ -1,7 +1,7 @@ #![allow(non_camel_case_types)] use core::mem; -use kxos_frame::cpu::GpRegs; +use jinux_frame::cpu::GpRegs; use crate::prelude::*; diff --git a/src/kxos-std/src/process/signal/constants.rs b/src/services/libs/jinux-std/src/process/signal/constants.rs similarity index 100% rename from src/kxos-std/src/process/signal/constants.rs rename to src/services/libs/jinux-std/src/process/signal/constants.rs diff --git a/src/kxos-std/src/process/signal/mod.rs b/src/services/libs/jinux-std/src/process/signal/mod.rs similarity index 98% rename from src/kxos-std/src/process/signal/mod.rs rename to src/services/libs/jinux-std/src/process/signal/mod.rs index f38d70714..590419b47 100644 --- a/src/kxos-std/src/process/signal/mod.rs +++ b/src/services/libs/jinux-std/src/process/signal/mod.rs @@ -9,8 +9,8 @@ pub mod signals; use core::mem; -use kxos_frame::AlignExt; -use kxos_frame::{cpu::CpuContext, task::Task}; +use jinux_frame::AlignExt; +use jinux_frame::{cpu::CpuContext, task::Task}; use self::c_types::siginfo_t; use self::sig_mask::SigMask; diff --git a/src/kxos-std/src/process/signal/sig_action.rs b/src/services/libs/jinux-std/src/process/signal/sig_action.rs similarity index 99% rename from src/kxos-std/src/process/signal/sig_action.rs rename to src/services/libs/jinux-std/src/process/signal/sig_action.rs index 5aabca9a9..ef4d94cbc 100644 --- a/src/kxos-std/src/process/signal/sig_action.rs +++ b/src/services/libs/jinux-std/src/process/signal/sig_action.rs @@ -1,7 +1,7 @@ use super::{c_types::sigaction_t, constants::*, sig_mask::SigMask, sig_num::SigNum}; use crate::prelude::*; use bitflags::bitflags; -use kxos_frame::warn; +use jinux_frame::warn; #[derive(Debug, Copy, Clone, PartialEq, Eq)] pub enum SigAction { diff --git a/src/kxos-std/src/process/signal/sig_disposition.rs b/src/services/libs/jinux-std/src/process/signal/sig_disposition.rs similarity index 100% rename from src/kxos-std/src/process/signal/sig_disposition.rs rename to src/services/libs/jinux-std/src/process/signal/sig_disposition.rs diff --git a/src/kxos-std/src/process/signal/sig_mask.rs b/src/services/libs/jinux-std/src/process/signal/sig_mask.rs similarity index 100% rename from src/kxos-std/src/process/signal/sig_mask.rs rename to src/services/libs/jinux-std/src/process/signal/sig_mask.rs diff --git a/src/kxos-std/src/process/signal/sig_num.rs b/src/services/libs/jinux-std/src/process/signal/sig_num.rs similarity index 100% rename from src/kxos-std/src/process/signal/sig_num.rs rename to src/services/libs/jinux-std/src/process/signal/sig_num.rs diff --git a/src/kxos-std/src/process/signal/sig_queues.rs b/src/services/libs/jinux-std/src/process/signal/sig_queues.rs similarity index 100% rename from src/kxos-std/src/process/signal/sig_queues.rs rename to src/services/libs/jinux-std/src/process/signal/sig_queues.rs diff --git a/src/kxos-std/src/process/signal/signals/fault.rs b/src/services/libs/jinux-std/src/process/signal/signals/fault.rs similarity index 96% rename from src/kxos-std/src/process/signal/signals/fault.rs rename to src/services/libs/jinux-std/src/process/signal/signals/fault.rs index 3bc336441..d72468d8b 100644 --- a/src/kxos-std/src/process/signal/signals/fault.rs +++ b/src/services/libs/jinux-std/src/process/signal/signals/fault.rs @@ -1,5 +1,5 @@ -use kxos_frame::cpu::TrapInformation; -use kxos_frame::trap::{ +use jinux_frame::cpu::TrapInformation; +use jinux_frame::trap::{ ALIGNMENT_CHECK, BOUND_RANGE_EXCEEDED, DIVIDE_BY_ZERO, GENERAL_PROTECTION_FAULT, INVALID_OPCODE, PAGE_FAULT, SIMD_FLOATING_POINT_EXCEPTION, X87_FLOATING_POINT_EXCEPTION, }; diff --git a/src/kxos-std/src/process/signal/signals/kernel.rs b/src/services/libs/jinux-std/src/process/signal/signals/kernel.rs similarity index 100% rename from src/kxos-std/src/process/signal/signals/kernel.rs rename to src/services/libs/jinux-std/src/process/signal/signals/kernel.rs diff --git a/src/kxos-std/src/process/signal/signals/mod.rs b/src/services/libs/jinux-std/src/process/signal/signals/mod.rs similarity index 100% rename from src/kxos-std/src/process/signal/signals/mod.rs rename to src/services/libs/jinux-std/src/process/signal/signals/mod.rs diff --git a/src/kxos-std/src/process/signal/signals/user.rs b/src/services/libs/jinux-std/src/process/signal/signals/user.rs similarity index 100% rename from src/kxos-std/src/process/signal/signals/user.rs rename to src/services/libs/jinux-std/src/process/signal/signals/user.rs diff --git a/src/kxos-std/src/process/status.rs b/src/services/libs/jinux-std/src/process/status.rs similarity index 100% rename from src/kxos-std/src/process/status.rs rename to src/services/libs/jinux-std/src/process/status.rs diff --git a/src/kxos-std/src/process/table.rs b/src/services/libs/jinux-std/src/process/table.rs similarity index 100% rename from src/kxos-std/src/process/table.rs rename to src/services/libs/jinux-std/src/process/table.rs diff --git a/src/kxos-std/src/process/task.rs b/src/services/libs/jinux-std/src/process/task.rs similarity index 99% rename from src/kxos-std/src/process/task.rs rename to src/services/libs/jinux-std/src/process/task.rs index 55a6da14d..ea5ac7aec 100644 --- a/src/kxos-std/src/process/task.rs +++ b/src/services/libs/jinux-std/src/process/task.rs @@ -1,6 +1,6 @@ use core::sync::atomic::AtomicUsize; -use kxos_frame::{ +use jinux_frame::{ cpu::CpuContext, task::Task, user::{UserEvent, UserMode, UserSpace}, diff --git a/src/kxos-std/src/process/wait.rs b/src/services/libs/jinux-std/src/process/wait.rs similarity index 97% rename from src/kxos-std/src/process/wait.rs rename to src/services/libs/jinux-std/src/process/wait.rs index 309240267..d6de2e02b 100644 --- a/src/kxos-std/src/process/wait.rs +++ b/src/services/libs/jinux-std/src/process/wait.rs @@ -41,7 +41,7 @@ pub fn wait_child_exit( drop(children_lock); if unwaited_children.len() == 0 { - return Some(Err(kxos_frame::Error::NoChild)); + return Some(Err(jinux_frame::Error::NoChild)); } // return immediately if we find a zombie child diff --git a/src/kxos-std/src/rights.rs b/src/services/libs/jinux-std/src/rights.rs similarity index 53% rename from src/kxos-std/src/rights.rs rename to src/services/libs/jinux-std/src/rights.rs index ff12228bc..b7296abe1 100644 --- a/src/kxos-std/src/rights.rs +++ b/src/services/libs/jinux-std/src/rights.rs @@ -1,5 +1,5 @@ use bitflags::bitflags; -use kxos_typeflags::type_flags; +use typeflags::typeflags; bitflags! { /// Value-based access rights. @@ -23,33 +23,25 @@ bitflags! { const SIGNAL = 1 << 7; } } -/// Type-based access rights. -/// -/// Similar to value-based access rights (`Rights`), but represented in -/// types. -/// -/// pub trait TRights: u32 { -/// /// Allows duplicating a capability. -/// struct Dup: u32 = Rights::DUP; -/// /// Allows reading data from a data source (files, VM objects, etc.) or -/// /// creating readable memory mappings. -/// struct Read: u32 = Rights::READ; -/// /// Allows writing data to a data sink (files, VM objects, etc.) or -/// /// creating writable memory mappings. -/// struct Write: u32 = Rights::WRITE; -/// /// Allows creating executable memory mappings. -/// struct Exec: u32 = Rights::EXEC; -/// /// Allows sending notifications or signals. -/// struct Signal: u32 = Rights::SIGNAL; -/// } -/// -type_flags! { + +typeflags! { + /// Type-based access rights. + /// + /// Similar to value-based access rights (`Rights`), but represented in + /// types. pub trait TRights: u32 { - pub struct Dup = 1 <<0; - pub struct Read = 1 <<1; - pub struct Write = 1 <<2; - pub struct Exec = 1 <<3; - pub struct Signal = 1 <<7; + /// Allows duplicating a capability. + pub struct Dup = Rights::DUP.bits; + /// Allows reading data from a data source (files, VM objects, etc.) or + /// creating readable memory mappings. + pub struct Read = Rights::READ.bits; + /// Allows writing data to a data sink (files, VM objects, etc.) or + /// creating writable memory mappings. + pub struct Write = Rights::WRITE.bits; + /// Allows creating executable memory mappings. + pub struct Exec = Rights::EXEC.bits; + /// Allows sending notifications or signals. + pub struct Signal = Rights::SIGNAL.bits; } } diff --git a/src/kxos-std/src/syscall/access.rs b/src/services/libs/jinux-std/src/syscall/access.rs similarity index 100% rename from src/kxos-std/src/syscall/access.rs rename to src/services/libs/jinux-std/src/syscall/access.rs diff --git a/src/kxos-std/src/syscall/arch_prctl.rs b/src/services/libs/jinux-std/src/syscall/arch_prctl.rs similarity index 97% rename from src/kxos-std/src/syscall/arch_prctl.rs rename to src/services/libs/jinux-std/src/syscall/arch_prctl.rs index b437d6d79..83b7cfa0b 100644 --- a/src/kxos-std/src/syscall/arch_prctl.rs +++ b/src/services/libs/jinux-std/src/syscall/arch_prctl.rs @@ -1,4 +1,4 @@ -use kxos_frame::cpu::CpuContext; +use jinux_frame::cpu::CpuContext; use crate::prelude::*; use crate::syscall::SYS_ARCH_PRCTL; diff --git a/src/kxos-std/src/syscall/brk.rs b/src/services/libs/jinux-std/src/syscall/brk.rs similarity index 100% rename from src/kxos-std/src/syscall/brk.rs rename to src/services/libs/jinux-std/src/syscall/brk.rs diff --git a/src/kxos-std/src/syscall/clone.rs b/src/services/libs/jinux-std/src/syscall/clone.rs similarity index 97% rename from src/kxos-std/src/syscall/clone.rs rename to src/services/libs/jinux-std/src/syscall/clone.rs index 1758104b0..73b592220 100644 --- a/src/kxos-std/src/syscall/clone.rs +++ b/src/services/libs/jinux-std/src/syscall/clone.rs @@ -1,4 +1,4 @@ -use kxos_frame::cpu::CpuContext; +use jinux_frame::cpu::CpuContext; use crate::process::clone::{clone_child, CloneArgs, CloneFlags}; use crate::{prelude::*, syscall::SYS_CLONE}; diff --git a/src/kxos-std/src/syscall/close.rs b/src/services/libs/jinux-std/src/syscall/close.rs similarity index 100% rename from src/kxos-std/src/syscall/close.rs rename to src/services/libs/jinux-std/src/syscall/close.rs diff --git a/src/kxos-std/src/syscall/constants.rs b/src/services/libs/jinux-std/src/syscall/constants.rs similarity index 100% rename from src/kxos-std/src/syscall/constants.rs rename to src/services/libs/jinux-std/src/syscall/constants.rs diff --git a/src/kxos-std/src/syscall/execve.rs b/src/services/libs/jinux-std/src/syscall/execve.rs similarity index 98% rename from src/kxos-std/src/syscall/execve.rs rename to src/services/libs/jinux-std/src/syscall/execve.rs index b2415734b..aeee32c31 100644 --- a/src/kxos-std/src/syscall/execve.rs +++ b/src/services/libs/jinux-std/src/syscall/execve.rs @@ -1,4 +1,4 @@ -use kxos_frame::cpu::CpuContext; +use jinux_frame::cpu::CpuContext; use super::{constants::*, SyscallReturn}; use crate::memory::{read_cstring_from_user, read_val_from_user}; diff --git a/src/kxos-std/src/syscall/exit.rs b/src/services/libs/jinux-std/src/syscall/exit.rs similarity index 100% rename from src/kxos-std/src/syscall/exit.rs rename to src/services/libs/jinux-std/src/syscall/exit.rs diff --git a/src/kxos-std/src/syscall/exit_group.rs b/src/services/libs/jinux-std/src/syscall/exit_group.rs similarity index 100% rename from src/kxos-std/src/syscall/exit_group.rs rename to src/services/libs/jinux-std/src/syscall/exit_group.rs diff --git a/src/kxos-std/src/syscall/fcntl.rs b/src/services/libs/jinux-std/src/syscall/fcntl.rs similarity index 100% rename from src/kxos-std/src/syscall/fcntl.rs rename to src/services/libs/jinux-std/src/syscall/fcntl.rs diff --git a/src/kxos-std/src/syscall/fork.rs b/src/services/libs/jinux-std/src/syscall/fork.rs similarity index 96% rename from src/kxos-std/src/syscall/fork.rs rename to src/services/libs/jinux-std/src/syscall/fork.rs index cfc0858b4..28e4756ca 100644 --- a/src/kxos-std/src/syscall/fork.rs +++ b/src/services/libs/jinux-std/src/syscall/fork.rs @@ -2,7 +2,7 @@ use crate::{ prelude::*, process::clone::{clone_child, CloneArgs}, }; -use kxos_frame::cpu::CpuContext; +use jinux_frame::cpu::CpuContext; use crate::{process::Process, syscall::SYS_FORK}; diff --git a/src/kxos-std/src/syscall/fstat.rs b/src/services/libs/jinux-std/src/syscall/fstat.rs similarity index 95% rename from src/kxos-std/src/syscall/fstat.rs rename to src/services/libs/jinux-std/src/syscall/fstat.rs index 45d88b7ec..fa2f2e551 100644 --- a/src/kxos-std/src/syscall/fstat.rs +++ b/src/services/libs/jinux-std/src/syscall/fstat.rs @@ -1,4 +1,4 @@ -use kxos_frame::vm::VmIo; +use jinux_frame::vm::VmIo; use crate::fs::stat::Stat; use crate::prelude::*; diff --git a/src/kxos-std/src/syscall/futex.rs b/src/services/libs/jinux-std/src/syscall/futex.rs similarity index 99% rename from src/kxos-std/src/syscall/futex.rs rename to src/services/libs/jinux-std/src/syscall/futex.rs index 49e79024c..5053ada9a 100644 --- a/src/kxos-std/src/syscall/futex.rs +++ b/src/services/libs/jinux-std/src/syscall/futex.rs @@ -5,7 +5,7 @@ use crate::syscall::SyscallReturn; use crate::{memory::read_val_from_user, syscall::SYS_FUTEX}; use crate::prelude::*; -use kxos_frame::cpu::num_cpus; +use jinux_frame::cpu::num_cpus; type FutexBitSet = u32; type FutexBucketRef = Arc>; diff --git a/src/kxos-std/src/syscall/getcwd.rs b/src/services/libs/jinux-std/src/syscall/getcwd.rs similarity index 100% rename from src/kxos-std/src/syscall/getcwd.rs rename to src/services/libs/jinux-std/src/syscall/getcwd.rs diff --git a/src/kxos-std/src/syscall/getegid.rs b/src/services/libs/jinux-std/src/syscall/getegid.rs similarity index 100% rename from src/kxos-std/src/syscall/getegid.rs rename to src/services/libs/jinux-std/src/syscall/getegid.rs diff --git a/src/kxos-std/src/syscall/geteuid.rs b/src/services/libs/jinux-std/src/syscall/geteuid.rs similarity index 100% rename from src/kxos-std/src/syscall/geteuid.rs rename to src/services/libs/jinux-std/src/syscall/geteuid.rs diff --git a/src/kxos-std/src/syscall/getgid.rs b/src/services/libs/jinux-std/src/syscall/getgid.rs similarity index 100% rename from src/kxos-std/src/syscall/getgid.rs rename to src/services/libs/jinux-std/src/syscall/getgid.rs diff --git a/src/kxos-std/src/syscall/getpgrp.rs b/src/services/libs/jinux-std/src/syscall/getpgrp.rs similarity index 100% rename from src/kxos-std/src/syscall/getpgrp.rs rename to src/services/libs/jinux-std/src/syscall/getpgrp.rs diff --git a/src/kxos-std/src/syscall/getpid.rs b/src/services/libs/jinux-std/src/syscall/getpid.rs similarity index 100% rename from src/kxos-std/src/syscall/getpid.rs rename to src/services/libs/jinux-std/src/syscall/getpid.rs diff --git a/src/kxos-std/src/syscall/getppid.rs b/src/services/libs/jinux-std/src/syscall/getppid.rs similarity index 100% rename from src/kxos-std/src/syscall/getppid.rs rename to src/services/libs/jinux-std/src/syscall/getppid.rs diff --git a/src/kxos-std/src/syscall/gettid.rs b/src/services/libs/jinux-std/src/syscall/gettid.rs similarity index 100% rename from src/kxos-std/src/syscall/gettid.rs rename to src/services/libs/jinux-std/src/syscall/gettid.rs diff --git a/src/kxos-std/src/syscall/getuid.rs b/src/services/libs/jinux-std/src/syscall/getuid.rs similarity index 100% rename from src/kxos-std/src/syscall/getuid.rs rename to src/services/libs/jinux-std/src/syscall/getuid.rs diff --git a/src/kxos-std/src/syscall/ioctl.rs b/src/services/libs/jinux-std/src/syscall/ioctl.rs similarity index 100% rename from src/kxos-std/src/syscall/ioctl.rs rename to src/services/libs/jinux-std/src/syscall/ioctl.rs diff --git a/src/kxos-std/src/syscall/kill.rs b/src/services/libs/jinux-std/src/syscall/kill.rs similarity index 100% rename from src/kxos-std/src/syscall/kill.rs rename to src/services/libs/jinux-std/src/syscall/kill.rs diff --git a/src/kxos-std/src/syscall/lseek.rs b/src/services/libs/jinux-std/src/syscall/lseek.rs similarity index 100% rename from src/kxos-std/src/syscall/lseek.rs rename to src/services/libs/jinux-std/src/syscall/lseek.rs diff --git a/src/kxos-std/src/syscall/lstat.rs b/src/services/libs/jinux-std/src/syscall/lstat.rs similarity index 100% rename from src/kxos-std/src/syscall/lstat.rs rename to src/services/libs/jinux-std/src/syscall/lstat.rs diff --git a/src/kxos-std/src/syscall/mmap.rs b/src/services/libs/jinux-std/src/syscall/mmap.rs similarity index 98% rename from src/kxos-std/src/syscall/mmap.rs rename to src/services/libs/jinux-std/src/syscall/mmap.rs index 141a38d85..863c680a2 100644 --- a/src/kxos-std/src/syscall/mmap.rs +++ b/src/services/libs/jinux-std/src/syscall/mmap.rs @@ -2,7 +2,7 @@ use crate::prelude::*; use crate::process::process_vm::mmap_area::MMapFlags; -use kxos_frame::vm::VmPerm; +use jinux_frame::vm::VmPerm; use crate::syscall::SYS_MMAP; diff --git a/src/kxos-std/src/syscall/mod.rs b/src/services/libs/jinux-std/src/syscall/mod.rs similarity index 99% rename from src/kxos-std/src/syscall/mod.rs rename to src/services/libs/jinux-std/src/syscall/mod.rs index ea797868b..d3cdebcbe 100644 --- a/src/kxos-std/src/syscall/mod.rs +++ b/src/services/libs/jinux-std/src/syscall/mod.rs @@ -45,7 +45,7 @@ use crate::syscall::wait4::sys_wait4; use crate::syscall::waitid::sys_waitid; use crate::syscall::write::sys_write; use crate::syscall::writev::sys_writev; -use kxos_frame::cpu::CpuContext; +use jinux_frame::cpu::CpuContext; mod access; mod arch_prctl; diff --git a/src/kxos-std/src/syscall/mprotect.rs b/src/services/libs/jinux-std/src/syscall/mprotect.rs similarity index 95% rename from src/kxos-std/src/syscall/mprotect.rs rename to src/services/libs/jinux-std/src/syscall/mprotect.rs index 65400cb37..d5610cc49 100644 --- a/src/kxos-std/src/syscall/mprotect.rs +++ b/src/services/libs/jinux-std/src/syscall/mprotect.rs @@ -1,4 +1,4 @@ -use kxos_frame::vm::VmPerm; +use jinux_frame::vm::VmPerm; use crate::prelude::*; diff --git a/src/kxos-std/src/syscall/munmap.rs b/src/services/libs/jinux-std/src/syscall/munmap.rs similarity index 81% rename from src/kxos-std/src/syscall/munmap.rs rename to src/services/libs/jinux-std/src/syscall/munmap.rs index 9a6e556f5..a8730e62a 100644 --- a/src/kxos-std/src/syscall/munmap.rs +++ b/src/services/libs/jinux-std/src/syscall/munmap.rs @@ -4,7 +4,7 @@ use super::SyscallReturn; use super::SYS_MUNMAP; pub fn sys_munmap(addr: Vaddr, len: usize) -> Result { - debug!("[syscall][id={}][SYS_READ]", SYS_MUNMAP); + debug!("[syscall][id={}][SYS_MUNMAP]", SYS_MUNMAP); debug!("addr = 0x{:x}, len = {}", addr, len); //TODO: do munmap Ok(SyscallReturn::Return(0)) diff --git a/src/kxos-std/src/syscall/openat.rs b/src/services/libs/jinux-std/src/syscall/openat.rs similarity index 100% rename from src/kxos-std/src/syscall/openat.rs rename to src/services/libs/jinux-std/src/syscall/openat.rs diff --git a/src/kxos-std/src/syscall/poll.rs b/src/services/libs/jinux-std/src/syscall/poll.rs similarity index 100% rename from src/kxos-std/src/syscall/poll.rs rename to src/services/libs/jinux-std/src/syscall/poll.rs diff --git a/src/kxos-std/src/syscall/prctl.rs b/src/services/libs/jinux-std/src/syscall/prctl.rs similarity index 100% rename from src/kxos-std/src/syscall/prctl.rs rename to src/services/libs/jinux-std/src/syscall/prctl.rs diff --git a/src/kxos-std/src/syscall/read.rs b/src/services/libs/jinux-std/src/syscall/read.rs similarity index 100% rename from src/kxos-std/src/syscall/read.rs rename to src/services/libs/jinux-std/src/syscall/read.rs diff --git a/src/kxos-std/src/syscall/readlink.rs b/src/services/libs/jinux-std/src/syscall/readlink.rs similarity index 100% rename from src/kxos-std/src/syscall/readlink.rs rename to src/services/libs/jinux-std/src/syscall/readlink.rs diff --git a/src/kxos-std/src/syscall/rt_sigaction.rs b/src/services/libs/jinux-std/src/syscall/rt_sigaction.rs similarity index 100% rename from src/kxos-std/src/syscall/rt_sigaction.rs rename to src/services/libs/jinux-std/src/syscall/rt_sigaction.rs diff --git a/src/kxos-std/src/syscall/rt_sigprocmask.rs b/src/services/libs/jinux-std/src/syscall/rt_sigprocmask.rs similarity index 98% rename from src/kxos-std/src/syscall/rt_sigprocmask.rs rename to src/services/libs/jinux-std/src/syscall/rt_sigprocmask.rs index 34844ef5a..f3f73eaa6 100644 --- a/src/kxos-std/src/syscall/rt_sigprocmask.rs +++ b/src/services/libs/jinux-std/src/syscall/rt_sigprocmask.rs @@ -1,4 +1,4 @@ -use kxos_frame::vm::VmIo; +use jinux_frame::vm::VmIo; use crate::{ prelude::*, diff --git a/src/kxos-std/src/syscall/rt_sigreturn.rs b/src/services/libs/jinux-std/src/syscall/rt_sigreturn.rs similarity index 95% rename from src/kxos-std/src/syscall/rt_sigreturn.rs rename to src/services/libs/jinux-std/src/syscall/rt_sigreturn.rs index 3c0b6180d..4f7d5e217 100644 --- a/src/kxos-std/src/syscall/rt_sigreturn.rs +++ b/src/services/libs/jinux-std/src/syscall/rt_sigreturn.rs @@ -1,5 +1,5 @@ use crate::{memory::read_val_from_user, prelude::*, process::signal::c_types::ucontext_t}; -use kxos_frame::cpu::CpuContext; +use jinux_frame::cpu::CpuContext; use super::{SyscallReturn, SYS_RT_SIGRETRUN}; diff --git a/src/kxos-std/src/syscall/sched_yield.rs b/src/services/libs/jinux-std/src/syscall/sched_yield.rs similarity index 100% rename from src/kxos-std/src/syscall/sched_yield.rs rename to src/services/libs/jinux-std/src/syscall/sched_yield.rs diff --git a/src/kxos-std/src/syscall/setpgid.rs b/src/services/libs/jinux-std/src/syscall/setpgid.rs similarity index 100% rename from src/kxos-std/src/syscall/setpgid.rs rename to src/services/libs/jinux-std/src/syscall/setpgid.rs diff --git a/src/kxos-std/src/syscall/tgkill.rs b/src/services/libs/jinux-std/src/syscall/tgkill.rs similarity index 92% rename from src/kxos-std/src/syscall/tgkill.rs rename to src/services/libs/jinux-std/src/syscall/tgkill.rs index feb967adb..5b6ff1831 100644 --- a/src/kxos-std/src/syscall/tgkill.rs +++ b/src/services/libs/jinux-std/src/syscall/tgkill.rs @@ -8,7 +8,7 @@ use crate::syscall::SYS_TGKILL; use super::SyscallReturn; /// tgkill send a signal to a thread with pid as its thread id, and tgid as its thread group id. -/// Since kxos only supports one-thread process now, tgkill will send signal to process with pid as its process id, +/// Since jinuxx only supports one-thread process now, tgkill will send signal to process with pid as its process id, /// and tgid as its process group id. pub fn sys_tgkill(tgid: Pgid, pid: Pid, sig_num: u8) -> Result { debug!("[syscall][id={}][SYS_TGKILL]", SYS_TGKILL); diff --git a/src/kxos-std/src/syscall/uname.rs b/src/services/libs/jinux-std/src/syscall/uname.rs similarity index 100% rename from src/kxos-std/src/syscall/uname.rs rename to src/services/libs/jinux-std/src/syscall/uname.rs diff --git a/src/kxos-std/src/syscall/wait4.rs b/src/services/libs/jinux-std/src/syscall/wait4.rs similarity index 100% rename from src/kxos-std/src/syscall/wait4.rs rename to src/services/libs/jinux-std/src/syscall/wait4.rs diff --git a/src/kxos-std/src/syscall/waitid.rs b/src/services/libs/jinux-std/src/syscall/waitid.rs similarity index 100% rename from src/kxos-std/src/syscall/waitid.rs rename to src/services/libs/jinux-std/src/syscall/waitid.rs diff --git a/src/kxos-std/src/syscall/write.rs b/src/services/libs/jinux-std/src/syscall/write.rs similarity index 100% rename from src/kxos-std/src/syscall/write.rs rename to src/services/libs/jinux-std/src/syscall/write.rs diff --git a/src/kxos-std/src/syscall/writev.rs b/src/services/libs/jinux-std/src/syscall/writev.rs similarity index 100% rename from src/kxos-std/src/syscall/writev.rs rename to src/services/libs/jinux-std/src/syscall/writev.rs diff --git a/src/kxos-std/src/tty/line_discipline.rs b/src/services/libs/jinux-std/src/tty/line_discipline.rs similarity index 100% rename from src/kxos-std/src/tty/line_discipline.rs rename to src/services/libs/jinux-std/src/tty/line_discipline.rs diff --git a/src/kxos-std/src/tty/mod.rs b/src/services/libs/jinux-std/src/tty/mod.rs similarity index 99% rename from src/kxos-std/src/tty/mod.rs rename to src/services/libs/jinux-std/src/tty/mod.rs index 8a548d4f6..d055cca99 100644 --- a/src/kxos-std/src/tty/mod.rs +++ b/src/services/libs/jinux-std/src/tty/mod.rs @@ -1,4 +1,4 @@ -use kxos_frame::receive_char; +use jinux_frame::receive_char; use self::line_discipline::LineDiscipline; use crate::fs::events::IoEvents; diff --git a/src/kxos-std/src/tty/termio.rs b/src/services/libs/jinux-std/src/tty/termio.rs similarity index 100% rename from src/kxos-std/src/tty/termio.rs rename to src/services/libs/jinux-std/src/tty/termio.rs diff --git a/src/services/libs/jinux-std/src/user_apps.rs b/src/services/libs/jinux-std/src/user_apps.rs new file mode 100644 index 000000000..5f0ac1bcb --- /dev/null +++ b/src/services/libs/jinux-std/src/user_apps.rs @@ -0,0 +1,121 @@ +use crate::prelude::*; + +pub struct UserApp { + pub app_name: CString, + pub app_content: &'static [u8], + pub argv: Vec, + pub envp: Vec, +} + +impl UserApp { + pub fn new(app_name: &str, app_content: &'static [u8]) -> Self { + let app_name = CString::new(app_name).unwrap(); + UserApp { + app_name, + app_content, + argv: Vec::new(), + envp: Vec::new(), + } + } + + pub fn set_argv(&mut self, argv: Vec) { + self.argv = argv; + } + + pub fn set_envp(&mut self, envp: Vec) { + self.envp = envp; + } +} + +pub fn get_all_apps() -> Vec { + let mut res = Vec::with_capacity(16); + + // Most simple hello world, written in assembly + let asm_hello_world = UserApp::new("hello_world", read_hello_world_content()); + res.push(asm_hello_world); + + // Hello world, written in C language. + // Since glibc requires the app name starts with "/", and we don't have filesystem now. + // So we manually add a leading "/" for app written in C language. + let hello_c = UserApp::new("/hello_c", read_hello_c_content()); + res.push(hello_c); + + // Fork process, written in assembly + let asm_fork = UserApp::new("fork", read_fork_content()); + res.push(asm_fork); + + // Execve, written in C language. + let execve_c = UserApp::new("/execve", read_execve_content()); + res.push(execve_c); + + // Fork new process, written in C language. (Fork in glibc uses syscall clone actually) + let fork_c = UserApp::new("/fork", read_fork_c_content()); + res.push(fork_c); + + // signal test + let signal_test = UserApp::new("/signal_test", read_signal_test_content()); + res.push(signal_test); + + // busybox + let mut busybox = UserApp::new("/busybox", read_busybox_content()); + // -l option means the busybox is running as logging shell + let argv = ["/busybox", "sh", "-l"]; + let envp = [ + "SHELL=/bin/sh", + "PWD=/", + "LOGNAME=root", + "HOME=/", + "USER=root", + "PATH=", + "OLDPWD=/", + ]; + + let argv = to_vec_cstring(&argv).unwrap(); + let envp = to_vec_cstring(&envp).unwrap(); + busybox.set_argv(argv); + busybox.set_envp(envp); + res.push(busybox); + + res +} + +fn read_hello_world_content() -> &'static [u8] { + include_bytes!("../../../../apps/hello_world/hello_world") +} + +fn read_hello_c_content() -> &'static [u8] { + include_bytes!("../../../../apps/hello_c/hello") +} + +fn read_fork_content() -> &'static [u8] { + include_bytes!("../../../../apps/fork/fork") +} + +fn read_execve_content() -> &'static [u8] { + include_bytes!("../../../../apps/execve/execve") +} + +pub fn read_execve_hello_content() -> &'static [u8] { + include_bytes!("../../../../apps/execve/hello") +} + +fn read_fork_c_content() -> &'static [u8] { + include_bytes!("../../../../apps/fork_c/fork") +} + +fn read_signal_test_content() -> &'static [u8] { + include_bytes!("../../../../apps/signal_c/signal_test") +} + +fn read_busybox_content() -> &'static [u8] { + include_bytes!("../../../../apps/busybox/busybox") +} + +fn to_vec_cstring(raw_strs: &[&str]) -> Result> { + let mut res = Vec::new(); + for raw_str in raw_strs { + let cstring = CString::new(*raw_str)?; + res.push(cstring); + } + Ok(res) +} diff --git a/src/kxos-std/src/util/mod.rs b/src/services/libs/jinux-std/src/util/mod.rs similarity index 100% rename from src/kxos-std/src/util/mod.rs rename to src/services/libs/jinux-std/src/util/mod.rs diff --git a/src/kxos-std/src/vm/mod.rs b/src/services/libs/jinux-std/src/vm/mod.rs similarity index 81% rename from src/kxos-std/src/vm/mod.rs rename to src/services/libs/jinux-std/src/vm/mod.rs index 440c45bc5..caecd5528 100644 --- a/src/kxos-std/src/vm/mod.rs +++ b/src/services/libs/jinux-std/src/vm/mod.rs @@ -10,8 +10,8 @@ //! [Zircon](https://fuchsia.dev/fuchsia-src/reference/kernel_objects/vm_object). //! As capabilities, the two abstractions are aligned with our goal //! of everything-is-a-capability, although their specifications and -//! implementations in C/C++ cannot apply directly to KxOS. -//! In KxOS, VMARs and VMOs, as well as other capabilities, are implemented +//! implementations in C/C++ cannot apply directly to Jinux. +//! In Jinux, VMARs and VMOs, as well as other capabilities, are implemented //! as zero-cost capabilities. mod vmar; diff --git a/src/kxos-std/src/vm/vmar/dyn_cap.rs b/src/services/libs/jinux-std/src/vm/vmar/dyn_cap.rs similarity index 96% rename from src/kxos-std/src/vm/vmar/dyn_cap.rs rename to src/services/libs/jinux-std/src/vm/vmar/dyn_cap.rs index 7d295a27a..a68fc58a8 100644 --- a/src/kxos-std/src/vm/vmar/dyn_cap.rs +++ b/src/services/libs/jinux-std/src/vm/vmar/dyn_cap.rs @@ -1,8 +1,8 @@ use core::ops::Range; use alloc::sync::Arc; -use kxos_frame::prelude::Result; -use kxos_frame::{vm::VmIo, Error}; +use jinux_frame::prelude::Result; +use jinux_frame::{vm::VmIo, Error}; use crate::{rights::Rights, vm::vmo::Vmo}; @@ -25,8 +25,8 @@ impl Vmar { /// # Example /// /// ``` - /// use kxos_std::prelude::*; - /// use kxos_std::vm::{PAGE_SIZE, Vmar, VmoOptions}; + /// use jinux_std::prelude::*; + /// use jinux_std::vm::{PAGE_SIZE, Vmar, VmoOptions}; /// /// let vmar = Vmar::new().unwrap(); /// let vmo = VmoOptions::new(PAGE_SIZE).alloc().unwrap(); diff --git a/src/kxos-std/src/vm/vmar/mod.rs b/src/services/libs/jinux-std/src/vm/vmar/mod.rs similarity index 94% rename from src/kxos-std/src/vm/vmar/mod.rs rename to src/services/libs/jinux-std/src/vm/vmar/mod.rs index 5a4be03ae..3bb65cb8e 100644 --- a/src/kxos-std/src/vm/vmar/mod.rs +++ b/src/services/libs/jinux-std/src/vm/vmar/mod.rs @@ -8,10 +8,10 @@ use crate::rights::Rights; use alloc::sync::Arc; use bitflags::bitflags; use core::ops::Range; -use kxos_frame::prelude::Result; -use kxos_frame::vm::Vaddr; -use kxos_frame::vm::VmSpace; -use kxos_frame::Error; +use jinux_frame::prelude::Result; +use jinux_frame::vm::Vaddr; +use jinux_frame::vm::VmSpace; +use jinux_frame::Error; use spin::Mutex; /// Virtual Memory Address Regions (VMARs) are a type of capability that manages @@ -36,7 +36,7 @@ use spin::Mutex; /// # Implementation /// /// `Vmar` provides high-level APIs for address space management by wrapping -/// around its low-level counterpart `kx_frame::vm::VmFrames`. +/// around its low-level counterpart `_frame::vm::VmFrames`. /// Compared with `VmFrames`, /// `Vmar` is easier to use (by offering more powerful APIs) and /// harder to misuse (thanks to its nature of being capability). diff --git a/src/kxos-std/src/vm/vmar/options.rs b/src/services/libs/jinux-std/src/vm/vmar/options.rs similarity index 96% rename from src/kxos-std/src/vm/vmar/options.rs rename to src/services/libs/jinux-std/src/vm/vmar/options.rs index 20a83b33c..d6dbd0038 100644 --- a/src/kxos-std/src/vm/vmar/options.rs +++ b/src/services/libs/jinux-std/src/vm/vmar/options.rs @@ -1,7 +1,7 @@ //! Options for allocating child VMARs and creating mappings. -use kxos_frame::prelude::Result; -use kxos_frame::{config::PAGE_SIZE, vm::Vaddr}; +use jinux_frame::prelude::Result; +use jinux_frame::{config::PAGE_SIZE, vm::Vaddr}; use crate::vm::vmo::Vmo; @@ -15,7 +15,7 @@ use super::{VmPerms, Vmar}; /// A child VMAR created from a parent VMAR of _dynamic_ capability is also a /// _dynamic_ capability. /// ``` -/// use kxo_std::vm::{PAGE_SIZE, Vmar}; +/// use jinux_std::vm::{PAGE_SIZE, Vmar}; /// /// let parent_vmar = Vmar::new(); /// let child_size = 10 * PAGE_SIZE; @@ -30,8 +30,8 @@ use super::{VmPerms, Vmar}; /// A child VMO created from a parent VMO of _static_ capability is also a /// _static_ capability. /// ``` -/// use kxos_std::prelude::*; -/// use kxos_std::vm::{PAGE_SIZE, Vmar}; +/// use jinux_std::prelude::*; +/// use jinux_std::vm::{PAGE_SIZE, Vmar}; /// /// let parent_vmar: Vmar = Vmar::new(); /// let child_size = 10 * PAGE_SIZE; diff --git a/src/kxos-std/src/vm/vmar/static_cap.rs b/src/services/libs/jinux-std/src/vm/vmar/static_cap.rs similarity index 96% rename from src/kxos-std/src/vm/vmar/static_cap.rs rename to src/services/libs/jinux-std/src/vm/vmar/static_cap.rs index 9c3adfdd3..6a9a93914 100644 --- a/src/kxos-std/src/vm/vmar/static_cap.rs +++ b/src/services/libs/jinux-std/src/vm/vmar/static_cap.rs @@ -1,9 +1,9 @@ use core::ops::Range; use alloc::sync::Arc; -use kxos_frame::prelude::Result; -use kxos_frame::{vm::VmIo, Error}; -use kxos_rights_proc::require; +use jinux_frame::prelude::Result; +use jinux_frame::{vm::VmIo, Error}; +use jinux_rights_proc::require; use crate::{ rights::{Dup, Read, Rights, TRights}, @@ -33,8 +33,8 @@ impl Vmar { /// # Example /// /// ``` - /// use kxos_std::prelude::*; - /// use kxos_std::vm::{PAGE_SIZE, Vmar, VmoOptions}; + /// use jinux_std::prelude::*; + /// use jinux_std::vm::{PAGE_SIZE, Vmar, VmoOptions}; /// /// let vmar = Vmar::::new().unwrap(); /// let vmo = VmoOptions::new(PAGE_SIZE).alloc().unwrap(); diff --git a/src/kxos-std/src/vm/vmo/dyn_cap.rs b/src/services/libs/jinux-std/src/vm/vmo/dyn_cap.rs similarity index 98% rename from src/kxos-std/src/vm/vmo/dyn_cap.rs rename to src/services/libs/jinux-std/src/vm/vmo/dyn_cap.rs index af46ca900..a94758dca 100644 --- a/src/kxos-std/src/vm/vmo/dyn_cap.rs +++ b/src/services/libs/jinux-std/src/vm/vmo/dyn_cap.rs @@ -1,7 +1,7 @@ use core::ops::Range; -use kxos_frame::prelude::Result; -use kxos_frame::{vm::VmIo, Error}; +use jinux_frame::prelude::Result; +use jinux_frame::{vm::VmIo, Error}; use crate::rights::{Rights, TRights}; diff --git a/src/kxos-std/src/vm/vmo/mod.rs b/src/services/libs/jinux-std/src/vm/vmo/mod.rs similarity index 97% rename from src/kxos-std/src/vm/vmo/mod.rs rename to src/services/libs/jinux-std/src/vm/vmo/mod.rs index 328bcb872..6d1045542 100644 --- a/src/kxos-std/src/vm/vmo/mod.rs +++ b/src/services/libs/jinux-std/src/vm/vmo/mod.rs @@ -5,7 +5,7 @@ use core::ops::Range; use crate::rights::Rights; use alloc::sync::Arc; use bitflags::bitflags; -use kxos_frame::{prelude::Result, vm::Paddr, Error}; +use jinux_frame::{prelude::Result, vm::Paddr, Error}; mod dyn_cap; mod options; @@ -66,7 +66,7 @@ use spin::Mutex; /// # Implementation /// /// `Vmo` provides high-level APIs for address space management by wrapping -/// around its low-level counterpart `kx_frame::vm::VmFrames`. +/// around its low-level counterpart `jinux_frame::vm::VmFrames`. /// Compared with `VmFrames`, /// `Vmo` is easier to use (by offering more powerful APIs) and /// harder to misuse (thanks to its nature of being capability). diff --git a/src/kxos-std/src/vm/vmo/options.rs b/src/services/libs/jinux-std/src/vm/vmo/options.rs similarity index 96% rename from src/kxos-std/src/vm/vmo/options.rs rename to src/services/libs/jinux-std/src/vm/vmo/options.rs index cad075aba..2a2b567f3 100644 --- a/src/kxos-std/src/vm/vmo/options.rs +++ b/src/services/libs/jinux-std/src/vm/vmo/options.rs @@ -4,9 +4,9 @@ use core::marker::PhantomData; use core::ops::Range; use alloc::sync::Arc; -use kxos_frame::prelude::Result; -use kxos_frame::vm::Paddr; -use kxos_rights_proc::require; +use jinux_frame::prelude::Result; +use jinux_frame::vm::Paddr; +use jinux_rights_proc::require; use crate::rights::{Dup, Rights, TRights}; @@ -27,7 +27,7 @@ use super::{Pager, Vmo, VmoFlags}; /// /// Creating a VMO as a _static_ capability with all access rights: /// ``` -/// use kxos_std::prelude::*; +/// use jinux_std::prelude::*; /// use kxo_std::vm::{PAGE_SIZE, VmoOptions}; /// /// let vmo = VmoOptions::::new(PAGE_SIZE) @@ -39,7 +39,7 @@ use super::{Pager, Vmo, VmoFlags}; /// physically contiguous: /// /// ``` -/// use kxos_std::vm::{PAGE_SIZE, VmoOptions, VmoFlags}; +/// use jinux_std::vm::{PAGE_SIZE, VmoOptions, VmoFlags}; /// /// let vmo = VmoOptions::new(10 * PAGE_SIZE) /// .flags(VmoFlags::RESIZABLE) @@ -132,8 +132,8 @@ impl VmoOptions { /// A child VMO created from a parent VMO of _static_ capability is also a /// _static_ capability. /// ``` -/// use kxos_std::prelude::*; -/// use kxos_std::vm::{PAGE_SIZE, VmoOptions, VmoChildOptions}; +/// use jinux_std::prelude::*; +/// use jinux_std::vm::{PAGE_SIZE, VmoOptions, VmoChildOptions}; /// /// let parent_vmo: Vmo = VmoOptions::new(PAGE_SIZE) /// .alloc() @@ -165,7 +165,7 @@ impl VmoOptions { /// The above rule for COW VMO children also applies to static capabilities. /// /// ``` -/// use kxos_std::vm::{PAGE_SIZE, VmoOptions, VmoChildOptions}; +/// use jinux_std::vm::{PAGE_SIZE, VmoOptions, VmoChildOptions}; /// /// let parent_vmo = VmoOptions::::new(PAGE_SIZE) /// .alloc() diff --git a/src/kxos-std/src/vm/vmo/pager.rs b/src/services/libs/jinux-std/src/vm/vmo/pager.rs similarity index 97% rename from src/kxos-std/src/vm/vmo/pager.rs rename to src/services/libs/jinux-std/src/vm/vmo/pager.rs index 805aa72ae..7b37372fa 100644 --- a/src/kxos-std/src/vm/vmo/pager.rs +++ b/src/services/libs/jinux-std/src/vm/vmo/pager.rs @@ -1,5 +1,5 @@ -use kxos_frame::prelude::Result; -use kxos_frame::vm::VmFrame; +use jinux_frame::prelude::Result; +use jinux_frame::vm::VmFrame; /// Pagers provide frame to a VMO. /// diff --git a/src/kxos-std/src/vm/vmo/static_cap.rs b/src/services/libs/jinux-std/src/vm/vmo/static_cap.rs similarity index 97% rename from src/kxos-std/src/vm/vmo/static_cap.rs rename to src/services/libs/jinux-std/src/vm/vmo/static_cap.rs index 9dfa407dd..4d12cca46 100644 --- a/src/kxos-std/src/vm/vmo/static_cap.rs +++ b/src/services/libs/jinux-std/src/vm/vmo/static_cap.rs @@ -1,8 +1,8 @@ use core::ops::Range; -use kxos_frame::prelude::Result; -use kxos_frame::{vm::VmIo, Error}; -use kxos_rights_proc::require; +use jinux_frame::prelude::Result; +use jinux_frame::{vm::VmIo, Error}; +use jinux_rights_proc::require; use crate::rights::*; diff --git a/src/services/libs/jinux-util/Cargo.toml b/src/services/libs/jinux-util/Cargo.toml new file mode 100644 index 000000000..5d2db4296 --- /dev/null +++ b/src/services/libs/jinux-util/Cargo.toml @@ -0,0 +1,14 @@ +[package] +name = "jinux-util" +version = "0.1.0" +edition = "2021" + +# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html + +[dependencies] +jinux-frame = {path = "../../../framework/jinux-frame"} +pod-derive = {path = "../../../framework/pod-derive"} +pod = {path = "../../../framework/pod"} + +[features] + diff --git a/src/kxos-util/src/frame_ptr.rs b/src/services/libs/jinux-util/src/frame_ptr.rs similarity index 93% rename from src/kxos-util/src/frame_ptr.rs rename to src/services/libs/jinux-util/src/frame_ptr.rs index 956c98095..1b25d2c72 100644 --- a/src/kxos-util/src/frame_ptr.rs +++ b/src/services/libs/jinux-util/src/frame_ptr.rs @@ -1,10 +1,11 @@ use core::marker::PhantomData; -use kxos_frame::{ +use jinux_frame::{ config::PAGE_SIZE, - vm::{Paddr, Pod, VmAllocOptions, VmFrame, VmFrameVec, VmIo}, + vm::{Paddr, VmAllocOptions, VmFrame, VmFrameVec, VmIo}, Result, }; +use pod::Pod; /// An in-frame pointer to a POD value, enabling safe access /// to a POD value given its physical memory address. diff --git a/src/kxos-util/src/lib.rs b/src/services/libs/jinux-util/src/lib.rs similarity index 71% rename from src/kxos-util/src/lib.rs rename to src/services/libs/jinux-util/src/lib.rs index c97eb8e05..ccbcb5541 100644 --- a/src/kxos-util/src/lib.rs +++ b/src/services/libs/jinux-util/src/lib.rs @@ -1,4 +1,4 @@ -//! The util of kxos +//! The util of jinux #![no_std] #![forbid(unsafe_code)] diff --git a/src/kxos-util/Cargo.toml b/src/services/libs/typeflags-util/Cargo.toml similarity index 69% rename from src/kxos-util/Cargo.toml rename to src/services/libs/typeflags-util/Cargo.toml index 9a8a511e4..7c1cec8a4 100644 --- a/src/kxos-util/Cargo.toml +++ b/src/services/libs/typeflags-util/Cargo.toml @@ -1,12 +1,8 @@ [package] -name = "kxos-util" +name = "typeflags-util" version = "0.1.0" edition = "2021" # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html [dependencies] -kxos-frame = {path = "../kxos-frame"} - -[features] - diff --git a/src/kxos-typeflags-util/src/assert.rs b/src/services/libs/typeflags-util/src/assert.rs similarity index 100% rename from src/kxos-typeflags-util/src/assert.rs rename to src/services/libs/typeflags-util/src/assert.rs diff --git a/src/kxos-typeflags-util/src/bool.rs b/src/services/libs/typeflags-util/src/bool.rs similarity index 100% rename from src/kxos-typeflags-util/src/bool.rs rename to src/services/libs/typeflags-util/src/bool.rs diff --git a/src/kxos-typeflags-util/src/if_.rs b/src/services/libs/typeflags-util/src/if_.rs similarity index 100% rename from src/kxos-typeflags-util/src/if_.rs rename to src/services/libs/typeflags-util/src/if_.rs diff --git a/src/kxos-typeflags-util/src/lib.rs b/src/services/libs/typeflags-util/src/lib.rs similarity index 85% rename from src/kxos-typeflags-util/src/lib.rs rename to src/services/libs/typeflags-util/src/lib.rs index 8df373555..22a823757 100644 --- a/src/kxos-typeflags-util/src/lib.rs +++ b/src/services/libs/typeflags-util/src/lib.rs @@ -1,7 +1,7 @@ //! The content of this crate is from another project CapComp. //! This crate defines common type level operations, like SameAsOp, and Bool type operations. //! Besides, this crate defines operations to deal with type sets, like SetContain and SetInclude. -//! When use kxos-typeflags or kxos-rights-poc, this crate should also be added as a dependency. +//! When use jinux-typeflags or jinux-rights-poc, this crate should also be added as a dependency. #![no_std] pub mod assert; pub mod bool; diff --git a/src/kxos-typeflags-util/src/same.rs b/src/services/libs/typeflags-util/src/same.rs similarity index 100% rename from src/kxos-typeflags-util/src/same.rs rename to src/services/libs/typeflags-util/src/same.rs diff --git a/src/kxos-typeflags-util/src/set.rs b/src/services/libs/typeflags-util/src/set.rs similarity index 100% rename from src/kxos-typeflags-util/src/set.rs rename to src/services/libs/typeflags-util/src/set.rs diff --git a/src/kxos-typeflags/Cargo.toml b/src/services/libs/typeflags/Cargo.toml similarity index 91% rename from src/kxos-typeflags/Cargo.toml rename to src/services/libs/typeflags/Cargo.toml index 03d2c3013..df3f5875d 100644 --- a/src/kxos-typeflags/Cargo.toml +++ b/src/services/libs/typeflags/Cargo.toml @@ -1,5 +1,5 @@ [package] -name = "kxos-typeflags" +name = "typeflags" version = "0.1.0" edition = "2021" diff --git a/src/kxos-typeflags/src/flag_set.rs b/src/services/libs/typeflags/src/flag_set.rs similarity index 92% rename from src/kxos-typeflags/src/flag_set.rs rename to src/services/libs/typeflags/src/flag_set.rs index 3a7c181d8..05708eeea 100644 --- a/src/kxos-typeflags/src/flag_set.rs +++ b/src/services/libs/typeflags/src/flag_set.rs @@ -5,8 +5,8 @@ use syn::Expr; use crate::type_flag::TypeFlagDef; -const EMPTY_SET_NAME: &'static str = "::kxos_typeflags_util::Nil"; -const SET_NAME: &'static str = "::kxos_typeflags_util::Cons"; +const EMPTY_SET_NAME: &'static str = "::typeflags_util::Nil"; +const SET_NAME: &'static str = "::typeflags_util::Cons"; /// A flagSet represent the combination of differnt flag item. /// e.g. [Read, Write], [Read], [] are all flag sets. @@ -48,14 +48,14 @@ impl FlagSet { /// the tokens represents the flag set type name pub fn type_name_tokens(&self) -> TokenStream { - let mut res = quote!(::kxos_typeflags_util::Nil); + let mut res = quote!(::typeflags_util::Nil); for item in self.items.iter() { let ident = item.ident.clone(); // insert new item as head let new_res = quote! { - ::kxos_typeflags_util::Cons<#ident, #res> + ::typeflags_util::Cons<#ident, #res> }; res = new_res; } @@ -91,7 +91,7 @@ impl FlagSet { { const BITS: #ty = 0 ; fn new() -> Self { - ::kxos_typeflags_util::Nil + ::typeflags_util::Nil } } ) @@ -100,7 +100,7 @@ impl FlagSet { { const BITS: #ty = #(#item_vals)|* ; fn new() -> Self { - ::kxos_typeflags_util::Cons::new() + ::typeflags_util::Cons::new() } } ) diff --git a/src/kxos-typeflags/src/lib.rs b/src/services/libs/typeflags/src/lib.rs similarity index 81% rename from src/kxos-typeflags/src/lib.rs rename to src/services/libs/typeflags/src/lib.rs index 9484ec9ec..1bf64b3e2 100644 --- a/src/kxos-typeflags/src/lib.rs +++ b/src/services/libs/typeflags/src/lib.rs @@ -1,12 +1,12 @@ -//!This crate defines the procedural macro typeflags to implement capability for kxos. -//! When using this crate, kxos-typeflags-util should also be added as dependency. -//! This is due to kxos-typeflgas is a proc-macro crate, which is only allowed to export proc-macro interfaces. -//! So we leave the common type-level operations and structures defined in kxos-typeflags-util. +//!This crate defines the procedural macro typeflags to implement capability for jinux. +//! When using this crate, typeflags-util should also be added as dependency. +//! This is due to typeflgas is a proc-macro crate, which is only allowed to export proc-macro interfaces. +//! So we leave the common type-level operations and structures defined in typeflags-util. //! -//! type_flag is used to define another declarive macro to define type set. +//! typeflags is used to define another declarive macro to define type set. //! It can be used as the following example. //! ```rust -//! type_flags! { +//! typeflags! { //! pub trait RightSet: u32 { //! struct Read = 1 << 1; //! struct Write = 1 << 2; @@ -25,7 +25,7 @@ //! //! Test Example //! ```rust -//! use kxos_typeflags_util::*; +//! use typeflags_util::*; //! assert_eq!(O::BITS, 0); //! assert_eq!(R::BITS, 2); //! assert_eq!(W::BITS, 4); @@ -57,7 +57,7 @@ mod type_flag; mod util; #[proc_macro] -pub fn type_flags(input: proc_macro::TokenStream) -> proc_macro::TokenStream { +pub fn typeflags(input: proc_macro::TokenStream) -> proc_macro::TokenStream { let type_flags_def = parse_macro_input!(input as TypeFlagDef); expand_type_flag(&type_flags_def).into() } diff --git a/src/kxos-typeflags/src/type_flag.rs b/src/services/libs/typeflags/src/type_flag.rs similarity index 86% rename from src/kxos-typeflags/src/type_flag.rs rename to src/services/libs/typeflags/src/type_flag.rs index 6516c5035..d7c54d357 100644 --- a/src/kxos-typeflags/src/type_flag.rs +++ b/src/services/libs/typeflags/src/type_flag.rs @@ -4,11 +4,12 @@ use syn::{ braced, parse::{Parse, ParseStream}, punctuated::Punctuated, - Expr, Ident, Token, Type, Visibility, + Attribute, Expr, Ident, Token, Type, Visibility, }; /// The content inside typeflag macro pub struct TypeFlagDef { + attributes: Vec, ident: Ident, vis: Visibility, type_: Type, @@ -18,6 +19,7 @@ pub struct TypeFlagDef { /// struct item inside typeflag macro #[derive(Clone)] pub struct TypeFlagItem { + attributes: Vec, vis: Visibility, ident: Ident, value: Expr, @@ -25,6 +27,7 @@ pub struct TypeFlagItem { impl Parse for TypeFlagDef { fn parse(input: syn::parse::ParseStream) -> syn::Result { + let attributes = Attribute::parse_outer(input)?; let vis: Visibility = input.parse()?; let _: Token![trait] = input.parse()?; let ident: Ident = input.parse()?; @@ -36,6 +39,7 @@ impl Parse for TypeFlagDef { let items = content.parse_terminated(TypeFlagItem::parse)?; let res = TypeFlagDef { + attributes, ident, vis, type_, @@ -48,12 +52,18 @@ impl Parse for TypeFlagDef { impl Parse for TypeFlagItem { fn parse(input: ParseStream) -> syn::Result { + let attributes = Attribute::parse_outer(input)?; let vis: Visibility = input.parse()?; let _: Token![struct] = input.parse()?; let ident: Ident = input.parse()?; let _: Token![=] = input.parse()?; let value: Expr = input.parse()?; - let res = TypeFlagItem { vis, ident, value }; + let res = TypeFlagItem { + attributes, + vis, + ident, + value, + }; Ok(res) } } @@ -61,10 +71,12 @@ impl Parse for TypeFlagItem { impl TypeFlagDef { /// tokens to define the trait pub fn trait_def_tokens(&self) -> TokenStream { + let attributes = self.attributes.clone(); let vis = self.vis.clone(); let ident = self.ident.clone(); let type_ = self.type_.clone(); quote!( + #(#attributes)* #vis trait #ident : Sync + Send{ const BITS: #type_; @@ -111,9 +123,11 @@ impl TypeFlagDef { impl TypeFlagItem { /// the token stream to define such item fn item_def_tokens(&self) -> TokenStream { + let attributes = self.attributes.clone(); let vis = self.vis.clone(); let ident = self.ident.clone(); quote!( + #(#attributes)* #vis struct #ident {} ) } diff --git a/src/kxos-typeflags/src/util.rs b/src/services/libs/typeflags/src/util.rs similarity index 92% rename from src/kxos-typeflags/src/util.rs rename to src/services/libs/typeflags/src/util.rs index bea77b2ae..b1d1c7d0f 100644 --- a/src/kxos-typeflags/src/util.rs +++ b/src/services/libs/typeflags/src/util.rs @@ -29,11 +29,11 @@ pub fn expand_type_flag(type_flags_def: &TypeFlagDef) -> TokenStream { all_tokens } -/// import crate kxos_typeflags_util +/// import crate typeflags_util pub fn import_util() -> TokenStream { quote!( #[macro_use] - use ::kxos_typeflags_util::*; + use ::typeflags_util::*; ) } @@ -63,8 +63,8 @@ pub fn impl_same_as(type_flags_def: &TypeFlagDef) -> TokenStream { let ident1 = item1.ident(); let ident2 = item2.ident(); let tokens = quote!( - impl ::kxos_typeflags_util::SameAs<#ident1> for #ident2 { - type Output = ::kxos_typeflags_util::False; + impl ::typeflags_util::SameAs<#ident1> for #ident2 { + type Output = ::typeflags_util::False; } ); all_tokens.append_all(tokens); diff --git a/src/src/main.rs b/src/src/main.rs index 4c4cfc9dc..a3a68486e 100644 --- a/src/src/main.rs +++ b/src/src/main.rs @@ -2,24 +2,24 @@ #![no_main] #![feature(custom_test_frameworks)] #![forbid(unsafe_code)] -#![test_runner(kxos_frame::test_runner)] +#![test_runner(jinux_frame::test_runner)] #![reexport_test_harness_main = "test_main"] -extern crate kxos_frame; +extern crate jinux_frame; use bootloader::{entry_point, BootInfo}; use core::panic::PanicInfo; -use kxos_frame::println; +use jinux_frame::println; entry_point!(kernel_main); fn kernel_main(boot_info: &'static mut BootInfo) -> ! { #[cfg(test)] test_main(); - kxos_frame::init(boot_info); - println!("[kernel] finish init kxos_frame"); + jinux_frame::init(boot_info); + println!("[kernel] finish init jinux_frame"); - kxos_std::init(); - kxos_std::run_first_process(); + jinux_std::init(); + jinux_std::run_first_process(); } #[cfg(not(test))] #[panic_handler] @@ -31,7 +31,7 @@ fn panic(info: &PanicInfo) -> ! { #[cfg(test)] #[panic_handler] fn panic(info: &PanicInfo) -> ! { - kxos_frame::test_panic_handler(info); + jinux_frame::test_panic_handler(info); } #[test_case] diff --git a/src/tests/test_example.rs b/src/tests/test_example.rs index bfde06d49..ec75ca4ce 100644 --- a/src/tests/test_example.rs +++ b/src/tests/test_example.rs @@ -1,7 +1,7 @@ #![no_std] #![no_main] #![feature(custom_test_frameworks)] -#![test_runner(kxos_frame::test_runner)] +#![test_runner(jinux_frame::test_runner)] #![reexport_test_harness_main = "test_main"] use bootloader::{entry_point, BootInfo}; use core::panic::PanicInfo; @@ -9,17 +9,17 @@ use core::panic::PanicInfo; entry_point!(kernel_test_main); fn kernel_test_main(boot_info: &'static mut BootInfo) -> ! { - kxos_frame::init(boot_info); + jinux_frame::init(boot_info); test_main(); loop {} } #[panic_handler] fn panic(info: &PanicInfo) -> ! { - kxos_frame::test_panic_handler(info) + jinux_frame::test_panic_handler(info) } #[test_case] fn test_println() { - kxos_frame::println!("test_println output"); + jinux_frame::println!("test_println output"); } diff --git a/src/tests/timer_test.rs b/src/tests/timer_test.rs index e0e3bc771..4eb58f709 100644 --- a/src/tests/timer_test.rs +++ b/src/tests/timer_test.rs @@ -1,35 +1,35 @@ #![no_std] #![no_main] #![feature(custom_test_frameworks)] -#![test_runner(kxos_frame::test_runner)] +#![test_runner(jinux_frame::test_runner)] #![reexport_test_harness_main = "test_main"] use bootloader::{entry_point, BootInfo}; -use kxos_frame::timer::Timer; +use jinux_frame::timer::Timer; extern crate alloc; use alloc::sync::Arc; use core::panic::PanicInfo; use core::time::Duration; -use kxos_frame::println; +use jinux_frame::println; static mut TICK: usize = 0; entry_point!(kernel_test_main); fn kernel_test_main(boot_info: &'static mut BootInfo) -> ! { - kxos_frame::init(boot_info); + jinux_frame::init(boot_info); test_main(); loop {} } #[panic_handler] fn panic(info: &PanicInfo) -> ! { - kxos_frame::test_panic_handler(info) + jinux_frame::test_panic_handler(info) } #[test_case] fn test_timer() { println!( - "If you want to pass this test, you may need to enable the interrupt in kxos_frame/lib.rs" + "If you want to pass this test, you may need to enable the interrupt in jinux_frame/lib.rs" ); println!("make sure the Timer irq number 32 handler won't panic"); unsafe { diff --git a/src/x86_64-custom.json b/src/x86_64-custom.json index 0c734cc6c..759749973 100644 --- a/src/x86_64-custom.json +++ b/src/x86_64-custom.json @@ -11,7 +11,7 @@ "linker": "rust-lld", "pre-link-args": { "ld.lld": [ - "-Tkxos-frame/src/linker.ld" + "-Tframework/jinux-frame/src/linker.ld" ] }, "panic-strategy": "abort",