GnoCiYeH
f3b05a97ec
将tty输出接入串口 ( #555 )
2024-03-04 14:10:26 +08:00
LoGin
e28411791f
完成中断管理模块重构 ( #554 )
...
- 支持中断共享
- 把现有驱动程序移植到新的irq模块
- 使用`ProcessorId`标识处理器id
- 尚未实现threaded_irq
性能上,edge irq flow handler里面,对于锁的使用,可能有点问题。为了获取/修改common data还有其他几个结构体的状态,进行了多次加锁和放锁,导致性能降低。这是接下来需要优化的点。
2024-03-03 16:31:08 +08:00
GnoCiYeH
be60c929c8
修改tty几个bug ( #549 )
...
* 更改ioctl一处逻辑错误
* 删除不必要的impl
* 修改一处bug,并且加入tty的link,为pty做准备
* 修改一处因为vc的pos和x计算错误导致的溢出
2024-02-28 20:18:49 +08:00
GnoCiYeH
52da9a5937
完成与Linux兼容的Ntty ( #517 )
...
* 已经完成的功能:
- 写:printf能够正常在tty输出
- 读:与键盘驱动接上
- 信号: 能够正常通过ctrl向前台进程发送信号
* 支持目前的shell,改动printk使其与新版tty兼容。
* 删除原有tty文件夹,并更改新tty文件名
* 添加clear清屏程序
* 实现tty部分ioctl,更改部分问题
2024-02-26 15:27:19 +08:00
R0ronoa
9993c0fc61
添加i8042驱动 改正serio设备文件结构 ( #538 )
...
* 添加i8042驱动 改正serio设备文件结构
2024-02-26 15:03:13 +08:00
LoGin
196b75dc17
把irqdesc添加到sysfs ( #525 )
...
* 把irqdesc添加到sysfs
2024-02-19 00:56:58 +08:00
LoGin
3bc96fa4a9
添加irqdesc的抽象,并在系统初始化时创建irqdesc ( #522 )
...
* 添加irqdesc的抽象,并在系统初始化时创建irqdesc
2024-02-19 00:36:36 +08:00
LoGin
ce5850adbf
添加irqchip这一层的数据结构(尚未接入真实的芯片) ( #520 )
...
* 添加irqchip这一层的数据结构(尚未接入真实的芯片)
2024-02-18 20:41:41 +08:00
裕依2439
4ad52e57e6
添加socketpair ( #505 )
...
* 添加对socketpair系统调用的处理
---------
Co-authored-by: LoGin <longjin@DragonOS.org>
2024-02-07 18:06:15 +08:00
Luo Jia / Zhouqi Jiang
d14e28a8a9
riscv: 使用sbi-rt库完成SBI操作 ( #510 )
...
未来的其它SBI操作也将使用sbi-rt
Signed-off-by: Zhouqi Jiang <luojia@hust.edu.cn>
2024-02-07 11:38:15 +08:00
LoGin
5b59005f93
x86_64: 使用Rust重写内核初始化代码 ( #507 )
...
* x86_64: 使用Rust重写内核初始化代码
2024-02-04 15:46:24 +08:00
LoGin
453452cc02
初始化riscv的内存管理模块,并且设置保留内存 ( #506 )
2024-02-04 14:35:18 +08:00
LoGin
9284987850
riscv: 完成UEFI初始化,能正确设置memblock的信息 ( #501 )
...
* riscv: 完成UEFI初始化,能正确设置memblock的信息
* sbi增加reset功能
* 把虚拟CPU修改为sifive-u54,使qemu能更正确地模拟硬件行为
* 修复内存页面映射未设置“DIRTY”、”ACCESSED“、”GLOBAL“位,导致真机page fault的问题
2024-01-26 18:08:39 +08:00
R0ronoa
a381e482cb
实现Ps/2鼠标驱动 ( #500 )
...
实现Ps/2鼠标驱动
2024-01-24 19:17:22 +08:00
Jomo
8d72b68da9
实现内核日志系统 ( #489 )
...
* 实现写日志和读取日志,并且能够在用户态下执行dmesg命令查看日志
* 通过klogctl实现dmesg
* 改用ConstGenericRingBuffer作内核缓冲区
* 更改缓冲区容量
* 将能够输出到控制台的日志级别改为日志级别枚举类,使用SpinLock控制KMSG,使用枚举类定义SYSLOG_ACTION,将do_syslog系统调用接口放在syscall.rs
* fix warning
* 完善do_syslog注释
* 将KMSG接入kinfo、kdebug等
* fix warning
* 修复显示的秒数不正确,·以及无法通过CI的问题
2024-01-24 16:13:15 +08:00
裕依2439
d46c6d2794
修复tty的buf满时始终阻塞的问题 ( #493 )
...
* 修复tty的buf满时始终阻塞的问题
2024-01-23 23:36:52 +08:00
LoGin
7a29d4fcbc
riscv64: 映射uefi systemtable,并完善了riscv64页表填写的部分内容 ( #498 )
...
* 从fdt的chosen段获取几个需要的字段
* merge patch-early-ioremap
* feature: 增加early io remap的fixmap功能
允许在内存管理初始化之前,使用fixmap功能,映射一些物理内存,并记录.
* riscv64: 映射uefi systemtable,并完善了riscv64页表填写的部分内容
* 更新仓库网址
2024-01-21 15:38:12 +08:00
Chiichen
3e3c6316aa
fix: 修复了ps2和tty初始化顺序的错误 ( #497 )
...
* 修复了ps2和tty初始化顺序的错误
2024-01-21 01:38:45 +08:00
LoGin
c75ef4e212
添加early ioremap支持 ( #492 )
...
* 使用early io remap来映射早期的vesa缓冲区
2024-01-18 00:09:36 +08:00
R0ronoa
d8e29bffee
增加serio总线和相关trait ( #488 )
...
* 新增serio总线和相关trait
* 补充SerioDeviceManager和SerioDriverManager
2024-01-17 23:57:49 +08:00
LoGin
45626c859f
riscv: 解析dtb,获取可用内存空间并添加到memblock ( #486 )
2024-01-03 18:00:47 +08:00
LoGin
02343d0b5b
增加/dev/fb0,能够在用户程序读写帧缓冲区 ( #485 )
2024-01-02 14:16:10 +08:00
LoGin
e7071df6a4
把opengrok.ringotek.cn替换为code.dragonos.org.cn ( #484 )
2024-01-01 11:53:49 +08:00
LoGin
c566df451c
添加帧缓冲区抽象并实现vesafb的驱动 ( #483 )
...
- 添加bootparams对象
- 修正由于bus的driver、device强弱引用关系 不正确从而导致对象被释放的bug
- 添加vesafb的驱动
- 实现framebuffer抽象层
- 为通用帧缓冲区抽象实现sysfs的属性
- 修改设备号DeviceNumber的定义
- 仿照linux,添加initcall,并在第一个内核线程中,调用他们。
2024-01-01 11:46:51 +08:00
LoGin
0d6cf65aa1
Patch fix sched and net lockdep error ( #479 )
...
- fix: 修复调度器,软中断,定时器,网络子系统的部分锁的使用不符合锁依赖安全规范的问题
- fix: 修复创建pcb时内核栈爆栈的问题
- 把异常的trap gate改成intr gate
---------
Co-authored-by: GnoCiYeH <heyicong@dragonos.org>
2023-12-27 14:27:12 +08:00
LoGin
91e9d4ab55
实现unified-init库,支持收集初始化函数到一个数组,并统一初始化 ( #474 )
...
* 添加“统一初始化”的过程宏,并把SystemError独立成crate
* 使用unified-init来初始化fbmem
* 更新workflow,增加内核自动化静态测试
2023-12-25 23:12:27 +08:00
GnoCiYeH
406099704e
增加epoll机制 ( #455 )
...
* ## 增加epoll机制
- 增加epoll机制
- 添加事件等待队列,提升socket性能
- 优化poll,删除不能poll的文件系统中的poll方法
* 添加细节注释
* 修复文件关闭后epoll还持有对应描述符的文件弱引用的bug
* 将EPollEvent设计为POSIX标准
* 修改s到us转换的计算错误
2023-12-25 18:08:12 +08:00
LoGin
08a2ee4084
添加FrameBuffer的接口抽象&完善设备驱动模型的class相关代码 ( #472 )
...
* 添加FrameBuffer的接口抽象(参考Linux 6.1.9)
* feature: 完善设备驱动模型的class的抽象,并创建graphics class
* feature: 完善设备驱动模型中Device对class的处理,使得能够在class下注册设备
目前注册了fbcon设备,但是由于虚拟终端还没写,因此fbcon的到终端以及帧缓冲区的映射还没加上去.
2023-12-20 17:24:05 +08:00
LoGin
1a72a751b1
在riscv输出hello world ( #466 )
...
增加了以下内容:
- SBI驱动
- 把内核的rust工具链升级到2023-08-15版本
- 输出riscv的helloworld
- 设置内核是PIC的
2023-12-07 02:13:22 +08:00
LoGin
4fda81ce81
使得DragonOS kernel 能为riscv64编译通过(尚未能启动) ( #457 )
...
* 使得DragonOS kernel 能为riscv64编译通过(尚未能启动)
* 修正了系统调用号声明不正确的问题,同时添加了编译配置文档
2023-11-25 12:07:39 +08:00
Jomo
cc5feaf67b
bugfix: 修复因rsdp v1 v2版本问题,导致ACPI无法正常初始化的bug ( #454 )
...
bugfix: 修复因rsdp v1 v2版本问题,导致ACPI无法正常初始化的bug
2023-11-23 21:04:32 +08:00
LoGin
99dbf38d2e
bugfix: 当物理机具有多个memory area的时候,无法正确使用这些区域的问题.以及在内核代码处出现内存空洞而导致无法正常运行的问题. ( #448 )
...
* bugfix: 当物理机具有多个memory area的时候,无法正确使用这些区域的问题.以及在内核代码处出现内存空洞而导致无法正常运行的问题.
解决方案:
1. 分区域把空闲页添加到buddy
2. 将内核链接到16M的位置,以避免uefi带来的内存空洞.
这个值是因为我看到linux的救援内核也是在16M的地址,因此猜测厂商不会使用这块内存.
尽管uefi规范讲的是固件可以采用任何地址,内核需要使用内核重定位技术去避免遇到内存空洞,但我没有这么做.
2023-11-19 11:42:53 +08:00
LoGin
46e234aef6
使用cargo管理一些C文件的编译,并且移动部分汇编到arch目录 ( #447 )
...
* 使用cargo管理main.c的编译
* 使用build-scripts编译架构相关的c代码
* 删除elf.h
2023-11-17 21:25:15 +08:00
LoGin
0facf623d6
修正文件open和写入的错误 ( #429 )
...
1. 修正文件open的时候可能错误的把inode清空的问题(如果当前inode是mknod创建的)
2. 修正fat和block device中,对文件写入部分的错误问题
2023-11-09 00:10:34 +08:00
LoGin
7b32f5080f
增加内存分配日志监视器 ( #424 )
...
* 完成内存日志监视,并输出日志到文件
* 修复进程退出后,procfs查看进程status文件会崩溃的问题
* 修复signal唤醒进程的判断条件问题
2023-11-07 21:39:27 +08:00
LoGin
70a4e5550a
使用rust重写了apic的驱动 ( #425 )
...
* 使用rust重写了apic的驱动。
* 修正signal和调度器的部分加锁逻辑,增加回退策略。
* 把pcb的flags字段替换为无锁的
* 使用cargo管理apic的编译
* 删除makefile中指定PIC的变量
---------
Co-authored-by: Gou Ngai <ymd7823@outlook.com>
Co-authored-by: 櫻井桃華 <89176634+TihayaKousaka@users.noreply.github.com>
2023-11-07 20:32:06 +08:00
GnoCiYeH
1effcfe519
修复readdir以及读磁盘时buf传错问题 ( #422 )
...
* 修复readdir以及读磁盘时buf传错问题
* fix potential memory problem
---------
Co-authored-by: longjin <longjin@DragonOS.org>
2023-11-05 23:15:46 +08:00
GnoCiYeH
1603395155
支持syscall快速系统调用指令 ( #417 )
...
* 支持syscall快速系统调用指令
---------
Co-authored-by: LoGin <longjin@DragonOS.org>
2023-11-04 21:39:44 +08:00
GnoCiYeH
2f6f547ae0
Patch fix sched ( #419 )
...
1.解决waitqueue sleep的时候,由于preempt count不为0,导致sched失败,从而导致该waitqueue下一次wakeup时,会把pcb多次加入调度队列的bug
2.修复socket inode 的read和write方法里面没有使用no_preempt的问题
3. 修复cpu0的内核栈由于脏数据导致new_idle的时候set pcb报错的问题
---------
Co-authored-by: longjin <longjin@DragonOS.org>
2023-11-04 21:35:25 +08:00
LoGin
d470019b1e
patch add mini backtrace ( #416 )
...
* support rust panic backtrace
mini-backtrace has llvm's unwind cpp source to support backtrace/unwind.
as unwind/backtrace needs dynamically allocates memory, mini-backtrace
uses stack memory to capture fixed number of backtrace to avoid heap
allocation.
as unwind library needed, it needs to turn on eh_frame_hdr
* 修改忘了生成kernel.elf的问题
* 设置backtrace是默认的feature
---------
Co-authored-by: Yao Zhao <dragonlinux@gmail.com>
2023-11-01 22:12:19 +08:00
yuyi2439
8b3d1688da
把pci驱动的读取acpi mcfg的代码,调整为从新的acpi驱动来读取 ( #413 )
...
* 把pci驱动的读取acpi mcfg的代码,调整为从新的acpi驱动来读取
2023-11-01 21:11:55 +08:00
GnoCiYeH
971462be94
添加thread和futex机制 ( #411 )
...
* 初步实现clone系统调用
* 实现了线程,初步实现futex机制,添加了几个小的系统调用
* 更改pcb引用计数问题
* 解决死锁bug
---------
Co-authored-by: LoGin <longjin@DragonOS.org>
2023-11-01 20:55:57 +08:00
Wu Mianzhi
77799ccaac
完成e1000e驱动 ( #393 )
...
* 测试RESET
* 测试RESET
* 基于轮询的实现
* 规范化部分unsafe的使用
* 完成中断处理函数,同时去除了不必要的内存拷贝行为,准备编写napi机制
* 实现现有协议栈下的部分napi机制;修复了内存泄漏的问题;添加了一部分代码注释
* 去除部分无用代码
* 去除一些无用代码
* 适配新的驱动模型
* 完成msi中断测试
* 去除一些无用代码
* 格式化代码
* 增加了一些注释,提高代码可读性
* 去除无关文件
* 优化了读取mac地址的方式,提高可读性
2023-10-30 00:08:52 +08:00
LoGin
fbe6becd6d
添加rust重构版本的HPET驱动和tsc驱动,并使用HPET校准tsc频率和cpu总线频率 ( #412 )
...
* 添加rust重构版本的HPET驱动和tsc驱动,并使用HPET校准tsc频率和cpu总线频率
* 把hpet.c移动到arch文件夹下
2023-10-26 23:08:39 +08:00
GnoCiYeH
ad1d649edd
更新系统调用号 ( #410 )
...
* 更新系统调用号
* 更改DragonReach和relibc版本
* update
* update
* fix warning
---------
Co-authored-by: longjin <longjin@RinGoTek.cn>
2023-10-24 19:59:01 +08:00
Chiichen
3c82aa56d1
Signal refactor ( #402 )
...
* 初步完成对 signal_types 和 部分signal代码的初始化
* 重构了一部分架构相关代码进入 arch 中
* 基本修改完成,编译通过,后续补上系统调用
* signal基本完成,能实现 Sigaction 系统调用
* 增加了一组枚举抽象
* 进一步重构了一部分C风格的代码
* 继续重构了一部分C风格代码
* 继续完善了一部分逻辑
* 修改了部分代码逻辑
* 补充了 fork 中复制信号信息的逻辑
* 修复了 kallsysms 未转义引号的问题
* 修复了无法跳转到 sigreturn 的bug
* 调通了 signal
* 实现了 signal 架构抽象层的 trait
* 为信号提供了默认处理函数
* 基本完成了 signal 的大体逻辑
* 修复了 Sigreturn 的一个小错误,格式化
* 修复了一个编译器漏报错误
* 删除了多余的代码
* 修改测试程序为链接 relibc
* 修复了信号处理过程中浮点寄存器错误保存的问题
* 修复了一个结构体错误引起的无法在relibc下正确运行的错误
* 修复了链接 relibc 时无法正常从信号处理返回的 bug
* 修复了 signal 处理流程中 rsp 指针错误导致的浮点运算触发GP
* 修复了一个死锁问题,解决了默认处理函数无法进入调度导致的bug
* 修复了一些错误
* 修改了 relibc 依赖版本号
* 删除了多余的 imports
* 删除一些debug日志
* 删除内核 signal.h 文件
* 删除一个依赖项
* 删除了 binding 相关依赖项
2023-10-24 12:02:20 +08:00
LoGin
d7f5742a20
初步编写cpu信息获取的代码 ( #406 )
...
1. 启动时从acpi获取所有的cpu信息并存到SMP_BOOT_DATA
2. 注册cpu subsystem/bus到sysfs(暂时未添加内容)
todo:
1. build_cpu_map(在X86_64SmpManager中)
2. 实现cpu mask
3. 把cpu设备注册到sysfs
2023-10-23 21:40:39 +08:00
LoGin
7eda31b2f0
在Sysfs中引入ACPI Firmware ( #405 )
...
- bugfix: multiboot2启动的信息因为没及时转存导致后面无法从其中进行查询的bug
- feature: 把acpi表、acpi bus加入sysfs
2023-10-22 22:00:16 +08:00
LoGin
a03c4f9dee
设备驱动模型:完善platform bus相关内容。并注册串口到sysfs ( #403 )
...
* 完成初始化platform bus
* 删除旧的sysfs
* 把uart驱动移动到tty/serial文件夹下
* 完成将串口挂载到sysfs
* 修复vfs系统调用未能follow symlink的问题
* 修复shell未能正确获取pwd的问题
2023-10-20 22:11:33 +08:00
LoGin
06d5e24726
完善设备驱动模型,基于kset、kobj来维护对象之间的关系 ( #401 )
...
* 使用kobj和kset管理/sys文件夹下的对象
* 修改notifier,把action从u64换为泛型。
* 完善设备驱动模型,基于kset、kobj来维护对象之间的关系
2023-10-11 00:53:15 +08:00