mirror of
https://github.com/DragonOS-Community/DragonOS.git
synced 2025-06-18 08:06:32 +00:00
使用DragonReach启动shell,修改getdents (#391)
* 使用DragonReach启动shell,修改getdents * 更改关闭pipe时断言报错问题,以及DragonReach启动shell阶段版本 * 修改目录结构 * update * 解决小问题 * 调整dragon reach版本号 * 设置make clean的时候不清空应用程序的缓存。 指定relibc版本号 --------- Co-authored-by: longjin <longjin@RinGoTek.cn>
This commit is contained in:
@ -7,7 +7,7 @@ use crate::driver::pci::pci::{
|
||||
|
||||
use crate::driver::pci::pci_irq::{IrqCommonMsg, IrqMsg, IrqSpecificMsg, PciInterrupt, IRQ};
|
||||
use crate::include::bindings::bindings::pt_regs;
|
||||
use crate::kdebug;
|
||||
|
||||
use crate::libs::volatile::{
|
||||
volread, volwrite, ReadOnly, Volatile, VolatileReadable, VolatileWritable, WriteOnly,
|
||||
};
|
||||
|
@ -277,8 +277,6 @@ impl File {
|
||||
|
||||
self.offset += 1;
|
||||
dirent.d_ino = sub_inode.metadata().unwrap().inode_id.into() as u64;
|
||||
dirent.d_off = 0;
|
||||
dirent.d_reclen = 0;
|
||||
dirent.d_type = sub_inode.metadata().unwrap().file_type.get_file_type_num() as u8;
|
||||
// 根据posix的规定,dirent中的d_name是一个不定长的数组,因此需要unsafe来拷贝数据
|
||||
unsafe {
|
||||
@ -289,8 +287,13 @@ impl File {
|
||||
}
|
||||
|
||||
// 计算dirent结构体的大小
|
||||
return Ok((name_bytes.len() + ::core::mem::size_of::<Dirent>()
|
||||
- ::core::mem::size_of_val(&dirent.d_name)) as u64);
|
||||
let size = (name_bytes.len() + ::core::mem::size_of::<Dirent>()
|
||||
- ::core::mem::size_of_val(&dirent.d_name)) as u64;
|
||||
|
||||
dirent.d_reclen = size as u16;
|
||||
dirent.d_off += dirent.d_reclen as i64;
|
||||
|
||||
return Ok(size);
|
||||
}
|
||||
|
||||
pub fn inode(&self) -> Arc<dyn IndexNode> {
|
||||
|
@ -182,13 +182,13 @@ impl ProcessManager {
|
||||
let new_fd_table = current_pcb.basic().fd_table().unwrap().read().clone();
|
||||
let new_fd_table = Arc::new(RwLock::new(new_fd_table));
|
||||
new_pcb.basic_mut().set_fd_table(Some(new_fd_table));
|
||||
} else {
|
||||
// 如果共享文件描述符表,则直接拷贝指针
|
||||
new_pcb
|
||||
.basic_mut()
|
||||
.set_fd_table(current_pcb.basic().fd_table().clone());
|
||||
}
|
||||
|
||||
// 如果共享文件描述符表,则直接拷贝指针
|
||||
new_pcb
|
||||
.basic_mut()
|
||||
.set_fd_table(current_pcb.basic().fd_table().clone());
|
||||
|
||||
return Ok(());
|
||||
}
|
||||
|
||||
|
@ -36,9 +36,9 @@ pub fn initial_kernel_thread() -> i32 {
|
||||
|
||||
/// 切换到用户态
|
||||
fn switch_to_user() {
|
||||
let path = String::from("/bin/shell.elf");
|
||||
let argv = vec![String::from("/bin/shell.elf")];
|
||||
let envp = vec![String::from("PATH=/bin")];
|
||||
let path = String::from("/bin/DragonReach");
|
||||
let argv = vec![String::from("/bin/DragonReach")];
|
||||
let envp = vec![String::from("PATH=/")];
|
||||
|
||||
unsafe { arch_switch_to_user(path, argv, envp) };
|
||||
}
|
||||
|
Reference in New Issue
Block a user