前置要求及环境配置 被调试的主机安装待调试内核,称为target,另一台装有稳定的Linux内核,称为host。 target主板上带有原生com口,不能使用USB转接;需要一台USB转串口母线,连接target串口和host 本文使用的target架构为aarch64, 系统为openeuler,内核为Linux-5.10, host架构为x86-64, 系统为ubuntu 20.0...
一篇创建于2023.9.11,完成于2024.3.31,拖了大半年的文章 调试前的准备 编译qemu 在ubuntu中可以通过apt安装qemu-system,也可以从源码自行编译。在编译qemu-8.0时,可能遇到kvm Parameter 'type' expects a netdev backend type,原因是因为在编译时没有enable-slirp,而enab...
本文分析基于Linux-5.10.100,架构基于ARM64 V8.3,假设页表映射层级为4,即CONFIG_ARM64_PGTABLE_LEVELS=4,地址宽度为48,即CONFIG_ARM64_VA_BITS=48。 在Linux系统中,通过MMU进行虚实地址转换时,会依赖于TTBR1_EL1和TTBR0_EL0两个寄存器。其中TTBR1_EL1指向内核地址空间的页表基地...
内核中的全局函数指针大致可以分为两种:一种是全局变量本身是一个函数指针,另一种是全局结构体的某个子域是函数指针,例如: struct funcptr { void (*foo)(); }s; void (*fp)(void); 而对这些函数指针的调用,反映到IR上,通常为: fp(): store void ()* @indirect, void ()** @fp, ali...
迫于最近比较无聊,重操Leetcode旧业,顺带写一下题解。 题目描述 给定一个长度为 n 的整数数组 height 。有 n 条垂线,第 i 条线的两个端点是 (i, 0) 和 (i, height[i]) 。 找出其中的两条线,使得它们与 x 轴共同构成的容器可以容纳最多的水。 返回容器可以储存的最大水量。 说明:你不能倾斜容器。 示例: 输入:[1,8,6,2,...
内核模块签名机制 linux内核从3.7 开始加入模块签名检查机制, 校验签名是否与已编译的内核公钥匹配。目前只支持RSA X.509验证, 模块签名验证并非强制使用, 可在编译内核时配置是否开启。 CONFIG_MODULE_SIG: Module signature verification 开启该选项后,内核加载该模块时会对内核模块的签名进行检查。默认情况下,在加载没有签名或签...
6.824 Lab 3: Fault-tolerant Key/Value Service (mit.edu) 本实验要求在Lab2中实现的Raft的基础上构建一个key/value存储服务。 Part A: Key/value service without snapshots 首先实现不包含快照的key/value服务,每个kvserver与Raft peer一一对应。与...
Lab: Multithreading (mit.edu) Uthread: switching between threads 为用户态的线程系统设计并实现上下文切换机制,实现创建线程、在线程切换时保存和恢复寄存器的功能。 uthread.c中对线程的定义如下: struct thread { char stack[STACK_SIZE]; /* the th...
Lab: Copy-on-Write Fork for xv6 (mit.edu) Problem and Solution xv6中的fork系统调用将父进程的用户空间内存全部复制到子进程,而如果需要拷贝的内存数量比较大,拷贝过程会引起严重的开销问题。并且在子进程中,fork系统调用后通常紧跟着exec系统调用以修改进程影响,导致fork复制的内存被丢弃。如果父进程和子进程使...
Lab: xv6 lazy page allocation (mit.edu) Page-fault exceptions 当CPU无法将虚拟地址转换成物理地址时,生成一个page-fault excecption,称为缺页异常。RISC-V中存在三种类型的缺页异常:load(load指令)/store(store指令)/instruction(指令所在的虚拟地址无法转换成物...