Skip to content

Commit 73fc87e

Browse files
committed
feat: support new polyhal
1 parent 7525ad4 commit 73fc87e

24 files changed

+99
-78
lines changed

.gitignore

+2-1
Original file line numberDiff line numberDiff line change
@@ -10,4 +10,5 @@ packets.pcap
1010
kernel/*.lds
1111
qemu.log
1212
kernel/src/drivers.rs
13-
graph.png
13+
graph.png
14+
tools/iso/example

.vscode/settings.json

+3-10
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,5 @@
11
{
2-
"rust-analyzer.checkOnSave.allTargets": false,
3-
"rust-analyzer.checkOnSave.extraArgs": [
4-
// "--target",
5-
// "riscv64imac-unknown-none-elf"
6-
// "x86_64-unknown-none"
7-
],
8-
"files.associations": {
9-
"*.in": "cpp",
10-
"fcntl.h": "c"
11-
}
2+
"rust-analyzer.check.allTargets": false,
3+
"rust-analyzer.check.extraArgs": [],
4+
"rust-analyzer.procMacro.enable": true
125
}

Cargo.lock

+16-13
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Makefile

+10-2
Original file line numberDiff line numberDiff line change
@@ -93,7 +93,7 @@ ifeq ($(ROOT_FS), fat32)
9393
sudo mount $(FS_IMG) mount/ -o uid=1000,gid=1000
9494
sudo rm -rf mount/*
9595
else ifeq ($(ROOT_FS), ext4_rs)
96-
mkfs.ext4 $(FS_IMG)
96+
mkfs.ext4 -b 4096 $(FS_IMG)
9797
mkdir mount/ -p
9898
sudo mount $(FS_IMG) mount/
9999
else
@@ -161,4 +161,12 @@ gdb:
161161
addr2line:
162162
addr2line -sfipe $(KERNEL_ELF) | rustfilt
163163

164-
.PHONY: all run build clean gdb justbuild
164+
165+
iso: build
166+
cp $(KERNEL_ELF) tools/iso/example
167+
grub-mkrescue -o bootable.iso tools/iso
168+
169+
boot-iso: iso
170+
qemu-system-x86_64 -cdrom bootable.iso -serial stdio
171+
172+
.PHONY: all run build clean gdb justbuild iso boot-iso

byteos.yaml

+6-1
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,8 @@ global:
33
configs:
44
board: "qemu"
55
# Available are fat32, ext4 and ext4_rs.
6-
root_fs: "fat32"
6+
# root_fs: "fat32"
7+
root_fs: "ext4_rs"
78
env:
89
HEAP_SIZE: "0x0180_0000"
910
MOUNT_IMG_PATH: "mount.img"
@@ -22,6 +23,10 @@ bin:
2223
target: "x86_64-unknown-none"
2324
configs:
2425
driver: "kvirtio,kgoldfish-rtc,ns16550a"
26+
x86_64-generic:
27+
target: "x86_64-unknown-none"
28+
configs:
29+
driver: "kramdisk,kgoldfish-rtc,ns16550a"
2530
aarch64-qemu:
2631
target: "aarch64-unknown-none-softfloat"
2732
configs:

kernel/Cargo.toml

+1-1
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ logging = { git = "https://github.com/Byte-OS/logging.git", features = []}
1919
log = "0.4"
2020
devices = { git = "https://github.com/Byte-OS/devices.git" }
2121
hal = { git = "https://github.com/Byte-OS/hal.git" }
22-
polyhal = { git = "https://github.com/Byte-OS/polyhal.git" }
22+
polyhal = { git = "https://github.com/Byte-OS/polyhal.git", features = ["trap"]}
2323
fs = { git = "https://github.com/Byte-OS/fs.git" }
2424
fdt = "0.1.5"
2525
executor = { git = "https://github.com/Byte-OS/executor.git" }

kernel/linker.lds.S

+1-16
Original file line numberDiff line numberDiff line change
@@ -38,23 +38,8 @@ SECTIONS
3838
*(.sigtrx .sigtrx.*)
3939
}
4040

41-
_load_end = .;
42-
43-
. = ALIGN(4K);
44-
_percpu_start = .;
45-
.percpu 0x0 : AT(_percpu_start) {
46-
_percpu_load_start = .;
47-
*(.percpu .percpu.*)
48-
_percpu_load_end = .;
49-
. = ALIGN(64);
50-
_percpu_size_aligned = .;
51-
52-
. = _percpu_load_start + _percpu_size_aligned * %SMP%;
53-
}
54-
. = _percpu_start + SIZEOF(.percpu);
55-
_percpu_end = .;
56-
5741
.bss ALIGN(4K): {
42+
_load_end = .;
5843
*(.bss.stack)
5944
_sbss = .;
6045
*(.bss .bss.*)

kernel/src/main.rs

+9-5
Original file line numberDiff line numberDiff line change
@@ -31,12 +31,14 @@ mod user;
3131

3232
use core::sync::atomic::{AtomicBool, Ordering};
3333

34-
use devices::{self, get_int_device};
34+
use devices::{self, get_int_device, VIRT_ADDR_START};
3535
use executor::current_task;
3636
use frame_allocator::{self, frame_alloc_persist, frame_unalloc};
3737
use polyhal::addr::{PhysPage, VirtPage};
38+
use polyhal::common::{get_fdt, get_mem_areas, PageAlloc};
3839
use polyhal::irq::IRQ;
39-
use polyhal::{get_mem_areas, PageAlloc, TrapFrame, TrapFrameArgs, TrapType, VIRT_ADDR_START};
40+
use polyhal::trap::TrapType;
41+
use polyhal::trapframe::{TrapFrame, TrapFrameArgs};
4042
use tasks::UserTask;
4143
use user::user_cow_int;
4244
use vfscore::OpenFlags;
@@ -155,7 +157,7 @@ fn main(hart_id: usize) {
155157
// initialize logging module
156158
logging::init(option_env!("LOG"));
157159

158-
polyhal::init(&PageAllocImpl);
160+
polyhal::common::init(&PageAllocImpl);
159161
get_mem_areas().into_iter().for_each(|(start, size)| {
160162
info!("memory area: {:#x} - {:#x}", start, start + size);
161163
frame_allocator::add_frame_map(start, start + size);
@@ -170,7 +172,7 @@ fn main(hart_id: usize) {
170172

171173
devices::prepare_drivers();
172174

173-
if let Some(fdt) = polyhal::get_fdt() {
175+
if let Some(fdt) = get_fdt() {
174176
for node in fdt.all_nodes() {
175177
devices::try_to_add_device(&node);
176178
}
@@ -179,7 +181,8 @@ fn main(hart_id: usize) {
179181
// get devices and init
180182
devices::regist_devices_irq();
181183

182-
polyhal::instruction::Instruction::ebreak();
184+
// TODO: test ebreak
185+
// Instruction::ebreak();
183186

184187
// initialize filesystem
185188
fs::init();
@@ -221,6 +224,7 @@ fn main(hart_id: usize) {
221224

222225
// init kernel threads and async executor
223226
tasks::init();
227+
log::info!("run tasks");
224228
// loop { arch::wfi() }
225229
tasks::run_tasks();
226230

kernel/src/panic.rs

+8-2
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,13 @@
1-
use polyhal::{hart_id, shutdown};
21
// use backtrace::backtrace;
32
use core::panic::PanicInfo;
43

4+
use polyhal::instruction::Instruction;
5+
6+
#[inline]
7+
fn hart_id() -> usize {
8+
0
9+
}
10+
511
// 程序遇到错误
612
#[panic_handler]
713
fn panic_handler(info: &PanicInfo) -> ! {
@@ -21,5 +27,5 @@ fn panic_handler(info: &PanicInfo) -> ! {
2127
// backtrace();
2228
println!("!TEST FINISH!");
2329
// loop {}
24-
shutdown()
30+
Instruction::shutdown()
2531
}

kernel/src/socket.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ use core::{cmp, net::SocketAddrV4};
33
use alloc::{sync::Arc, vec::Vec};
44
use fs::INodeInterface;
55
use lose_net_stack::net_trait::SocketInterface;
6-
use polyhal::debug::DebugConsole;
6+
use polyhal::debug_console::DebugConsole;
77
use sync::Mutex;
88
use vfscore::{Metadata, PollEvent, VfsResult};
99

kernel/src/syscall/consts.rs

+2-2
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,8 @@ use fs::VfsError;
1010
use hal::TimeVal;
1111
use num_derive::FromPrimitive;
1212
use polyhal::addr::VirtAddr;
13-
use polyhal::pagetable::MappingFlags;
14-
use polyhal::TrapFrame;
13+
use polyhal::trapframe::TrapFrame;
14+
use polyhal::MappingFlags;
1515
use signal::SigProcMask;
1616

1717
#[repr(i32)]

kernel/src/syscall/mm.rs

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
11
use core::ops::Add;
22

3+
use devices::PAGE_SIZE;
34
use frame_allocator::ceil_div;
45
use log::debug;
56
use polyhal::addr::{VirtAddr, VirtPage};
6-
use polyhal::PAGE_SIZE;
7-
use polyhal::USER_VADDR_END;
7+
use polyhal::pagetable::USER_VADDR_END;
88

99
use crate::syscall::consts::from_vfs;
1010
use crate::syscall::consts::MSyncFlags;

kernel/src/syscall/shm.rs

+2-2
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,10 @@ use core::ops::Add;
22

33
use crate::tasks::{MapedSharedMemory, SharedMemory, SHARED_MEMORY};
44
use alloc::{sync::Arc, vec::Vec};
5+
use devices::PAGE_SIZE;
56
use frame_allocator::{ceil_div, frame_alloc_much, FrameTracker};
67
use log::debug;
7-
use polyhal::addr::{VirtAddr, VirtPage};
8-
use polyhal::{pagetable::MappingFlags, PAGE_SIZE};
8+
use polyhal::{addr::{VirtAddr, VirtPage}, MappingFlags};
99

1010
use crate::user::UserTaskContainer;
1111

kernel/src/syscall/sys.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -150,7 +150,7 @@ impl UserTaskContainer {
150150
pub async fn sys_arch_prctl(&self, code: usize, addr: usize) -> SysResult {
151151
use crate::syscall::consts::{ArchPrctlCode, LinuxError};
152152
use num_traits::FromPrimitive;
153-
use polyhal::TrapFrameArgs;
153+
use polyhal::trapframe::TrapFrameArgs;
154154

155155
let arch_prctl_code = FromPrimitive::from_usize(code).ok_or(LinuxError::EINVAL)?;
156156
debug!(

kernel/src/syscall/task.rs

+2-1
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,8 @@ use alloc::{
1717
{boxed::Box, sync::Arc},
1818
};
1919
use async_recursion::async_recursion;
20+
use devices::PAGE_SIZE;
21+
use polyhal::{trapframe::TrapFrameArgs, MappingFlags, Time, VirtPage};
2022
use core::cmp;
2123
use executor::{select, thread, tid2task, yield_now, AsyncTask};
2224
use frame_allocator::{ceil_div, frame_alloc_much, FrameTracker};
@@ -25,7 +27,6 @@ use fs::TimeSpec;
2527
use hal::{current_nsec, TimeVal};
2628
use log::{debug, warn};
2729
use num_traits::FromPrimitive;
28-
use polyhal::{addr::VirtPage, pagetable::MappingFlags, time::Time, TrapFrameArgs, PAGE_SIZE};
2930
use signal::SignalFlags;
3031
use sync::Mutex;
3132
use vfscore::OpenFlags;

kernel/src/tasks/elf.rs

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
use alloc::{collections::BTreeMap, string::String, sync::Arc, vec::Vec};
2+
use devices::PAGE_SIZE;
23
use executor::AsyncTask;
34
use log::warn;
4-
use polyhal::addr::VirtPage;
5-
use polyhal::{TrapFrame, TrapFrameArgs, PAGE_SIZE};
5+
use polyhal::{addr::VirtPage, trapframe::{TrapFrame, TrapFrameArgs}};
66
use xmas_elf::{
77
program::Type,
88
sections::SectionData,

kernel/src/tasks/initproc.rs

+2-2
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ use fs::{
1212
};
1313
use log::debug;
1414
use logging::get_char;
15-
use polyhal::{debug::DebugConsole, hart_id, shutdown};
15+
use polyhal::{debug_console::DebugConsole, instruction::Instruction};
1616
use vfscore::INodeInterface;
1717

1818
use crate::tasks::add_user_task;
@@ -407,6 +407,6 @@ pub async fn initproc() {
407407
})
408408
.is_none()
409409
{
410-
shutdown();
410+
Instruction::shutdown();
411411
}
412412
}

kernel/src/tasks/memset.rs

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,13 @@
11
use alloc::{sync::Arc, vec::Vec};
2+
use devices::PAGE_SIZE;
23
use core::{
34
cmp::min,
45
fmt::Debug,
56
ops::{Deref, DerefMut},
67
};
78
use frame_allocator::FrameTracker;
89
use fs::File;
9-
use polyhal::addr::VirtPage;
10-
use polyhal::{pagetable::PageTable, PAGE_SIZE};
10+
use polyhal::{addr::VirtPage, PageTable};
1111

1212
/// Memory set for storing the memory and its map relation.
1313
#[derive(Debug)]

kernel/src/tasks/mod.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ use alloc::{sync::Arc, vec::Vec};
44
use devices::get_net_device;
55
use executor::{current_task, thread, yield_now, AsyncTask, TaskId, DEFAULT_EXECUTOR};
66
use hal::{ITimerVal, TimeVal};
7-
use polyhal::get_cpu_num;
7+
use polyhal::common::get_cpu_num;
88

99
use crate::syscall::{exec_with_process, NET_SERVER};
1010
use crate::user::entry::user_entry;

0 commit comments

Comments
 (0)