🏺

瓶子的跋涉

=YuHeShui=

置顶文章

UEFI概述

UEFI概述

BIOS阶段划分 SEC: Security(安全) : 处理平台重事件,创造一个临时的内存区(此时内存还未初始化),在系统中作为一个可信的root,传递信息到PEI PEI : pre-efi initialization(预EFI初始化):初始化一些永久的内存HOBS(hand-off BLocks)中内存,以及在HOBS里面的FV(firmware volume)位置,传递控制权到DXE阶段 DXE :driver execution environment(驱动程序执行环境) :重点关注,服务器上硬件驱动的执行环境,与后期外设的使用,有极大的关系 BDS : boot device s
more...
C++泛化程序设计

C++泛化程序设计

泛型程序设计 编程不依赖于具体数据类型的程序 将算法从特定的数据结构中抽象出来,成为通用的C++的模块为泛型程序设计奠定关键基础 概念 在C++ STL库中用\"概念"来界定具备一定功能的数据类型 将“可以比大小的所有数据类型\(有比较运算符)“这一概念记为Comparable 将”具有共有的复制构造函数并可以用‘=’赋值的数据类型“这一概念记为Assignable 将“可以比大小,具有公有的复制构造函数并可以用’=‘赋值的所有数据类型”这个概念记作Sortable 对于两个不同的概念A和B,如果概念A所需求的所有功能也是概念B所需求的功能,那么就说概念B是概念A的子概念 sortable是C
more...

分类

最新文章

Qt实现WinIO

Qt实现WinIO

WinIO头文件 函数 初始化 本函数初始化WioIO函数库。 必须在调用所有其他函数之前调用本函数。 关闭WinIO 在内存中清除WinIO库,必须在中止函数之前或者不需要WinIO库时调用 读 从一个输入或输出端口读取一个字节/字/双字数据 写 将一个字节/字/双字的数据写入输入或输出接口 物理内存映射 将物理内存映射到一个32位应用程序的线性地址空间 把物理地址范围0xA0000 - 0xAFFFF的地址空间映射与应用的线性地址空间。返回值为一个与物理地址0xA0000相关的线性地址。如出现错误,则返回值NULL 物理映射线性 使用本函数解除原先使用MapPhysToLin函数映射的一段
more...
寄存器调试工具RU&RW的使用

寄存器调试工具RU&RW的使用

RU工具入口 RU是AMI James Wang ,其中包括IA32 X64版本的Ru.EFI和一个 Windows 版本的 Rw.EXE。 U盘格式需要是Fat32格式 将 Ru文件 当道U盘根目录 将对应的 shell文件 放到efi/boot/目录下 点击Delete进入 BIOS ,密码 统一为 123456 进入Sava & Reset 页面 选中最后一个Lanch EFI shell from file system 进入Shell里面之后,输入Ru.efi 进入Ru寄存器即可进行相关寄存器的操作 RU工具的基本使用 RU工具主菜单 File菜单 File菜单提供了Load Sav
more...
BIOS工程模块UEFI

BIOS工程模块UEFI

模块 模块与包概念 包:是一组模块及平台描述文件(.dsc文件),包声明文件(.dec文件)组成的集合。 模块(可执行文件,即.efi文件)像插件一样可以动态地加载到UEFI内核中。 每个成功模块由元数据文件(.inf)和源文件(有些情况包含.efi文件)组成。.inf类似与Linux下得Makefile,.dsc文件则相当于VS项目中的.sln文件;模块相当于VS项目中的工程,.inf文件则相当于VS工程中的.proj文件。 UEFI主要模块 UEFI模块 DSC文件 DSC文件描述了模块,库和组件如何编译,其中还包含很多的节(section)标志,包含必要的[Defines],[Compo
more...
EDK2入口函数

EDK2入口函数

入口函数 一个简单的UEFI程序,至少包含两个部分 C程序源文件 : 用来实现具体功能,在复杂程序中源文件可能包含:C/C++源代码,.asm汇编文件(.s汇编文件,uin资源文件(字符串资源文件)和.vfr资源文件) INF元数据文件用来编译代码 入口函数返回值类型EFI_STATUS 在UEFI中基本所有的返回值类型都是EFI_STATUS,其本质是无符号长整数 最高位为1时其值为错误代码,为0表示正确。听过宏EFI_ERROR(Status)可以判断返回值Status 头文件 : 定义了UEFI中的基本数据类型和核心数据结构 : 提供通用的库函数,包括时间,简单锁,任务优先级,驱动管理和
more...
C指针与操作寄存器方法

C指针与操作寄存器方法

在UEFI中主要使用函数指针来进行复制与交互,使用结构体复制的形式进行隐私函数实现与函数指针赋值,在系统传感器信息以及硬件资源设备进行获取时,通过操作寄存器的形式进行获取是一个理想的方案,如何使用寄存器来操作应将的常用使用方法,异或,取反,位域等操作。
more...
EDK2安装与双系统

EDK2安装与双系统

下载ubuntu系统 在清华大学镜像站 点击获取下载链接(IOS) 选择你要下载的Linux系统 设置U盘 下载Rufus 启动文件之后,选择自己的U盘,并选择自己下载好的ubuntu系统 选择分区与文件 点击开始 点击OK 选择推荐,点击Ok 将会清理U盘数据,点击确认 等待完成 压缩磁盘文件 点击win键 输入磁盘管理,确认 压缩磁盘文件,为Linux提供足够的空间 磁盘管理 进入BIOS 通过UEFI固件设置进入BIOS 点击所有设置 点击更新与安全 点击立即高级选项 点击立即重新启动 点击疑难解答 点击高级选项 选择UEFI固件设置 点击重启 设置U盘启动 在Boot页面下 选择Boo
more...
BIOS与系统启动

BIOS与系统启动

知识储备 C语言 C++ 汇编 Linux 汇编部分补充 数据描述符 AX累加器:用到最多最频繁,AX,AH和AL在乘,除法等操作中有专门的用途。 BX基址寄存器: 用于存放偏移地址 CX为计数寄存器:在循环操作中做计数器用,用于控制循环程序的执行次数 DX数据寄存器:在乘,除法及I/O端口操作时专门用途。 指令 操作方向标识为DF(Direction Flas) 使用此指令控制方向标志DF,决定内存地址增大还是减小。 在子串操作中使SI或DI的地址指针自动递减,字串处理由后往前。 CLD 使DF复位,即让DF=0 向高地址增加 STD 使DF置位,即让DF = 1 向低地址减少 CPU架构
more...
STL强化

STL强化

面向对象三大特征 封装是指将数据和行为组合成一个整体,对外部隐藏内部的实现细节,只提供必要的接口。封装可以保护数据的安全性,降低代码的复杂度,提高代码的可维护性。C++通过private,protected,public关键字来控制成员变量和成员函数的访问权限 继承是指子类可以继承父类的属性和方法,并且可以添加或修改自己特有的属性和方法。继承可以提高代码的复用性;提高代码的扩展性;同时也是多态的前提 多态是指不同类型的对象对同一消息可以做出不同的响应。多态可以分为编译时和运行时多态。编译时多态是指通过重载实现的多态,即在同一类中定义了相同名称但不同参数的方法,根据调用时传递的参数不同而执行不同
more...
做题追溯02

做题追溯02

深拷贝和浅拷贝 浅拷贝就是将源对象的值拷贝给当前对象,两者指向的还是同一地址,对一个对象的修改可能会影响到另一个对象。 深拷贝是 一种对象拷贝,它会创建一个新的对象,并将原始对象中的所有数据成员复制到新的对象中,包括多态分配内存。原始对象和新的对象是完全独立的,对一个对象的修改不会影响另一个对象。 区别: 对象中含有指针类型的成员变量时需要用深拷贝构造,否则用浅拷贝构造 编译器默认的拷贝构造函数是浅拷贝构造函数 如果对象中含有指针用了浅拷贝构造,那么会导致两个指针变量指向同一块地址空间,如果没有创建内存的操作就是浅拷贝,否则就是深拷贝 深拷贝可以用于创建独立的副本,对于需要完全独立的对象的情况
more...
做题追溯

做题追溯

typedef typedef并不是简单的宏替代。 定义一种类型的别名 定义struct结构体别名 用typedef来定义与平台无关的类型 为复杂的声明定义一个简单的别名,表示的是一个指向函数的指针 用typedef可以定义各种类型别名,但不能定义变量 使用typedef便于程序的通用 用typedef只是将一个已经存在的类型用一个新的名称替代 typedef不能添加新类型 typedef和#define区别 typedef 是一种类型别名,而#define只是宏定义,二者并不总是可以互换的。 比较函数 C++的比较函数适用于整型字符串浮点数等多种类型。 max 返回队列中的最大值,参数两个参
more...