使得DragonOS kernel 能为riscv64编译通过(尚未能启动) (#457)

* 使得DragonOS kernel 能为riscv64编译通过(尚未能启动)

* 修正了系统调用号声明不正确的问题,同时添加了编译配置文档
This commit is contained in:
LoGin
2023-11-25 12:07:39 +08:00
committed by GitHub
parent a1fd1cf1cb
commit 4fda81ce81
112 changed files with 2587 additions and 615 deletions

View File

@ -1,4 +1,10 @@
use crate::arch::mm::LockedFrameAllocator;
use alloc::vec::Vec;
use crate::{
arch::{mm::LockedFrameAllocator, rand::rand},
libs::rand::GRandFlags,
mm::allocator::page_frame::FrameAllocator,
};
use super::{user_access::UserBufferWriter, Syscall, SystemError};
@ -30,7 +36,7 @@ impl Syscall {
let mut writer = UserBufferWriter::new(info, core::mem::size_of::<SysInfo>(), true)?;
let mut sysinfo = SysInfo::default();
let mem = LockedFrameAllocator.get_usage();
let mem = unsafe { LockedFrameAllocator.usage() };
sysinfo.uptime = 0;
sysinfo.loads = [0; 3];
sysinfo.totalram = mem.total().bytes() as u64;
@ -54,4 +60,28 @@ impl Syscall {
kwarn!("SYS_UMASK has not yet been implemented\n");
return Ok(0o777);
}
/// ## 将随机字节填入buf
///
/// ### 该系统调用与linux不一致因为目前没有其他随机源
pub fn get_random(buf: *mut u8, len: usize, flags: GRandFlags) -> Result<usize, SystemError> {
if flags.bits() == (GRandFlags::GRND_INSECURE.bits() | GRandFlags::GRND_RANDOM.bits()) {
return Err(SystemError::EINVAL);
}
let mut writer = UserBufferWriter::new(buf, len, true)?;
let mut ret = Vec::new();
let mut count = 0;
while count < len {
let rand = rand();
for offset in 0..4 {
ret.push((rand >> offset * 2) as u8);
count += 1;
}
}
writer.copy_to_user(&ret, 0)?;
Ok(len)
}
}