LoGin
LoGin
# 描述 在Linux中,许多系统调用在信号到来时,会返回`-ERESTARTSYS`或者`-EINTR`,以便返回用户态处理信号。而目前DragonOS的许多系统调用没有正确处理这个问题,这就会导致某些进程kill不掉,或者是定时到了之后没能返回用户态。 ## 期望 分两步进行完善修复: 1. 首先找到这些系统调用,并且对于上述情况,返回`-EINTR`。由用户程序去处理系统调用的重启。 2. 实现系统调用重启机制,保存系统调用现场,并在处理完信号之后,由内核重启部分系统调用。 ## 如何查找这些系统调用? 这类系统调用在Linux中的重要特征是,会在被唤醒时,调用`signal_pending()`函数来检查当前进程是否有要处理的信号。 因此,可以在code.dragonos.org.cn里面,搜索`refs:signal_pending`。如果想搜网络的系统调用,那么就在path那一栏再添加一个`net`即可。 例子: https://code.dragonos.org.cn/search?project=linux-6.6.21&full=ERESTARTSYS&defs=&refs=&path=net+-drivers&hist=&type=&xrd=&nn=1&si=path&si=path&n=25 ## 可能存在问题的系统调用 **欢迎在本issue下面补充,我会把它更新到这里~** - [ ] [sys_connect] 在[tcp的发起connect处],应当添加信号处理逻辑,返回`-ERESTARTSYS`,并在外层替换为`-EINTR`。否则,如果connect一直在进行的话,kill不掉这个进程。 - [x] tcp socket的`read`方法 - [...
# 需求 通过内核启动时传入的一些参数,来控制启用/不启用某些功能,或者是控制内核的某些行为。这在linux kernel的模块中被广泛使用。 - 支持x86_64(在grub2下)和riscv64的启动命令行参数 - 具有参数的解析器,并且利用unified-init机制,实现类似linux的这种功能(用来定义启动参数) https://code.dragonos.org.cn/xref/linux-6.6.21/init/do_mounts.c#42 - 能够在/proc/cmdline下查看完整的启动参数 # SIG 该开发任务属于 SIG-Main 管理。 https://community.dragonos.org/sigs/sig-main/
# 需求 文件锁是一种很常见的进程间同步手段,如果不支持该功能,可能影响某些程序的正常运行。 参考: - https://man7.org/linux/man-pages/man2/flock.2.html - https://www.cnblogs.com/wjoyxt/p/11010663.html # SIG 该开发任务属于 SIG-Main 管理。 https://community.dragonos.org/sigs/sig-main/
## 目前的问题 目前使用mini-backtrace进行内核栈回溯。 1. 由于mini-backtrace不支持riscv64,因此在riscv下,我们暂时无法traceback。 2. 内核栈回溯所需的符号表是使用C代码生成的,且大小比较大。 3. 无法进行栈帧展开以释放资源。 ## 需求 1. 要实现的新的traceback机制,需要使用纯rust进行编写 2. 支持x86_64和riscv 3. 要适当的压缩符号表 4. 要支持栈帧展开(可作为后续pr引入) 具体实现感觉可以引入rust官方的backtrace相关的库。
为了能够在Ci CD系统内,对dragon OS运行自动化测试,需要打包一个dragon OS的开发环境的容器镜像。 要求: 1. 编写docker file,能够一键的构建环境 2. 这个环境里面的用户必须不是root用户 3. 容器要以非root权限以及非privilege权限启动。 4. 要能够在容器内完成make run-vnc的全流程
在sysfs中实现uevent的逻辑,并在设备驱动模型中,发送通用的uevent. 然后用户测试程序能够通过epoll感知到这些uevent,并输出。
## 需求 目前,dragonos的大部分log是使用`kdebug!`、`kinfo!`等宏来打印的。但是这样无法在依赖库中打印日志。 因此,在pr https://github.com/DragonOS-Community/DragonOS/pull/761 中,添加了`CustomLogger`,使得能够打印依赖库中的日志。 目前需要: 1. [x] 把新的logger接入kmsg机制 2. [x] 把旧的kdebug等宏,改为使用rust的log库。 3. [ ] 添加模块相关的日志抽象,使得能够针对特定模块调整日志级别