- 博客(115)
- 收藏
- 关注
原创 UEFI学习笔记(九):ACPI详解
DSDT (Differentiated System Description Table)是 ACPI 表中的核心之一,定义了系统中的硬件和设备。它包括设备对象、方法、操作和控制策略。DSDT 描述了系统的设备和其功能,提供了系统启动和运行时所需的基本设备信息。通常在系统固件中存储,并由操作系统在启动时加载和解释。
2024-09-14 09:57:16 762
原创 UEFI入门学习笔记(详细版,持续更新)
每个平台有其对应的 .dsc 文件(平台描述文件)和 .fdf 文件(固件描述文件),用来定义要构建的平台、所包含的模块、库、驱动程序,以及固件映像的布局。.dsc 文件是编译每个模块的主要参考,而 .fdf 文件是生成固件映像时的重要文件。模块是一个最小的可编译单元,Package是最小的对外发布的单元。模块放在包里面的。模块包括LibraryDriver等类型。每一个模块都有一个INF文件。HOB(Hand-Off Block)主要用于在不同的阶段共享数据。
2024-09-13 10:29:49 1222
原创 UEFI学习笔记(八):Memory Services
HOB(Hand-Off Block)主要用于在不同的阶段共享数据。由于Flash是只读的,直接修改全局变量是无效的。因此,在PEI(Pre-EFI Initialization)阶段,需要使用HOB来共享全局信息。HOB提供了一块临时内存,这块内存是CPU缓存的一部分,可以进行读写操作,从而在不同的阶段之间传递和共享信息。
2024-09-12 14:42:53 1010
原创 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 464
原创 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 461
原创 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 890
原创 UEFI学习笔记(二):edk2构建编译流程
每个平台有其对应的 .dsc 文件(平台描述文件)和 .fdf 文件(固件描述文件),用来定义要构建的平台、所包含的模块、库、驱动程序,以及固件映像的布局。.dsc 文件是编译每个模块的主要参考,而 .fdf 文件是生成固件映像时的重要文件。
2024-09-10 11:10:36 673
原创 动态链接库加到环境变量的方法 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 584
原创 安装交叉编译工具链aarch64-linux-gnu-g++ 以及cmake测试
【代码】安装交叉编译工具链aarch64-linux-gnu-g++ 以及cmake测试。
2023-07-24 11:07:06 9936 3
原创 6.28 内存分配/管理 学习总结
在应用程序中,内存中连续的8个字节看似是连续的,但是在物理上并不是连续的,这是由于8个bank实际上是可以并行工作的。内存对其的情况下,工作一次,把得到的数据拼起来,就能得到内存中地址连续的8个字节,从而提高了IO效率。通过上述实验结果可以得出,在64位系统下,我们申请的内存实际占用的大小会是16x + 8,分配的内存大小在每个区间内会对应相同的一个实际占用内存大小。内存对齐就是把各种类型数据按照一定的规则在空间上排列,而不是按照顺序一个接一个的排放,这种就称为内存对齐,内存对齐是指首地址对齐。
2023-06-28 10:32:13 298
原创 Leetcode C++: 剑指 Offer 07. 重建二叉树 (根据前序遍历和中序遍历的结果)
根据该位置以及中序遍历的右边界计算出root的左边的节点个数, 然后new一个root,通过递归给root->left和root->right赋值。输入某二叉树的前序遍历和中序遍历的结果,请构建该二叉树并返回其根节点。我们需要根据前序遍历的根节点的值去定位到中序遍历中root的位置,假设输入的前序遍历和中序遍历的结果中都不含重复的数字。递归结束条件: 左边界 > 有边界。前序遍历:[根,[根的左],[根的右]]中序遍历:[[根的左],根,[根的右]]
2023-04-10 16:30:11 99
原创 3.17 Leetcode: 2389. Longest Subsequence With Limited Sum 和有限的最长子序列
对nums进行从小到大排序 (因为从小的数开始取 才会最长)然后求前缀和 遍历queries数组 找前缀和中第一个大于q的数的地址(利用upper_bound函数), 该地址减去 前缀和的初始地址 就是最大长度。
2023-03-17 21:28:35 92
原创 3.15 Leetcode: 1615. Maximal Network Rank
网络秩 = i节点相连的道路 + j节点相连的道路 - nb[i][j] (遍历更新)定义一个邻接矩阵nb 表示 两个节点是否相连 相连为1 不相连为0。最大网络秩是与两个城市直接相连的道路总数的最大值。
2023-03-16 20:04:43 140
原创 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 120
原创 Leetcode:1605. Find Valid Matrix Given Row and Column Sums 给定行和列的和求可行矩阵
每个的值必须要小于 当前行的和and当前列的和 所以为 min(rs[i], cs[j])并且对每行的和 and 每列的和进行更新 (-val)
2023-03-14 21:15:01 108
原创 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 83
原创 Leetcode : 1590. Make Sum Divisible by P
移除subarray 只需要固定两个端点 (subsequence 移除不一定连续的子序列)1、前缀和 + 暴力解法 (超过时间了 没通过 但逻辑应该是没问题的)2、前缀和 + 哈希表。
2023-03-13 10:06:25 247
原创 Leetcode DAY 60:柱状图中最大的矩形Largest Rectangle in Histogram
【代码】Leetcode DAY 60:柱状图中最大的矩形Largest Rectangle in Histogram。
2023-03-10 11:19:50 118
原创 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 92
原创 Leetcode DAY 58: 每日温度 and 下一个更大元素 I
把第0个元素(的下标)放入栈中 从第一个元素开始遍历 比较第一个元素和栈顶元素的大小 如果小于等于栈顶元素 放入栈中 循环判断如果大于栈顶元素 则得到当前res[st.top()]为当前元素和栈顶元素下标的差值 再把当前元素放入栈中。本题相当于找nums2中第i个元素右边比他大的第一个数 并且把第i个元素与nums1中的元素进行匹配 把右边第一个比他大的数放进res[index]中。两个for循环 遍历并判断(超出时间限制了)496.下一个更大元素 I。
2023-03-08 21:23:21 60
原创 Leetcode: 剑指 Offer II 077. 链表排序
2、需要把链表分为前后两个部分 分别进行归并排序后 合并链表。3、需要实现的函数:split链表, Merge两个链表。时间复杂度和常数级空间复杂度下,对链表进行排序吗?1、由于时间复杂度的要求,选择。
2023-03-08 15:37:51 78
原创 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 326
原创 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 169 1
原创 Leetcode: 剑指 Offer II 025. 链表中的两数相加
给定两个 非空链表 l1和 l2 来代表两个非负整数。数字最高位位于链表开始位置。它们的每个节点只存储一位数字。将这两数相加会返回一个新的链表。由于是从链表末尾开始计算的 所以选择用栈实现 把结果存到第三个栈中 然后第三个栈中的节点再连成链表。可以假设除了数字 0 之外,这两个数字都不会以零开头。
2023-03-03 21:19:31 52
原创 Leetcode DAY 52: 最长递增子序列 and 最长连续递增序列 and 最长重复子数组
最长递增子序列 and 最长连续递增序列 and 最长重复子数组
2023-03-03 12:51:41 58
原创 Leetcode DAY 51: 最佳买卖股票时机含冷冻期 and 买卖股票的最佳时机含手续费
最佳买卖股票时机含冷冻期 and 买卖股票的最佳时机含手续费
2023-03-02 15:44:00 66
原创 Leetcode: 1144.递减元素使数组呈锯齿状 C++
或者,每个奇数索引对应的元素都大于相邻的元素,即 A[0] < A[1] > A[2] < A[3] > A[4] < ...每个偶数索引对应的元素都大于相邻的元素,即 A[0] > A[1] < A[2] > A[3] < A[4] > ...给你一个整数数组 nums,每次 操作 会从中选择一个元素并 将该元素的值减少 1。返回将数组 nums 转换为锯齿数组所需的最小操作次数。
2023-02-28 12:00:01 73
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人