首页
学习
活动
专区
工具
TVP
发布

龙进的专栏

专栏成员
350
文章
283632
阅读量
29
订阅数
关于修改DragonOS的时间子系统的update_walltime的想法
目前DragonOS的时间子系统,更新墙上时间其实是直接在时钟中断里面,调用update walltime,并且手动指定delta值来更新的。这导致了没法利用上时间子系统的校时相关的功能。并且,时间源并不一定是有时钟事件的。因此我最近在尝试把dragonos移植到云服务器的过程中,发现kvm-clock是没有时钟中断的,并且配置acpi pm timer的中断的教程/文档,我看了很久看不明白(后来是发现Linux的acpi_sci_ioapic_setup这个函数设置了acpi中断,但是目前dragonos里面实现它,难度还是有的)。
灯珑LoGin
2024-05-15
860
关于dragonos在riscv上的启动流程的概述
DragonStub是依托于uboot提供的efi环境来运行的,它基于linux efi stub,负责把dragonos内核加载到对应的位置。并把FDT传递给dragonos内核。它主要是使得dragonos内核的引导不依赖于具体板卡,不用把设备树编译到内核里面去。
灯珑LoGin
2024-05-02
950
解决openwrt路由器配置zerotier重启后设备id会变的问题
同时,vi /etc/config/zerotier, 在已有的网络配置那里,加:
灯珑LoGin
2024-04-07
2931
riscv:ra寄存器的设置与保存
今天在写DragonOS的进程切换代码的时候,对于ra寄存器的设置与保存有点疑惑,于是写这篇文章来分析一下。
灯珑LoGin
2024-04-01
1870
Linux的中断下半部机制的对比
 中断服务程序一般都是在中断请求关闭的条件下执行的,以避免嵌套而使中断控制复杂化。但是,中断是一个随机事件,它随时会到来,如果关中断的时间太长,CPU就不能及时响应其他的中断请求,从而造成中断的丢失。因此,Linux内核的目标就是尽可能快的处理完中断请求,尽其所能把更多的处理向后推迟。例如,假设一个数据块已经达到了网线,当中断控制器接受到这个中断请求信号时,Linux内核只是简单地标志数据到来了,然后让处理器恢复到它以前运行的状态,其余的处理稍后再进行(如把数据移入一个缓冲区,接受数据的进程就可以在缓冲区找到数据)。因此,内核把中断处理分为两部分:上半部(tophalf)和下半部(bottomhalf),上半部(就是中断服务程序)内核立即执行,而下半部(就是一些内核函数)留着稍后处理。
灯珑LoGin
2024-02-06
1860
汇编调试方式之:通过串口转义输出寄存器的值
前两天在调试DragonOS的riscv引导代码的时候,想在真机上获取寄存器的值,就找到了这篇帖子,非常有用,就把里面的代码提取出来,在此记录。
灯珑LoGin
2024-01-27
1250
内核调试黑魔法:对QEMU自身进行调试,从而定位DragonOS问题
与CPU、硬件打交道的时候,有时候看不出自己的代码或者系统出现了什么问题,这时候内核调试工具就显得尤为重要了。
灯珑LoGin
2024-01-27
6270
解决云服务器开机后,内存与实际不符的问题
最近因为搭建scutosc的论坛,买了一台新的腾讯云的2核4G的服务器,但是开机后发现htop命令显示内存只有3.3G:
灯珑LoGin
2024-01-22
4320
DragonOS的MMLog机制
当初在开发的时候,发现DragonOS存在一些内存泄漏的问题,但是不清楚到底哪里产生了泄漏,也不清楚内核的内存分配过程。为了定位内存泄漏的问题,以及观测一些可能存在的性能问题,就实现了这个MMLog的组件,把每一次内存分配和释放都打到日志里面去,同时希望能在Linux下面启动一个监视器,去监控DragonOS虚拟机内的内存分配情况。
灯珑LoGin
2024-01-19
1660
Linux显示缓冲区fb_fix_screeninfo结构体的smem_start和mmio_start的区别
发现它有smem_start和mmio_start两个字段。我刚开始看的时候就很疑惑:“帧缓冲区不就是MMIO的吗,这两个字段的区别在哪里?”
灯珑LoGin
2024-01-01
1240
Linux的Initcall机制之初始化函数被调用的时机
Linux的initcall是一种初始化调用的机制,它在Linux内核启动过程中用于执行一系列的初始化任务。initcall机制向Linux内核注册了多组回调函数,这些函数在系统初始化时按照预定的顺序被调用。initcall的主要目的是对设备、内核子系统等进行初始化,以确保系统能够正常运行。
灯珑LoGin
2023-12-30
1890
Unified-init:为DragonOS开发的模块统一初始化组件
由于DragonOS的驱动、模块变多了,如果每个模块的初始化都手动加个函数调用的话,对条件编译非常不友好。因此我使用Rust的procmacro开发了一个库,叫做unified-init,用于统一初始化内核的模块。
灯珑LoGin
2023-12-28
970
DragonBoot: 在Risc-V上,使用Rust编写Stage2 UEFI bootloader
由于RiscV和Rust都是比较新的两个东西,因此两个新的东西结合在一起就会发生很逆天的事情:Rust在Risc-V上不支持UEFI目标,同时Rust社区貌似没有什么issue讨论这个。
灯珑LoGin
2023-11-27
2700
解决wordpress的/wp-json/wp/v2/的问题
上回更新wp之后,站点编辑器进不去,f12看到访问/wp-json/wp/v2的时候404了。此错误可能是因为服务器尚未在使用Apache 的服务器上启用mod_rewrite。至于使用NGINX的服务器,NGINX不会像 Apache 那样有 mod_rewrite 。要解决此问题,只需要加下面的内容到nginx配置文件:
灯珑LoGin
2023-11-21
7920
为riscv64编译uboot和grub
首先需要安装交叉编译工具链,可以用apt安装riscv64的gcc编译工具链。我是自己编译了一个musl-gcc,下载:
灯珑LoGin
2023-11-20
3320
Fork进程后,是否与父进程共享stdio?
今天想到一个问题:如果我在代码里面,fork当前进程,然后两个进程都执行scanf(),那会发生什么?键盘输入的数据是定向到哪个进程呢?
灯珑LoGin
2023-10-18
1420
DragonOS新版地址映射管理及VMA机制设计
每个进程都有自己的UserMapper实例,用于管理自身的用户地址空间。在用户空间的映射,必须通过VMA来管理。
灯珑LoGin
2023-10-18
2140
Linux IO向量化:iovec与readv、writev系列函数
struct iovec定义了一个向量元素。通常,这个结构用作一个多元素的数组。对于每一个传输的元素,指针成员iov_base指向一个缓冲区,这个缓冲区是存放的是readv所接收的数据或是writev将要发送的数据。成员iov_len在各种情况下分别确定了接收的最大长度以及实际写入的长度。且iovec结构是用于scatter/gather IO的。readv和writev函数用于在一次函数调用中读、写多个非连续缓冲区。有时也将这两个函数称为散布读(scatter read)和聚集写(gather write)。 iovec结构体的定义如下:
灯珑LoGin
2023-10-18
1K0
Rust Arc指针类型转换:dyn转换为具体类型
在写代码的时候,经常通过dyn关键字+Arc指针来实现多态。但是,有时候会遇到这样一个需求:我们想获取具体类型的Arc指针。比如,结构体A实现了trait Base,想要把Arc<dyn Base>转换为Arc<A>.
灯珑LoGin
2023-10-18
4220
DragonOS网络子系统介绍
本文将对DragonOS网络子系统进行简要介绍。出于“快速实现功能”的考虑,DragonOS目前网络子系统基于Smoltcp协议栈进行开发,具体协议部分采用smoltcp的实现。计划在将来重构网络子系统时,采用独立开发的协议栈,以支持“服务器系统”的需求。
灯珑LoGin
2023-10-18
3550
点击加载更多
社区活动
【纪录片】中国数据库前世今生
穿越半个世纪,探寻中国数据库50年的发展历程
Python精品学习库
代码在线跑,知识轻松学
博客搬家 | 分享价值百万资源包
自行/邀约他人一键搬运博客,速成社区影响力并领取好礼
技术创作特训营·精选知识专栏
往期视频·千货材料·成员作品 最新动态
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档