mirror of
https://github.com/DragonOS-Community/DragonOS.git
synced 2025-06-25 14:13:23 +00:00
使得DragonOS kernel 能为riscv64编译通过(尚未能启动) (#457)
* 使得DragonOS kernel 能为riscv64编译通过(尚未能启动) * 修正了系统调用号声明不正确的问题,同时添加了编译配置文档
This commit is contained in:
@ -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)
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user