Browse Source

feat(mm): 添加mincore系统调用,返回ENOSYS (#1241)

* feat(mm): 添加mincore系统调用,返回ENOSYS

添加sys_mincore,使其返回ENOSYS

Signed-off-by: longjin <longjin@DragonOS.org>

* feat: 新增grep_bin_ubuntu2404配置文件

添加grep_bin_ubuntu2404.toml配置文件,用于安装为ubuntu2404预构建的grep工具

Signed-off-by: longjin <longjin@DragonOS.org>

* feat: 实现DevPtsFSInode的as_any_ref方法并添加findutils和sed配置

- 实现LockedDevPtsFSInode的as_any_ref方法返回self
- 新增findutils_bin_ubuntu2404.toml配置文件
- 新增sed_bin_ubuntu2404.toml配置文件

Signed-off-by: longjin <longjin@DragonOS.org>

---------

Signed-off-by: longjin <longjin@DragonOS.org>
LoGin 3 weeks ago
parent
commit
4407984044

+ 1 - 1
kernel/src/filesystem/devpts/mod.rs

@@ -189,7 +189,7 @@ impl IndexNode for LockedDevPtsFSInode {
     }
     }
 
 
     fn as_any_ref(&self) -> &dyn core::any::Any {
     fn as_any_ref(&self) -> &dyn core::any::Any {
-        todo!()
+        self
     }
     }
 
 
     fn list(&self) -> Result<alloc::vec::Vec<alloc::string::String>, system_error::SystemError> {
     fn list(&self) -> Result<alloc::vec::Vec<alloc::string::String>, system_error::SystemError> {

+ 1 - 0
kernel/src/mm/syscall/mod.rs

@@ -7,6 +7,7 @@ use super::{allocator::page_frame::PageFrameCount, MsFlags, VmFlags};
 
 
 mod sys_brk;
 mod sys_brk;
 mod sys_madvise;
 mod sys_madvise;
+mod sys_mincore;
 mod sys_mmap;
 mod sys_mmap;
 mod sys_mprotect;
 mod sys_mprotect;
 mod sys_mremap;
 mod sys_mremap;

+ 47 - 0
kernel/src/mm/syscall/sys_mincore.rs

@@ -0,0 +1,47 @@
+use crate::arch::interrupt::TrapFrame;
+use crate::arch::syscall::nr::SYS_MINCORE;
+use crate::syscall::table::{FormattedSyscallParam, Syscall};
+use system_error::SystemError;
+
+use alloc::vec::Vec;
+
+pub struct SysMincoreHandle;
+
+impl Syscall for SysMincoreHandle {
+    fn num_args(&self) -> usize {
+        3
+    }
+
+    /// ## mincore系统调用
+    ///
+    /// todo: 参考 https://code.dragonos.org.cn/xref/linux-6.6.21/mm/mincore.c#232 实现mincore
+    fn handle(&self, _args: &[usize], _frame: &mut TrapFrame) -> Result<usize, SystemError> {
+        return Err(SystemError::ENOSYS);
+    }
+
+    /// Formats the syscall arguments for display/debugging purposes.
+    fn entry_format(&self, args: &[usize]) -> Vec<FormattedSyscallParam> {
+        vec![
+            FormattedSyscallParam::new("start_vaddr", format!("{:#x}", Self::start_vaddr(args))),
+            FormattedSyscallParam::new("len", format!("{:#x}", Self::len(args))),
+            FormattedSyscallParam::new("vec", format!("{:#x}", Self::vec(args))),
+        ]
+    }
+}
+
+impl SysMincoreHandle {
+    /// Extracts the start_vaddr argument from syscall parameters.
+    fn start_vaddr(args: &[usize]) -> usize {
+        args[0]
+    }
+    /// Extracts the len argument from syscall parameters.
+    fn len(args: &[usize]) -> usize {
+        args[1]
+    }
+    /// Extracts the
+    fn vec(args: &[usize]) -> usize {
+        args[2]
+    }
+}
+
+syscall_table_macros::declare_syscall!(SYS_MINCORE, SysMincoreHandle);

+ 43 - 0
user/dadk/config/findutils_bin_ubuntu2404.toml

@@ -0,0 +1,43 @@
+# 用户程序名称
+name = "findutils_bin_ubuntu2404"
+# 版本号
+version = "4.9.0"
+# 用户程序描述信息
+description = "findutils for Ubuntu 24.04"
+# (可选)默认: false 是否只构建一次,如果为true,DADK会在构建成功后,将构建结果缓存起来,下次构建时,直接使用缓存的构建结果
+build-once = false
+#  (可选) 默认: false 是否只安装一次,如果为true,DADK会在安装成功后,不再重复安装
+install-once = false
+# 目标架构
+# 可选值:"x86_64", "aarch64", "riscv64", "loongarch64"
+target-arch = ["x86_64"]
+# 任务源
+[task-source]
+# 构建类型
+# 可选值:"build-from-source", "install-from-prebuilt"
+type = "install-from-prebuilt"
+# 构建来源
+# "build_from_source" 可选值:"git", "local", "archive"
+# "install_from_prebuilt" 可选值:"local", "archive"
+source = "archive"
+# 路径或URL
+source-path = "https://mirrors.dragonos.org.cn/pub/third_party/gnu/findutils/findutils-ubuntu2404-202507281646-0eb405d10118dc6afb54c7df7ba42cb9.tar.xz"
+archive-rootdir = "sysroot/"
+
+[build]
+
+# 安装相关信息
+[install]
+# (可选)安装到DragonOS的路径
+in-dragonos-path = "/"
+# 清除相关信息
+[clean]
+# (可选)清除命令
+clean-command = ""
+# 依赖项
+[[depends]]
+name = "glibc_bin_ubuntu2404"
+version = "2.39"
+
+# (可选)环境变量
+# 注意:如果没有环境变量,忽略此项,不允许只留一个[[envs]]

+ 43 - 0
user/dadk/config/grep_bin_ubuntu2404.toml

@@ -0,0 +1,43 @@
+# 用户程序名称
+name = "grep_bin_ubuntu2404"
+# 版本号
+version = "3.11"
+# 用户程序描述信息
+description = "grep for Ubuntu 24.04"
+# (可选)默认: false 是否只构建一次,如果为true,DADK会在构建成功后,将构建结果缓存起来,下次构建时,直接使用缓存的构建结果
+build-once = false
+#  (可选) 默认: false 是否只安装一次,如果为true,DADK会在安装成功后,不再重复安装
+install-once = false
+# 目标架构
+# 可选值:"x86_64", "aarch64", "riscv64", "loongarch64"
+target-arch = ["x86_64"]
+# 任务源
+[task-source]
+# 构建类型
+# 可选值:"build-from-source", "install-from-prebuilt"
+type = "install-from-prebuilt"
+# 构建来源
+# "build_from_source" 可选值:"git", "local", "archive"
+# "install_from_prebuilt" 可选值:"local", "archive"
+source = "archive"
+# 路径或URL
+source-path = "https://mirrors.dragonos.org.cn/pub/third_party/gnu/grep/grep-ubuntu2404-202507281617-76ec8449aa231a288cae9d89a1cdaf02.tar.xz"
+archive-rootdir = "sysroot/"
+
+[build]
+
+# 安装相关信息
+[install]
+# (可选)安装到DragonOS的路径
+in-dragonos-path = "/"
+# 清除相关信息
+[clean]
+# (可选)清除命令
+clean-command = ""
+# 依赖项
+[[depends]]
+name = "glibc_bin_ubuntu2404"
+version = "2.39"
+
+# (可选)环境变量
+# 注意:如果没有环境变量,忽略此项,不允许只留一个[[envs]]

+ 43 - 0
user/dadk/config/sed_bin_ubuntu2404.toml

@@ -0,0 +1,43 @@
+# 用户程序名称
+name = "sed_bin_ubuntu2404"
+# 版本号
+version = "4.9"
+# 用户程序描述信息
+description = "sed for Ubuntu 24.04"
+# (可选)默认: false 是否只构建一次,如果为true,DADK会在构建成功后,将构建结果缓存起来,下次构建时,直接使用缓存的构建结果
+build-once = false
+#  (可选) 默认: false 是否只安装一次,如果为true,DADK会在安装成功后,不再重复安装
+install-once = false
+# 目标架构
+# 可选值:"x86_64", "aarch64", "riscv64", "loongarch64"
+target-arch = ["x86_64"]
+# 任务源
+[task-source]
+# 构建类型
+# 可选值:"build-from-source", "install-from-prebuilt"
+type = "install-from-prebuilt"
+# 构建来源
+# "build_from_source" 可选值:"git", "local", "archive"
+# "install_from_prebuilt" 可选值:"local", "archive"
+source = "archive"
+# 路径或URL
+source-path = "https://mirrors.dragonos.org.cn/pub/third_party/gnu/sed/sed-ubuntu2404-202507281635-1499ec1a44d2f0d6b787543d8d73637d.tar.xz"
+archive-rootdir = "sysroot/"
+
+[build]
+
+# 安装相关信息
+[install]
+# (可选)安装到DragonOS的路径
+in-dragonos-path = "/"
+# 清除相关信息
+[clean]
+# (可选)清除命令
+clean-command = ""
+# 依赖项
+[[depends]]
+name = "glibc_bin_ubuntu2404"
+version = "2.39"
+
+# (可选)环境变量
+# 注意:如果没有环境变量,忽略此项,不允许只留一个[[envs]]