最近在调试一次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成功。这是个经验也是个教训,以后在碰到有关字符串的数据处理时,一定要提前看是否将其作为字符串来处理的。

最新文章

  1. mysql 导出select语句结果到excel文件等
  2. 《玩转D语言系列》一、通过四个版本的 Hello Word 初识D语言
  3. go并发
  4. XtraGrid RepositoryItemCheckEdit 显示状态以及单选多选问题
  5. HTML5中的 Canvas
  6. 用FLASH,安智和IOS打电话方法
  7. Java 单链表的倒置
  8. iOS 时区问题总结 NSTimeZone
  9. Android_Studio 及SDK下载
  10. 【POJ1003】Hangover(二分搜索)
  11. JAVA之旅(十六)——String类,String常用方法,获取,判断,转换,替换,切割,子串,大小写转换,去除空格,比较
  12. 分布式进阶(十六)Zookeeper入门基础
  13. ajax的get 和post方式发送请求
  14. stark组件之展示数据(查)
  15. AtCoder Beginner Contest 120 D - Decayed Bridges(并查集)
  16. (转)CASE WHEN 用法
  17. mysql-python安装时mysql_config not found
  18. 【转】Oozie4.2.0配置安装实战
  19. PHP中预定义超全局数组(变量)
  20. 内核抢占实现(preempt) 【转】

热门文章

  1. python基础十一之迭代器和生成器
  2. 21个项目玩转深度学习:基于TensorFlow的实践详解03—打造自己的图像识别模型
  3. Linux 内核kobject 缺省属性
  4. vue-learning:7-template-v-bind-with-class-and-style
  5. vue-learning:12 - 2 - 区分:outerHTML - innerTHML - outerText - innerText - textContent
  6. Oracle单引号拼接和替换
  7. 使用springboot + druid + mybatisplus完成多数据源配置
  8. $tarjan$简要学习笔记
  9. HDFS的HA集群原理分析
  10. mumu模拟器手Q自动化配置