- 博客(119)
- 收藏
- 关注
原创 UEFI学习笔记(十三):Capsule Update
在UEFI(统一可扩展固件接口)中,胶囊更新(Capsule Update) 是通过胶囊文件来更新固件组件(如BIOS或系统固件)的机制。是 UEFI(统一可扩展固件接口)规范中定义的一种数据结构,用于描述系统中固件更新资源的信息。ESRT 的主要目的是为操作系统或固件更新工具提供一个统一的接口,以便于发现和管理可更新的固件组件。FMP 主要用于支持固件更新的功能,包括固件的发现、管理和更新。胶囊内包含的更新负载是实际要应用的固件或数据,可能包括更新的BIOS代码、ACPI表、微码或其他系统关键更新。
2024-10-31 15:52:22 504
原创 UEFI学习笔记(十一):SMBIOS的概述与访问
一、概述二、SMBIOS结构三、SMBIOS的访问1、获取 SMBIOS 入口点2、初始化和检查入口点3、访问 SMBIOS 结构表4、遍历 SMBIOS 结构5、解析每个结构6、输出信息7、错误处理SMBIOS(System Management BIOS)是一种在计算机系统中用于管理和获取硬件信息的标准接口。它提供了一种结构化的方式,通过 BIOS 来传递有关系统硬件的详细信息,包括处理器、内存、主板、以及其他组件的信息。
2024-10-16 15:28:22 872
原创 UEFI学习笔记(十):系统表与ACPI表的遍历
SMBIOS(System Management BIOS)是一种在计算机系统中用于管理和获取硬件信息的标准接口。它提供了一种结构化的方式,通过 BIOS 来传递有关系统硬件的详细信息,包括处理器、内存、主板、以及其他组件的信息。SMBIOS 数据结构以表的形式存在,通常在系统启动时由 BIOS 提供,操作系统可以通过读取这些表来获取所需的信息。
2024-10-08 16:19:35 436
原创 UEFI学习笔记(九):ACPI详解
DSDT (Differentiated System Description Table)是 ACPI 表中的核心之一,定义了系统中的硬件和设备。它包括设备对象、方法、操作和控制策略。DSDT 描述了系统的设备和其功能,提供了系统启动和运行时所需的基本设备信息。通常在系统固件中存储,并由操作系统在启动时加载和解释。
2024-09-14 09:57:16 1015
原创 UEFI入门学习笔记(详细版,持续更新)
每个平台有其对应的 .dsc 文件(平台描述文件)和 .fdf 文件(固件描述文件),用来定义要构建的平台、所包含的模块、库、驱动程序,以及固件映像的布局。.dsc 文件是编译每个模块的主要参考,而 .fdf 文件是生成固件映像时的重要文件。模块是一个最小的可编译单元,Package是最小的对外发布的单元。模块放在包里面的。模块包括LibraryDriver等类型。每一个模块都有一个INF文件。HOB(Hand-Off Block)主要用于在不同的阶段共享数据。
2024-09-13 10:29:49 1448
原创 UEFI学习笔记(八):Memory Services
HOB(Hand-Off Block)主要用于在不同的阶段共享数据。由于Flash是只读的,直接修改全局变量是无效的。因此,在PEI(Pre-EFI Initialization)阶段,需要使用HOB来共享全局信息。HOB提供了一块临时内存,这块内存是CPU缓存的一部分,可以进行读写操作,从而在不同的阶段之间传递和共享信息。
2024-09-12 14:42:53 1109
原创 UEFI学习笔记(七):UEFI_Spec_2_10 Protocols整理
用于定位EFI MTFTPv4协议(Multicast Trivial FTP)驱动程序支持的通信设备,并创建和销毁可以使用底层通信设备的EFI MTFTPv4协议子协议驱动程序的实例。它提供了一组函数,用于初始化、控制和操作显示设备的图形输出。用于定位由EFI UDPv4协议驱动程序支持的通信设备,并创建和销毁可以使用底层通信设备的EFI UDPv4协议子协议驱动程序的实例。用于定位EFI IPv4协议驱动程序支持的通信设备,并创建和销毁可以使用底层通信设备的EFI IPv4协议子协议驱动程序的实例。
2024-09-12 09:14:33 495
原创 UEFI学习笔记(六):EDK II 模块:Libraries,Drivers&Application
(os loader 是一种特殊的application,执行完成后不会return或者exit,相反会调用EFI boot service gBS->ExitBootServices()来将控制权从fireware 传递给os)Driver可以依赖Library,Driver可以生产protocols,主要用于支持硬件。里面的(Package是EDK II 最小的对外发布的单元)。App是被UEFI loader加载的,不会装protocols。每一个模块都有一个INF文件。对应的是一个模块(INF)
2024-09-11 17:21:38 519
原创 UEFI学习笔记(五):EDK II PCD的概念、类型、使用
如果在BIOS里面有一些模块是binary方式集成进来的而这些binary又需要用到PCD(用于Binary Release),那么这些Binary集成的要用到的PCD就必须要设置为。PCD的值存在memory里面,下次启动时,上次更改的值丢失了,每次启动都是从default值开始。是存在VPD空间的(在FLASH上,只读),一般是出厂配置。如果platform是从源码build出来的,没有binary在里面的时候,PCD用的都是。作用域在一个模块中(模块级的),可以在Binary Level进行修改。
2024-09-11 14:42:29 946
原创 UEFI学习笔记(二):edk2构建编译流程
每个平台有其对应的 .dsc 文件(平台描述文件)和 .fdf 文件(固件描述文件),用来定义要构建的平台、所包含的模块、库、驱动程序,以及固件映像的布局。.dsc 文件是编译每个模块的主要参考,而 .fdf 文件是生成固件映像时的重要文件。
2024-09-10 11:10:36 774
原创 动态链接库加到环境变量的方法 error while loading shared libraries问题的解决方案
用静态链接库会把库直接编译进去,用静态链接库需要把库添加到环境变量,不然会出现:error while loading shared libraries1. 把它们复制到系统环境变量已有的路径下,如 /usr/lib /usr/local/lib 这些2. 另外放到一个专有目录,将路径export 到环境变量或者修改 ~/.bashrc ,在.bashrc文件中添加如下内容:
2023-07-25 14:03:25 602
原创 安装交叉编译工具链aarch64-linux-gnu-g++ 以及cmake测试
【代码】安装交叉编译工具链aarch64-linux-gnu-g++ 以及cmake测试。
2023-07-24 11:07:06 10401 3
原创 6.28 内存分配/管理 学习总结
在应用程序中,内存中连续的8个字节看似是连续的,但是在物理上并不是连续的,这是由于8个bank实际上是可以并行工作的。内存对其的情况下,工作一次,把得到的数据拼起来,就能得到内存中地址连续的8个字节,从而提高了IO效率。通过上述实验结果可以得出,在64位系统下,我们申请的内存实际占用的大小会是16x + 8,分配的内存大小在每个区间内会对应相同的一个实际占用内存大小。内存对齐就是把各种类型数据按照一定的规则在空间上排列,而不是按照顺序一个接一个的排放,这种就称为内存对齐,内存对齐是指首地址对齐。
2023-06-28 10:32:13 306
原创 Leetcode C++: 剑指 Offer 07. 重建二叉树 (根据前序遍历和中序遍历的结果)
根据该位置以及中序遍历的右边界计算出root的左边的节点个数, 然后new一个root,通过递归给root->left和root->right赋值。输入某二叉树的前序遍历和中序遍历的结果,请构建该二叉树并返回其根节点。我们需要根据前序遍历的根节点的值去定位到中序遍历中root的位置,假设输入的前序遍历和中序遍历的结果中都不含重复的数字。递归结束条件: 左边界 > 有边界。前序遍历:[根,[根的左],[根的右]]中序遍历:[[根的左],根,[根的右]]
2023-04-10 16:30:11 104
原创 3.17 Leetcode: 2389. Longest Subsequence With Limited Sum 和有限的最长子序列
对nums进行从小到大排序 (因为从小的数开始取 才会最长)然后求前缀和 遍历queries数组 找前缀和中第一个大于q的数的地址(利用upper_bound函数), 该地址减去 前缀和的初始地址 就是最大长度。
2023-03-17 21:28:35 103
原创 3.15 Leetcode: 1615. Maximal Network Rank
网络秩 = i节点相连的道路 + j节点相连的道路 - nb[i][j] (遍历更新)定义一个邻接矩阵nb 表示 两个节点是否相连 相连为1 不相连为0。最大网络秩是与两个城市直接相连的道路总数的最大值。
2023-03-16 20:04:43 152
原创 Leetcode: 2488. Count Subarrays With Median K 统计中位数为 K 的子数组
3、遍历剩下的数 计算前缀和 等于k为0 大于k为1 小于k为-1 如果在map中找到presum 或者 presum - 1 说明存在map[presum] / map[presum - 1]个满足条件的数组 用cnt进行计数。1、用哈希表存放前缀和对应出现的次数 由于 为偶数时中位数是左边那个 说明 左边可以少一个比k大的数。2、先遍历统计 k前面的数的前缀和出现的次数 大于k为1 小于k为-1。
2023-03-16 16:56:47 128
原创 Leetcode:1605. Find Valid Matrix Given Row and Column Sums 给定行和列的和求可行矩阵
每个的值必须要小于 当前行的和and当前列的和 所以为 min(rs[i], cs[j])并且对每行的和 and 每列的和进行更新 (-val)
2023-03-14 21:15:01 113
原创 Leetcode: 2383. Minimum Hours of Training to Win a Competition 赢得比赛需要的最少训练时长
2、再考虑经验, 遍历 ex:experience, 如果当前initialEnergy > ex,则不需要额外训练,且initialEnergy += ex;如果当前initialEnergy > ex, 则需要额外训练ex - initialExperience + 1小时,且initialEnergy = initialEnergy + (额外训练的) (ex - initialExperience + 1) + (比赛赢获得的)ex = ex * 2 + 1。
2023-03-13 10:52:11 87
原创 Leetcode : 1590. Make Sum Divisible by P
移除subarray 只需要固定两个端点 (subsequence 移除不一定连续的子序列)1、前缀和 + 暴力解法 (超过时间了 没通过 但逻辑应该是没问题的)2、前缀和 + 哈希表。
2023-03-13 10:06:25 276
原创 Leetcode DAY 60:柱状图中最大的矩形Largest Rectangle in Histogram
【代码】Leetcode DAY 60:柱状图中最大的矩形Largest Rectangle in Histogram。
2023-03-10 11:19:50 140
原创 Leetcode DAY 59: 下一个更大元素 and 接雨水
循环遍历height[i] 当height[i] 比栈顶元素大 说明找到凹槽 当前栈顶元素为mid 栈顶元素的下一个元素为左边最大 当前i为右边最大。相较于I, 主要是数组变成了环状的, 需要循环数组两边 将 i下标 替换为 i % nums.size()用 Lh[i] = max(Lh[i - 1], height[i]) 对左边最大元素进行更新。第i列的储水量为 min(Lh[i], Rh[i]) - height[i]用两个数组记录每个元素左边最大的元素和右边最大的元素。
2023-03-10 10:20:59 104
原创 Leetcode DAY 58: 每日温度 and 下一个更大元素 I
把第0个元素(的下标)放入栈中 从第一个元素开始遍历 比较第一个元素和栈顶元素的大小 如果小于等于栈顶元素 放入栈中 循环判断如果大于栈顶元素 则得到当前res[st.top()]为当前元素和栈顶元素下标的差值 再把当前元素放入栈中。本题相当于找nums2中第i个元素右边比他大的第一个数 并且把第i个元素与nums1中的元素进行匹配 把右边第一个比他大的数放进res[index]中。两个for循环 遍历并判断(超出时间限制了)496.下一个更大元素 I。
2023-03-08 21:23:21 64
原创 Leetcode: 剑指 Offer II 077. 链表排序
2、需要把链表分为前后两个部分 分别进行归并排序后 合并链表。3、需要实现的函数:split链表, Merge两个链表。时间复杂度和常数级空间复杂度下,对链表进行排序吗?1、由于时间复杂度的要求,选择。
2023-03-08 15:37:51 87
原创 Leetcode DAY 56: 两个字符串的删除操作 and 编辑距离
如果不考虑word1[i - 1] 那么dp[i][j] = dp[i - 1][j] + 1;如果不考虑word2[j - 1] 那么dp[i][j] = dp[i][j - 1] + 1;(1)word1[i - 1] == word2[j - 1] 相当于不考虑word1[i]和word2[j] 只考虑前面的 所以dp[i][j] = dp[i - 1][j - 1]2、 word1[i - 1] & word2[j - 1]相等 ->不操作 dp = dp[i -1][j - 1]
2023-03-06 16:26:02 339
原创 Leetcode DAY 55: 判断子序列 and 不同的子序列
如果 s[i - 1] == t[j - 1] dp[i][j] = 使用s[i - 1]的dp + 不使用s[i - 1]的dp。dp[i][j] 表示以s[i - 1]为结尾的字符串 和 以t[j - 1]为结尾的字符串 的公共字符串长度。dp[i][j] 以s[i - 1]为结尾的字符串 包含以t[j - 1]为结尾的字符串 的个数。dp[i][j] 需要分析 s[i - 1] 与 t[j - 1]相不相等?如果不等于 dp[i][j] = dp[i - 1][j]
2023-03-05 15:09:54 178 1
原创 Leetcode: 剑指 Offer II 025. 链表中的两数相加
给定两个 非空链表 l1和 l2 来代表两个非负整数。数字最高位位于链表开始位置。它们的每个节点只存储一位数字。将这两数相加会返回一个新的链表。由于是从链表末尾开始计算的 所以选择用栈实现 把结果存到第三个栈中 然后第三个栈中的节点再连成链表。可以假设除了数字 0 之外,这两个数字都不会以零开头。
2023-03-03 21:19:31 64
原创 Leetcode DAY 52: 最长递增子序列 and 最长连续递增序列 and 最长重复子数组
最长递增子序列 and 最长连续递增序列 and 最长重复子数组
2023-03-03 12:51:41 63
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人