- 博客(52)
- 资源 (1)
- 收藏
- 关注
原创 Uefi Application小游戏开发之猜箱子
小游戏之选择箱子个数 ,交换次数 ,交换速度等,将球丢入到一个箱子中,然后开始随机交换箱子,猜出球的位置1.选择难度 交换次数2.选择难度 箱子个数3.开始交换4,交换完成后猜球的位置基本函数介绍。
2024-10-29 16:58:04 308
原创 Uefi Application小游戏开发之推箱子
推箱子(Pushbox)是一个经典的益智游戏,其C语言实现需要设计一个游戏循环,处理用户输入,并更新游戏状态。如果无法走就不执行,其他的方向操作原理相同,然后更新打印。处理上下左右按键,处理按键上下左右,更新地图信息,上。UEFI模拟器可直接运行。
2024-10-23 14:34:05 299
原创 编译内核lspcu 工具源码 util-linux
5. **more** 和 **less**:用于分页查看文本文件内容的命令。2. **mount** 和 **umount**:用于挂载和卸载文件系统的命令。6. **su** 和 **sudo**:用于切换用户身份或以超级用户权限执行命令的命令。4. **kill**:用于终止进程的命令,可以通过进程 ID 或名称终止指定的进程。3. **blkid**:用于查看块设备的文件系统类型和属性的命令。7. **dmesg**:用于查看系统日志的命令,显示内核环缓冲区的内容,用于诊断系统问题。
2024-09-23 17:00:27 1143
原创 开启计算机的ssh 22端口
启动sshd失败,报错:Failed to start OpenBSD Secure Shell server。ss -ntl 22端口打开。以下过程适合于当我们购买一台云主机时候配置远程登录。第六步以及第七步,查看端口号。开启本地计算机的22端口。第五步,执行重启命令。
2024-09-09 10:39:23 1404
原创 Secure Boot 详细介绍
Platform Key (PK) - PK 是用于在硬件平台层和硬件平台拥有者建立起的信任关系 ,规定一个硬件平台只能被一个拥有者所拥有,即 PK 只能存在一个 ,与拥有者相关的公钥被存储在 FLASH 里面的 PK 变量里面,同时,拥有者的私钥可以来对 PK, KEK, db, dbx 进行签名和管理。保存后进Shell, 运行加签名的文件, 能运行。1. **启动固件验证**:在计算机启动时,启动固件(如UEFI固件)会验证操作系统引导加载程序的数字签名,确保其来自受信任的发布者。
2024-09-09 10:37:42 2768
原创 系统表 ConfigurationTable 之ACPI Table SmbiosTable
在UEFI中,系统表(Configuration Table)是一个包含系统配置信息的数据结构,其中包含了各种系统信息和表格(Tables)。其中,ACPI(高级配置与电源接口)表和SMBIOS(系统管理BIOS)表是两个重要的系统表,用于描述系统的硬件配置和特性。XSDT表全称Extended Root System Description Table,它的作用于RSDT一样,区别在于两者包含的指针地址一个是32位的,一个是64位的。
2024-09-06 14:51:02 347
原创 UEFI BIOS之SMBIOS
需要注意的是STRING 类型的信息 ,这个offset位置代表的是第几个String,而不是描述信息,所有String类型的描述信息都在smbiostype* 的后面开始通过0 隔开。每个Type 和每个Type 的中间是通过两个Ascall 0 0 隔开的,每个Type中若有String 字段,String字段通过一个0 隔开。不同的Type存储不同的信息,这些信息是BIOS提供OS的一个表,OS的部分配置会参考Smbios。第一个string , 0为两个String的分隔符。
2024-09-04 21:19:06 1056
原创 Windbg 调试EDK
此方法不仅可以调试还可以用于学习代码运行流程,在逻辑关系复杂的代码段加入CpubreakPoint(),单步调试可以详细理解代码执行的流程,和函数调用关系逻辑。6.运行efi文件,当运行无断点的程序会正常运行到shell下,当运行有断点的程序会运行到断点处进行单步调试,同时当出现Hang机也会终止运行。本示例在EFI shell 下去运行efi efi会导致Hang机 则会停在hang机点 可查看到对应的代码段。ed address value 在address 这个地址写入四字节字节value。
2024-09-02 17:03:38 1090
原创 EDKII之安全启动详细介绍
安全启动(Secure Boot)是一种计算机系统的安全功能,旨在确保系统启动过程中只能加载经过数字签名的受信任的操作系统和启动加载程序。通过使用安全启动,系统可以防止恶意软件在启动过程中植入并运行,提高系统的安全性。启动固件验证:在计算机启动时,启动固件(如UEFI固件)会验证操作系统引导加载程序的数字签名,确保其来自受信任的发布者。操作系统验证:启动加载程序会验证操作系统内核和驱动程序的数字签名,以确保它们没有被篡改。启动链验证。
2024-08-22 16:00:26 1442
原创 EDK读取Raw文件
Helloword.c中解析Helloword.txt。通过匹配File Guid就可以获取Raw Data。Raw文件需要添加fdf中参与打包到BIOS Rom中。UEFI Application中 可调用。
2024-08-21 09:38:44 244
原创 内存标签解析DDR5 SPD读取
DDR(Double Data Rate)SPD(Serial Presence Detect)是一种存储在计算机内存模块上的小型EEPROM芯片,用于存储有关内存模块制造商、型号、速度等信息。mov al,48h;- 时序参数:内存模块的时序设置,如CAS延迟、RAS预充电时间等。----------smbus 访问规范--------- 校准信息:内存模块的校准数据,用于确保内存稳定运行。- 内存规格:容量、速度等。
2024-08-09 14:52:08 1022
原创 EDKII Boot Order Boot Option 介绍
Boot 启动项中有个Boot Order的 Variable 打印一看 发现只存在几组 数据 0000 0001。Boot Menu是一个动态更新的,在Vfr中预留了Label Question id 0x1212。Boot界面显示有多个启动项,这些启动项都是存在Nvram中 我们在Vaiabled中查找启动项。启动信息存在Boot####中 通过Boot Order 确定启动的顺序。LOG 中Dump 了 Boot#### 以及Boot Order。改变Boot option的Order。
2024-07-26 17:15:26 928
原创 UEFI DebugLib 介绍
有多个Lib 对DebugPrintEnabled 做了定义,因此可以使用不同的Lib 让Debug()产生不同的效果,这点也适用于其他函数。UefiDebugLibConOut.inf 这个Lib就是开始我们提到的将debug信息打印到Shell 使用的Lib。当我们调试程序时,可以在可能有问题的地方插入一条 INT 3 指令,使 CPU 执行到这一点时停下来。当条件为假时,断言会触发错误处理机制,通常会导致程序中。对于不同的架构实现方式可能不同,但是可以用同样的模块代码,通过替换Lib去替换实现函数。
2024-07-25 17:09:16 894 4
原创 RAS--APEI 报错解析流程(2)
这就对应到Dmesg 中的HardWare error 错误,就可以识别到错误的source id ,既可以大致定位错误信息来源 Source id = 512 对应到PCIE 错误。使用BERT 的header 通过section type 区分错误类型 对应到不同的错误结构 都是通过block error status addrss 链接。对于OS去打印HardWare error 只需要参考GHES 中的Error Block status 就会去打印 错误的GHES Table中的错误信息。
2024-07-24 19:07:25 1073
原创 RAS--APEI 报错解析流程(1)
1.注册SMI ApuRasDispatch gFchSmmApuRasDispatchProtocolGuid,当PCIE产生错误,CPU的寄存器会存在错误状态,IOHCRAS会有错误的信息,同时会产生SMI的中断,BIOS会读取错误信息同时去扫描PCIE 的配置空间AER Capbility的错误状态填写到APEI HEST GHES type9中对应的PCIE错误结构体,同时汇报ipmi 错误到BMC和清除错NBIO Global Status误状态,AER 错误可以OS 清除。
2024-07-24 16:34:02 1347
原创 BIOS 初始化之SEC
一般会在,reset vector(地址 0xFFFFFFF0)放置一条跳转指令(ResetVec.nasmb),跳转 到 SecCore 入口,其地址为 PlatformSecLib 的 SecEntry.nasm 汇编_ModuleEntryPoint 宏定义处, SecCore 完成基本的初始化之后会调用 PeiCoreEntry.nasm 内的 CallPeiCoreEntryPoint()函数,跳转到 PeiCore。第二个NOP是占位符,为了让随后的JMP可以16位地址对齐,这样性能高一些。
2024-06-12 10:32:02 955
原创 PCIe Capability and Extended Capability
1. **PCIe Capability:** PCIe Capability 是指 PCIe 设备的基本能力,包括设备的类型、速度、链接状态、电源管理、错误处理等。在 PCIe 设备的配置空间中,PCIe Capability 和 Extended Capability 结构是以特定的格式和偏移地址存储的,操作系统和驱动程序可以通过读取这些结构来获取设备的基本能力和扩展功能,从而进行适当的配置和管理。PCI配置Header(64B,00h~3Ch)具有固定的格式,主要有两种:Type0和Type1。
2024-06-03 15:07:51 907
原创 Linux服务器搭建http服务,添加DNS域名解析
文档根目录: /var/www/html ,这个是apache 首页的文档目录 ,即输入http://127.0.0.1 显示页面所在的目录。命令执行文件:/usr/sbin/apachectl ,/usr/sbin/httpd,/usr/bin/htpasswd。主配置文件:/etc/httpd/conf/httd.conf ,这个是httpd最主要的配置文档。扩展配置文件:/etc/httpd/conf.d/*.conf ,这个是httpd的额外配置文档。域名解析服务通过将域名解析为。
2024-05-30 10:46:15 1484
原创 UEFI Shell常用指令
connect 将driver绑定到指定的设备并启动driver mm 列出或修改MEM/MMIO/IO/PCI/PCIE地址空间。hexedit 二进制编辑器,可编辑文件,块设备或内存 vol 显示/设置卷标。dblk 显示块设备里的块 openinfo 显示Protocols打开信息。
2024-05-28 14:09:11 3425
原创 PCIe学习笔记之Max payload
但是mrrs也不能设置过大,在PCIe链路中,我们不能一直发送TLP,而是需要接受端有足够的接受空间之后,才能继续发送TLP,buffer空间太大的话对于EP的设备而言是比较苛刻的,所以在实际的设计中,也会对mrrs的大小进行限制。但是如果设置各个节点的mrrs的值为128B,那么虽然RC设备的mps为256B,但是实际能够传输的大小却受到mrrs的影响,变成128B,这种情况下,实际上传输的TLP报文最终是128字节,可以满足各节点mps一致的条件,可以传输成功。
2024-05-27 19:24:15 1402 2
原创 Quem 运行EDKII UEFI BIOS
EmulatorPkg比较方便可以直接显示DEBUG函数的输出信息,但是Emulator会缺少很多东西,导致很多Protocol无法使用。qemu-system-x86_64.exe -pflash OVMF.fd -net none //-net none 不启动PXE,启动成功。4,编译好的路径下,打开命令行:EDK编译OvmfPkg 注意参数-a IA32 -a X64。】:将DEBUG打印的log存到debug.log里面,在qemu的安装目录下。-pflash 】:FD文件存放目录。
2024-05-24 13:45:17 435
原创 PCIE error 注错 OS AER禁用
线程aer_isr从Root Port 开始walk_bus遍历该root port下面的所有PCIe设备,读取设备aer status寄存器和aer mask寄存器,如果status对应bit为1且mask 对应bit为0,则加入struct aer_err_info *e_info的数据结构中等待处理。这PCI Express端口服务驱动程序,名称为"aer",类型为PCI_EXP_TYPE_ROOT_PORT,服务类型为PCIE_PORT_SERVICE_AER。修改成功后可以注入ACS 的错误。
2024-05-07 16:41:11 1140
原创 PCIE error 分析流程
以Endpoint为例,通过不同的配置,在recovery.Equalization的phase2阶段,EP可以选择在Preset P0、P1、P2、P3、P4、P5、P6、P7、P8、P9、P10 中选择任意个preset进行链路质量评估扫描,最终选择链路质量最优的一个Preset。对PHY的RX进行配置,使其再次进行adapter,PHY会根据链路状态进行自适应参数调整以满足链路质量的要求,不同的PHY vendor拥有不同的配置方法和限制条件,需要根据IP SPEC进行配置。
2024-04-22 09:35:38 1994 1
原创 OS下关闭Numa Node
编辑 /etc/default/grub 文件,如下图所示加上:numa=off。3.重启操作系统,os下关闭numanode以关闭。BIOS支持Numa,OS 默认打开。
2024-04-19 17:29:25 336
原创 UEFI BIOS之NVRAM
提出这个原因的目的是因为有一个需求是要求BMC在更新BIOS时要做到保存用户设置数据,那么方案就是BMC在更新BIOS的数据时,先从BIOS中把NvRam那段空间的数据读出来做备份,然后刷掉整个ROM空间中的数据,再把新版本得BIOS数据写入ROM存储介质中,最后再把预先备份的数据按照BIOS Layout布局写入指定的位置即可。基于这样的一个目的,因此BIOS需要提供NvRam空间的布局。标红框的时NVRam区域的SIZE,下面也有每个具体的NvRam区域的Offset计算,没截出来。
2024-04-19 17:19:51 774
原创 UEFI Setup界面Hii动态创建选项
每个界面的选项一些操作 恢复默认值 动态创建的选项需要配置对应的当前值或者BufferStorage的值进行显示和存取操作,CallBack针对选项的操作进行执行CallBacFunc函数,其中实例需要自己实现每个vfr都可以按照需求实现自己的ConfigAccess Protocol。使用form formid 点击goto选项会跳到相同的formid页面。1.Vfr文件中建立Label ,在C文件中动态插入选项到Label位置。实例:这样就实现在vfr中跳转到不同的Form页面。
2024-02-26 14:02:27 1289
原创 CPU模式与寄存器介绍
保护模式:保护模式提供了内存保护机制,通过分段和分页机制,可以将内存划分为不同的段和页面,并为每个段和页面设置访问权限。当CPU支持20根以上地址线时,可以访问到0x100000到0x10FFEF的地址,但是需要打开A20地址线支持,否则访问到的是0x0000-0xFFEF的内存地址。保护模式:在保护模式下,内存访问是基于虚拟地址的,程序使用段选择子和偏移地址的组合来访问内存。保护模式:保护模式支持32位和64位的寻址空间,可以访问更大的内存容量,充分利用现代计算机的性能和资源。
2024-02-06 17:01:22 766
原创 CXL技术
CXL.memory:这种模式可以将外部设备作为主内存使用,从而实现更大的内存容量。CXL.cache模式允许CPU在本地缓存中保留最常用的数据,而将不常用的数据保存在外部设备中。用于网卡这类高速缓存设备。Type 3:一种专用的存储设备,与主机处理器直接通信,并且可以使用 CXL 协议来实现低延迟、高吞吐量的数据传输。通过PCIe总线连接CPU和外部设备,这样CPU就可以与外部设备共享内存,并且可以直接访问外部设备的I/O资源。CXL.io:这种模式可以将内存扩展到外部设备,使得数据的传输速度更快。
2024-02-06 15:42:14 299
原创 BIOS RTC唤醒原理之COMS寄存器
如果RTC唤醒事件的状态和使能位是在Fixed Hardware中实现的,则OSPM可以在不加载整个操作系统的情况下判断该RTC是否是唤醒事件的源。S4唤醒是可选的,通过FADT中的RTC_S4标志(如果设置,则平台在S4状态下支持RTC唤醒)*来支持。FADT中的CENTURY字段 将包含一个非零值,该值表示RTC的CMOS RAM区域的偏移量,该区域包含该日期的Centenary值。FADT中的DAY_ALRM字段将包含一个非零值,该值表示RTC的CMOS RAM区域的偏移量,该区域包含日告警值。
2024-02-06 10:13:21 3525
原创 UEFI BIOS之文件类型
DXE在拿到这个hob之后,会先生成FVB protocol 然后再生成FV protocol 这个FV protocol就很像PEI阶段的FV ppi,这个FV Protocol就对这个FV进行管理,对FV数据进行操作,中间的FVB可读可写,如果说这一块block空间存储的是FV格式的数据,是PEI flow,spec 规定的格式的,则会继续创建FV protocol 如果不是的话则不会创建。FV:固件卷,指在FD上一个连续的部分,我们可以把它看成一个逻辑设备,因为我们代码真正操作的是FV,而非FD。
2024-02-05 16:35:35 1634
原创 UEFI BIOS之PCD
这里说是大部分时间内,那是因为在诸如SEC阶段,以及PEI、DXE阶段的早期,某些PCD相关的模块还没有加载起来之前,这些类型的PCD还是不能访问的。需要注意的是上面的类型并不是在一个SPEC中定义的,前面的4中是满足EDKII规范,而最后一个满足的是PI规范,这个对使用的影响还不是很确定。因为该PCD是可以通过外部工具来修改的,那么有一点是可以肯定的,即它是可见的,通过查看BIOS二进制就可以找到。这里定义了PCD相关的两个变量,一个是值,注意它的类型修饰符是volatile,另一个是PCD的大小。
2024-02-05 15:29:36 1026
原创 EDK内存初始化流程
由于在第1步中gMemoryMap已经链接到来一项Entry,而这项Entry是位于静态内存空间,该Entry的FromPages标记为FALSE,于是在根据gMemoryMap中的这一项Entry来分配动态内存的时候,最终会使得这项Entry分裂成两项,一项Entry0描述剩余的动态内存空间,一项Entry1描述分配出的一页大小的动态内存空间。此时这些Entry本身的数据实际是位于动态内存空间,其属性FromPages被标记为TRUE,不过这些Entry并没有描述某一段内存空间,其本身的数据都是空值。
2024-02-05 15:27:39 782 1
原创 UEFI BIOS 之HOB
手册为了将x86的Platform Initialization扩展到更多的平台,已经不再直接使用PEI、DXE等阶段说明HOB的使用情况,不过对于x86架构的BIOS来说,HOB生成阶段其实就是SEC和PEI阶段,而HOB消费阶段就是DXE和BDS阶段。HOB在HOB List里是连续创建的,在HOB header(EFI_HOB_GENERIC_HEADER)中描述了HOB的长度和Type,创建后的HOB是不能删除的,否则无法查找下一个HOB。后面的HOB操作接口都是以这里为基础的,比如。
2024-02-05 15:24:57 870 1
原创 ACPI Event流程介绍
● 状态/使能寄存器(针对事件) ● 控制寄存器 如果一个寄存器块的类型是状态/使能类型,那么它将包含一个具有状态位的寄存器和 一个对应的具有使能位的寄存器。相比之下,在ACPI系统中,中断事 件会产生一个共享的、OS可见的中断(边沿类型的中断将不会工作)。在此状态下的硬件延时必 须足够短,使得操作软件在决定是否使用它时,不会考虑此状态的延时因素。设备和处理器性能状态(Px状态)是设备或者处理器在执行状态下(处理器在C0状 态,设备在S0状态)的电量消耗和能力状态。SCI是一个低有效、电平类型的共享中断。
2024-02-05 15:14:17 588 1
原创 ACPI 系统表详细介绍
ASL(ACPI Source Language)编译之后得到AML(ACPI manchine Language),置于ACPI table中,ASL用来定义ACPI objects,包括ACPI control methods等,可以控制hardware,读写register等。在 ACPI 中,_STA 方法通常用于返回设备的状态信息。若发生特权级变化,需要保存用户态地 SS,ESP 到内核栈,否则不需要保存,然后再保存 eflags,cs,ip 到内核栈中,如果有错误码,还要将错误码压进栈中。
2024-02-05 15:13:03 2165 3
原创 内存Bank Interleaving
例如,在第一个时钟周期中,CPU向存储体0发送一个地址,然后在第二个时钟周期中将下一个地址发送到存储体1,然后分别在第三个和第四个时钟周期将第三个地址发送给存储体2和3。在没有交织的情况下,控制器将地址发送到SDRAM设备,接收所请求的数据,然后等待SDRAM设备预充电并在启动下一个数据事务之前重新激活,从而浪费了几个时钟周期。控制器无法在其最佳位置向气缸组z发出激活命令,因为它必须等待气缸组x接收带有自动预充电命令的读取,从而将激活命令延迟一个时钟周期。对于DDR4,存储体是指存储体地址和存储体组。
2024-02-05 15:08:33 356 1
原创 OS 内核 Grub参数设置
临时修改可以方便地测试和验证内核参数是否有效地解决问题,而这只需要在系统启动时,选中条目,详细的OS kernel grub参数设置入附件 Kernel Parameters。经过临时修改验证后,是时候将其修改永久保存,将内核参数追加到。键即可进入编辑模式,将参数追加到。,每个参数以空格隔开。例如IOMMU 功能开关。
2024-02-05 15:03:32 427 1
原创 Linux 开机自启脚本
reboot //进入系统后sleep 10s中 会执行reboot重启可以继续添加其他操作指令开机自动运行。/etc/rc.d/rc.local 这个文件最后一行加一个/root/reboot.sh。打开启动应用程序首选项:以下仅仅是打开的一种方法,当然也可以通过终端直接运行。Sleep 10 && reboot Esc :wq保存退出。i键 输入模式 在最后一行加 /root/reboot.sh。/root 目录创一个 reboot.sh。Linux系统reboot 脚本。
2024-02-05 14:40:59 548 1
原创 [gitlab-搭建使用]
gitlab-rake gitlab:check SANITIZE=true --trace 检查gitlab。安装 rpm -ivh gitlab-ce-11.6.10-ce.0.el7.x86_64.rpm。仓库默认存储路径 /var/opt/gitlab/git-data/repositories。gitlab配置路径:/etc/gitlab/ 路径下有gitlab.rb配置文件。gitlab-ce是它的社区版,gitlab-ee是企业版,是收费的。
2024-02-05 14:34:22 193 1
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人