Modernlibre API document
FORMAT: 1AHOST: https://api.modernlibre.com
ModernLibre APIData StructuresBaseResponse (object)
code: 200 (number) - 响应码
message: 成功 (string) - 响应消息
data: (object, optional) - 响应数据
SseEmitter (object)
id: abc123 (string) - SSE 连接的客户端 ID
status: connected (string) - SSE 连接状态
file (string)
description: file
format: binary
Book (object)
id: 123 (number) - 书本 ID
title: 书本标题 (string) - 书本标题
author: 作者 (string) - 作者
description: 书本描述 (string) - 书本描述
status: 0 (number) - 书本状态
rating: 4.5 (number) - ...
【DragonOS】命令行工具开发任务书
【任务书】用 rust 写个能在 DragonOS 上跑的简易命令行程序
【DragonOS】编译相关
PR #954 build: Remove DragonOS_GCCx86_64-elf-gcc 是一个交叉编译器,它是 GNU 编译器集合(GNU Compiler Collection,GCC)的一部分,用于为 x86_64-elf 目标平台编译代码。交叉编译器能够在一个平台上编译出另一个平台的可执行代码。在这种情况下,x86_64-elf-gcc 允许开发者在比如 x86-64 架构的机器上编译出能够在 ELF(Executable and Linkable Format)格式下运行的 x86_64 架构的代码,通常用于嵌入式系统开发或其他需要特定目标平台的场景。
x86_64-elf-gcc 通常用于操作系统开发,特别是当你需要为一个不同于宿主机的操作系统或硬件平台编译代码时。例如,如果你正在开发一个需要在 ARM 架构上运行的操作系统,但你的宿主机器是 x86_64 架构的,那么你可以使用 x86_64-elf-gcc 来编译你的操作系统内核和用户空间应用程序,生成 ARM 架构能够理解的二进制文件。
此外,x86_64-elf-gcc 可以安装在类 Unix 系统上,如 L ...
【Docs】Uevent 与 Netlink 的设计与实现
feat(Netlink & Uevent): add Uevent with Netlink已实现的功能
用户态 POSIX API Netlink 套接字,支持创建、绑定 Netlink 套接字,发送、接收 Netlink 消息
内核支持 Netlink 组播消息,发送到用户进程中订阅了该组播组的 Netlink 套接字
内核支持准备、发送 uevent 到用户态
支持 sysfs下的 uevent 文件读写,用户态写入 uevent 文件后,内核会发送 uevent 消息到用户态与 Linux 实现不同的
sk_buff 的实现,简化设计
NL_TABLE 的哈希链实现,不用 Linux 内部的 rhashtable,用 hashmap 替代目前没有实现的功能
内核接受并处理用户态发送的 netlink 消息(由于 uevent 通常不是用户主动发给内核的,而是由内核主动生成并发送给用户态的,故该流程暂未实现)
udev 守护进程,用于监听 uevent 事件,实现设备的自动配置
net namespace,用于隔离网络设备
rcu,Read-Copy-Update,一 ...
服务器持续集成部署中遇到的各种问题
静态编译解决Ubuntu18.04下node20.17.0的Glibc版本问题起因是我想要为俱乐部的官网项目仓库构建CI/CD工作流,以便于在每次有新的提交时自动执行构建检查并部署到服务器上,但是在实际操作中遇到了各种各样的问题,这里记录一下。
首先是,GitHub Actions 现在要求工作流的node环境版本会强制跑在 node20 版本之上,本来这样没有什么问题,用nvm一套安装就行了,但是问题就在于我们服务器的 Ubuntu 系统版本是18.04,如果直接 use 20.17.0的话,动态库Glibc版本不匹配,因为18.04的Glibc版本是2.27,而20.17.0的Glibc版本要求是2.28,所以这个问题就很尴尬了。众所周知,Glibc是一个系统级别的库,大部分的Linux发行版直接升级 Glibc 都会导致系统不稳定,而另一方面,服务器刚刚重装过系统,如果硬要升级系统到20.04,又要考虑机器的性能,时间成本等问题,所以只能从 node 入手。
而一般来说,安装node有四种方式:
最简单粗暴的就是通过包管理器直接安装:1sudo apt install node ...
【DragonOS】chown系统调用
需要注意的地方UserBufferReader需要使用UserbufferReader对来自用户态的指针进行校验,然后通过UserBufferReader进行读操作,否则不安全。
在验证地址安全性之前,不允许访问用户内存。应该是userbuffer的功能你还没理解。如果不校验的话,要是用户传一个内核地址进来,那就会造成系统崩溃之类的问题了。
userbuffer的操作应该在filesystem/vfs下进行。
chown、lchown 和 fchown 是 Linux 系统中用于更改文件或目录所有权的命令。
chown (change owner): 这个命令用于更改指定文件或目录的用户所有权(所有者)和/或组所有权(组)。用户可以是用户名或者用户 ID,组可以是组名或者组 ID。如果不指定组,则只更改所有者。命令的基本语法如下:
1chown [OPTION]... [OWNER][:[GROUP]] FILE...
其中,OWNER 是新的文件所有者,GROUP 是新的文件组,而 FILE... 是一个或多个文件或目录的列表。chown 命令可以递归地更改目录及其内容的所有者(使 ...
【DragonOS】PCI总线子系统
PCI总线,全称为Peripheral Component Interconnect,即外围组件互连,是一种计算机总线的标准接口,用于连接计算机主板和外围设备,如显卡、网卡、声卡等。PCI总线由Intel公司提出,并由PCI Special Interest Group (PCISIG) 负责制定相关规范。
PCI总线的主要特点包括:
高带宽:PCI总线支持32位或64位的数据传输,工作频率为33MHz,最大数据传输率可达132MB/s(32位)或264MB/s(64位)。
独立于CPU:PCI总线不依赖于特定的处理器,支持多种处理器架构。
并行操作能力:PCI总线允许多个设备并行操作,提高了数据传输效率。
即插即用:PCI设备支持即插即用,方便用户使用。
中断共享:PCI总线支持中断共享,允许多个设备共享同一中断资源。
PCI总线的架构包括HOST主桥、PCI插槽、PCI设备和PCI桥接器。HOST主桥负责连接CPU和内存总线与PCI总线,PCI插槽用于插入外部设备,PCI设备通过插槽与系统通信,PCI桥接器用于连接不同的PCI总线或其他总线。
PCI总线的工作原理涉及初始化、数 ...
引导加载程序
什么是引导加载程序?引导加载程序(Boot Loader)是计算机系统中的一个软件,它负责在计算机启动时加载操作系统内核,并将控制权交给内核。引导加载程序通常存储在启动设备的引导扇区(Boot Sector)中,如硬盘、固态硬盘、光盘等。它的主要功能包括初始化硬件、加载内核映像、设置内核运行环境等。
GRUB的一个重要特性就是灵活性;GRUB能够识别文件系统和内核可执行文件格式,因此你可以按照自己的喜好加载任意一个操作系统,而不必记录内核在磁盘上的物理位置。因此,你可以通过指定内核文件的名称以及内核所在的驱动器和分区来加载内核。
GRUD2GRUB得到了扩展以满足许多需求,但很快它就变得明显,其设计无法跟上对其所做的扩展,我们达到了这样的地步:如果不破坏现有功能,就很难进行任何进一步的更改。大约在2002年,Yoshinori K. Okuji开始开发PUPA(GNU GRUB的初步通用编程架构),旨在重新编写GRUB的核心,使其更干净、更安全、更健壮、更强大。PUPA最终被重新命名为GRUB 2,而原始版本的GRUB被重新命名为GRUB Legacy。
multiboot2Multi ...