I have made PCIe work. But limine somehow doesn’t map PCIe mmios. So I stil need an elegant way to map it manually.
Log in to leave a comment
I thought this project would be easy, because I have written many OS projects, and my goal is to make it run a simple shell and a file system. But turned out it was far more difficult than I expected. I was forced to learn about loongarch64 more deeply, and I finally learnt how to debug the kernel with rust-lldb. However, I’m proud to say that my OS might have the best loongarch64 support in all rust-written operating systems!
I have added exit syscall, and the bug of timer is made sure to be fixed. I just realized that the performance of software simulation is not that good, so using periodic mode isn’t very reasonable, because operations in the kernel requires a lot of time, so after entering user mode, it might immediately interrupt and exit from it.
Log in to leave a comment
Although the kernel can run 11 syscalls normally now, enabling interrupt in user mode is causing a great issue. This makes QEMU run really slowly, and I can’t have realized that it is indeed running if I didn’t print ip. I don’t understand what is happening, because the timer implementation for loongarch is QEMU is very similar to other timers for other platforms.
Log in to leave a comment
I’ve tried hard, but power off and reboot simply don’t work. After looking up in Linux’s source code, I learnt that in LoongArch, you are not supposed to use ACPI to shutdown the machine. Instead, you should just kill all the process, and then simply idle. But I don’t understand why reboot is not working. I even added instructions to write back caches manually.
Log in to leave a comment
Cara has a lexer now! This improves the stability of parser, and will allow us to create procedural macros!