设备树详解
1.设备树简介传统上,操作系统内核会直接编译进所有支持的硬件设备的驱动程序。但是,随着硬件设备的不断增多和变化,这种方法变得不够灵活。设备树的引入解决了这个问题。设备树将硬件的描述信息以一种结构化的方式存储在单独的文件中,然后在引导过程中由操作系统内核加载和解析。
设备树文件使用一种称为”Device Tree Source”(DTS)的语言编写,它是一种人类可读的文本格式。该文件描述了硬件设备的层次结构、寄存器地址、中断线路、DMA通道和其他相关属性。这些信息对于内核来说非常重要,因为它们允许内核正确地初始化和配置硬件设备。
设备树文件经过DTC编译后会生成一种称为”Device Tree Blob”(DTB)的二进制格式。DTB文件在引导过程中由引导加载程序(Bootloader)提供给内核。内核会解析DTB文件,根据其中的描述信息初始化硬件设备,并加载相应的驱动程序。
设备树的作用在于用来描述一个具体的硬件平台的硬件资源,如果没有设备树,当我有一个新的硬件平台时,在移植操作系统时需要去修改源码去适配这个具体的硬件平台。有了设备树之后,bootloader就能直接从设备树中获取硬件 ...
从源码构建Qemu
1.Qemu介绍QEMU(Quick Emulator)是一个开源的虚拟化软件,它可以模拟多个硬件平台,包括处理器和外设,从而允许在一个平台上运行多个不同的操作系统。QEMU可以运行在多个主机平台上,包括Linux、Windows、macOS等。
QEMU的主要功能是模拟一个完整的计算机系统,包括处理器、内存、存储器、网络接口等,它可以将客户操作系统(例如Linux、Windows等)当作应用程序运行在主机操作系统之上,从而实现虚拟化。QEMU还支持通过二进制代码转换的方式实现虚拟化加速,例如使用KVM(Kernel-based Virtual Machine)模块加速虚拟机的运行。
QEMU可以用于多种用途,包括:
系统仿真:可以模拟不同的处理器架构(如x86、ARM等)来运行和测试操作系统和应用程序,方便开发人员进行交叉平台开发和调试。
虚拟机:可以在一个物理机上运行多个虚拟机实例,每个虚拟机可以运行不同的操作系统,实现资源的隔离和共享,提供虚拟化环境。
可移植性:QEMU可以将一个操作系统或应用程序打包成一个虚拟机镜像,这个镜像可以在不同的平台上运行,提供了一种便携式的软件分发 ...
操作系统-3.实模式
1. X86cpu工作原理
程序计数器PC存储了下一条要运行的指定的地址,在x86cpu上,PC就是:cs:ip,控制单元读取ip寄存器中的地址后,将此地址送上地址总线,cpu由此得到了要执行的指令,然后将指令存入指令寄存器IR中。下一步指令译码器将此指令解码,解码后得到了操作数和操作码,于是操作控制器OC就给运算单元下令,运算单元就开始执行指令。ip寄存器的值被加上当前指令的大小,由此循环。
IA32的指令格式如下:
2. 实模式的寻址8086的地址总线是20位宽,意味着寻址范围为:2^20=1MB,但内部寄存器都是16位的,若采用单一寄存器来寻址只能访问:2^16=64KB空间。
为了解决16位寄存器不能寻址20位的问题,因此通过先把16位的段基址左移四位变成20位后,在加上段内偏移地址,这样就形成了20位地址,只要保证了段基址是20位的,偏移地址是多少位就不用关心了。
下面列举一下寻址实例:所有的利用寄存器寻址的方式,每个寄存器都有对应的段基址,寄存器的默认段基址见上一章
直接寻址(Direct addressing):
MOV AX, [0x1234]mov ax, [ ...
操作系统-2.X86寄存器详解
1.什么是寄存器寄存器是CPU内部用来存放数据的一些小型存储区域,用来暂时存放参与运算的数据和运算结果以及一些CPU运行需要的信息
x86架构CPU走的是复杂指令集(CISC) 路线,提供了丰富的指令来实现强大的功能,与此同时也提供了大量寄存器来辅助功能实现。寄存器分为两类,一类对程序员不可见,这一类寄存器用于支撑CPU内部运行,程序员无法操作。一类对程序员可见,在进行汇编编写程序时,能够直接操作。
通用寄存器:EAX、EBX、ECX、EDX、ESI、EDI、ESP、EBP
标志寄存器:EFLAGS
指令寄存器:EIP
段寄存器:CS、DS、ES、FS、GS、SS
控制寄存器:CR0、CR1、CR2、CR3、CR4
调试寄存器:DR0、DR1、DR2、DR3、DR4、DR5、DR6、DR7
描述符寄存器:GDTR、IDTR、LDTR、TR
2.实模式下寄存器(16bit)在x86架构下,实模式可以使用的通用寄存器有 AX、BX、CX、DX、SI、DI、BP 和 SP。这些寄存器都是16位的,可以分为两个8位的寄存器来使用。
此外,还有一些特殊用途的寄存器,包括:
IP(指令指针寄 ...
操作系统-1.概述
1.环境配置
开发环境:
ubuntu20.04.5 WSL
sudo apt install nasm: 安装汇编编译器 nasm
sudo apt install bochs-x: 安装虚拟机 bochs
sudo apt-get install qemu-system :下载安装可以模拟全部硬件的qemu
sudo apt install gdb :安装gdb调试器
sudo apt-get install gcc-multilib&&sudo apt-get install g++-multilib: 安装在64位的机器上产生32位的程序
参考书籍:
操作系统真相还原
30天自制操作系统
Orange’S:一个操作系统的实现
源码地址:yanglianoo/Onix: 基于X86的操作系统,C语言 (github.com)
2.操作系统大纲
系统引导
自写bootloader
grub 引导
硬件及驱动
CPU : 32位X86架构
显示器:VGA
中断控制器:8259A
键盘
硬盘
时钟:内部时钟,外部时钟
网卡
任务调度: ...
手写STL之Vector
代码仓库:yanglianoo/My_STL at timer (github.com)
1.Vector 概述在C++ STL(标准模板库)中,vector 是一个动态数组容器,它是一个模板类具有以下特性:
动态大小: vector 的大小可以根据需要动态增长或缩小。它可以自动调整内部存储空间,以适应容器中元素的数量。
连续存储: vector 中的元素在内存中是连续存储的,这使得对元素的随机访问变得高效。
快速插入和删除: 在 vector 的末尾插入或删除元素是高效的,时间复杂度为常数。但在中间或开头插入或删除元素的操作可能会导致元素的移动,时间复杂度为线性。
随机访问: vector 支持通过索引进行随机访问。可以使用下标运算符 [] 或 at() 函数来访问特定位置的元素。
动态调整内存: 当 vector 的大小超过当前分配的内存空间时,它会重新分配更大的内存块,并将现有元素移动到新的内存中。这可以确保容器始终具有足够的内存来存储元素。
元素访问: 可以使用迭代器来遍历 vector 中的元素。可以使用 begin() 和 end() 成员函数获取指向容器开 ...







![ARM64-Trust-Firmware[3]-BL1解析](/2026/01/24/ARM64-Trust-Firmware-3-BL1%E8%A7%A3%E6%9E%90/17692290470595.png)
![ARM64-Trust-Firmware[2]-启动ATF](/2026/01/24/ARM64-Trust-Firmware-2-%E5%90%AF%E5%8A%A8ATF/17692287555201.png)
![ARM64-Trust-Firmware[1]-ARM安全架构](/2026/01/24/ARM64-Trust-Firmware-1-ARM%E5%AE%89%E5%85%A8%E6%9E%B6%E6%9E%84/17692284856153.png)
![Xhyper剖析[6]--中断虚拟化](/2026/01/20/Xhyper%E5%89%96%E6%9E%90-6-%E4%B8%AD%E6%96%AD%E8%99%9A%E6%8B%9F%E5%8C%96/17689244713913.png)
![Xhyper剖析[5]--MMIO虚拟化](/2026/01/20/Xhyper%E5%89%96%E6%9E%90-5-MMIO%E8%99%9A%E6%8B%9F%E5%8C%96/17689243819381.png)