【UEFI】---记录一次debug过程中的调试经验

最近在调试一次SMBIOS的动态更新以及I2c设备的配置读取时,遇到了很多问题,特此总结:

1. 第一个是调试一个I2c设备的时候,遇到了一个很奇怪的问题,也由此问题总结了下SMBUS模块的知识,如下:

 待完成

2. 在动态更新到SMBIOS某些type字串时,遇到很多细节问题,总结如下:

1)问题:同样的代码,放置位置不同会导致代码跑飞:

  如下图,在获得了SmBiosType1Record的Protocol时,如果StringNumber的两个变量赋值分开,将红框代码移至下面,就会导致值改变,目前还不太清楚原因,这个问题以后要注意。

 2) 有关某个SMBIOS的Handle值

 原本通过笔者认为,这个handle可以通过SmbiosType1Record->Hdr->Handle的方式直接获取到,但是实际也会有问题,第一个 Smbios->UpdateString()函数可以正常执行,但是执行完之后,在执行第二个时,Handle的值就不正确了,这个问题与上面的问题类似,都是在执行完第一个函数后,SmbiosType1Record这个结构体指针的值会有所变化,因此我怀疑第一个函数执行时,会改变SmbiosType1Record的指向或者内容。要搞清楚这个问题,又要牵扯到什么是Handle什么是Protocol了,他们在代码中的呈现形式什么呢?请参照如下文章:

3)在使用gEfiSmbiosProtocol下的函数UpdateString时,一定要注意更新的是字符串,需要注意传入String参数的格式,是要字符串格式的,还是普通的字符数组就可以,这是不一样的。

一定要重视这一点,这直接决定了debug的效率。而且以后又碰到任何更新string的数据的时候,均要去查看,形参中传入的指针是否是一个字符串指针,如果是的话,那么在获取该数据时,一定要注意最后一个Byte要为'\0',否则就会发生越界的问题。本次调试就遇到了这样的问题。

我将形参指针的指向的空间放置了要更新的字符串数据,但是没有按照字符‘\0’结尾,

如上代码,仅申请了空间,copy了字符串数据,没有以'\0'结尾,但实际上结果错误,一直在我发现到UpdateString函数中,对于字符串长度的获取是通过'\0'来判断结尾的,我才意识到问题所在。

 而后我在CopyMem数据,将最后一个数据设置成了'\0',UpdateString成功。这是个经验也是个教训,以后在碰到有关字符串的数据处理时,一定要提前看是否将其作为字符串来处理的。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
BIOS / Legacy Boot of UEFI-only media问题可以通过以下方法解决。 首先,我们需要了解BIOS和UEFI之间的差异。BIOS(Basic Input/Output System)是计算机启动并加载操作系统之前的一段软件。它使用传统的启动方式来识别和引导存储设备。相反,UEFI(Unified Extensible Firmware Interface)是最新的固件接口标准,支持更多功能和更大的扩展性。 当我们使用遵循UEFI标准的媒体时,由于它们没有传统的MBR(Master Boot Record)分区表,就会出现BIOS / Legacy Boot无法引导的问题。为了解决这个问题,我们可以采取以下措施: 1. 更新BIOS:首先,确保计算机的BIOS是最新的版本。有时,旧版本的BIOS可能无法支持UEFI引导。您可以通过访问计算机制造商的官方网站来检查最新的BIOS版本并进行更新。 2. 启用UEFI模式:进入计算机的BIOS设置界面,并启用UEFI模式。这样,您的计算机将能够使用UEFI标准的引导方式。 3. 禁用Secure Boot:如果UEFI模式下的引导仍然失败,您可以尝试禁用Secure Boot安全引导功能。Secure Boot是一种安全特性,要求引导的操作系统必须由受信任的数字证书进行签名。禁用Secure Boot可能会允许计算机引导UEFI-only媒体。 4. 使用第三方工具:如果以上方法无效,您还可以尝试使用第三方工具。例如,可以使用一些特定的引导管理器软件来模拟UEFI环境,实现在BIOS / Legacy Boot下引导UEFI-only媒体。 总之,解决BIOS / Legacy Boot of UEFI-only media的问题可以通过更新BIOS、启用UEFI模式、禁用Secure Boot以及使用第三方工具来实现。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值