x86 smbus 下挂eeprom不能写问题

2023-05-16

     

目录

     

 背景

        分析

        驱动影响

       SPD register 接口

   只读

  修改验证

总结


 背景

         x86 smbus上下挂一个eeprom,只能读取,不能写入。

         写入命令采用

        i2cset -y -f 0 0x50 0 0x33  即向总线0 下的0x50 地址的eeprom偏移量0 写入数据0x33,

        命令输出 write failed.

        分析

        驱动影响

        查看  /sys/bus/i2c/下的设备信息,为:

    cd /sys/bus/i2c/devices/

      0-0036/ 0-0037/ 0-0050/ i2c-0/ i2c-1/ i2c-2/ i2c-3/ i2c-4/ i2c-5/ i2c-6/ i2c-7/ i2c-8/

     进而查看 0-0050 下面的name字段,查看名称为ee1004.

      走读内核代码, ee1004.c    drivers\misc\eeprom    

      以及lsmod 查看,可知存在驱动ee1004, 进而看上电 dmesg信息:

      

[    2.647416] ee1004 0-0050: 512 byte EE1004-compliant SPD EEPROM, read-only

  此处显示0x50 被识别为 SPD EEPROM,并且只读。

      针对如此,我们将ee1004驱动加入到/etc/modeprobe.d/backlist.conf中,使这个驱动不被加载。然而将此驱动不加载后,依然不能写,而且查看 /sys/bus/i2c/devices下面的设备0-0050依然存在,并且名字为ee1004.

       SPD register 接口

          根据上面的分析,我们注意到SPD这个信息,同时联想到X86 对内存的访问配置,于是继续分析dmesg信息,我们查找SPD关键字,并查看前后几行信息:

   

[    0.858493] i2c i2c-0: 1/4 memory slots populated (from DMI)
[    0.858861] i2c i2c-0: Successfully instantiated SPD at 0x50

   代码在   i2c-smbus.c    drivers\i2c  中,其中slot_count 和dimm_count分别为上面打印中1/4中的4和1。于是我们得到在eeprom地址为0x50-0x53时,会被此接口注册,将设备添加到i2c设备树下面。    

    

 于是,我们将eeprom的地址修改为0x57

  再次重新上电,/sys/bus/i2c/devices下已经没有0-0050设备。

   然而,我们依然不能对其进行写。

   只读

    再次回到dmesg信息,第一节提到的 read-only:

    1) eeprom有写保护机制,这个由硬件管脚决定,和硬件确认进行写保护的连接。

    2) dmesg里面一条关键信息

    [ 1.477401] i801_smbus 0000:00:1f.4: SPD Write Disable is set

      根据此条信息,走读桥片手册,smbus控制器部分,其中:

     

lspci -xxx -s 0:1f.4
00:1f.4 SMBus: Intel Corporation 100 Series/C230 Series Chipset Family SMBus (rev 31)
00: 86 80 23 a1 03 00 80 02 31 00 05 0c 00 00 00 00
10: 04 a0 82 df 00 00 00 00 00 00 00 00 00 00 00 00
20: 41 f0 00 00 00 00 00 00 00 00 00 00 86 80 70 72
30: 00 00 00 00 00 00 00 00 00 00 00 00 0b 01 00 00
40: 11 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00

 确认0x40寄存器为11,即SPDWD位被设置为1。那就是针对 0X50 -0X57地址段的设备都不能被写。

  修改验证

   此寄存器位位RW/O ,即read-write-once,在系统中已经不能写入。

  验证

   1)   在BIOS中将此位清除,则eeprom可以正常写。

    2)  smbus下挂非0x50-0x57的设备,例如本测试用的0x72的设备,即使SPDWD为1,依然可以写入。

总结

   为避免SPD被误写入,x86控制器引入此位,然而在我们的环境中,内存都用的颗粒,无需spd,同时下挂eeprom,导致被误伤。

     

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

x86 smbus 下挂eeprom不能写问题 的相关文章

  • x86汇编代码的语法

    我试图了解操作系统的基础知识 并在 OCW 中找到了相关课程 名为 6 828 我在课程的实验室中找到了引导加载程序的代码 我尝试了但不明白以下部分代码 Enable A20 For backwards compatibility with
  • 当他们说“参数以相反的顺序推动”时,这是什么意思?

    In the cdecl调用约定 它指出 Arguments are pushed in the reverse order right to left 我的问题是 逆序相对于什么非逆序 与功能文档相关吗 例如 如果我有以下函数文档 voi
  • 我无法在我的 Visual C Express Edition 2008 中汇编电影 (MMX) 指令

    当我尝试编译时movd指令显示错误为 error A2085 instruction or register not accepted in current CPU mode 我的代码如下 386 model flat c code add
  • x86 32 位汇编代码是否有效 x86 64 位汇编代码?

    所有 x86 32 位汇编代码都对 x86 64 位汇编代码有效吗 我想知道32位汇编代码是否是64位汇编代码的子集 即每个32位汇编代码都可以在64位环境中运行 我想答案是肯定的 因为64位Windows能够执行32位程序 但是后来我看到
  • 查看x86架构中的cpu缓存内容

    如何查看或转储基于 x86 的架构的 cpu 缓存内容 每次进行缓存刷新时 我如何才能看到刷新了什么 在哪里 你不能 真的 CPU 缓存被设计为对于 CPU 上运行的代码是透明的 它具有加快代码执行速度的效果 但 CPU 管理有关缓存的所有
  • C:将x86指令放入数组并执行它们[重复]

    这个问题在这里已经有答案了 有没有办法将处理器指令放入数组中 使其内存段可执行并将其作为简单函数运行 int main char myarr 13 0x90 0xc3 void myfunc void myarr myfunc return
  • 从不同线程写入相邻的数组元素?

    是否有任何现代的常见 CPU 从不同线程同时写入数组的相邻元素是不安全的 我对 x86 特别感兴趣 您可能会认为编译器不会做任何明显荒谬的事情来增加内存粒度 即使它在技术上符合标准 我对编写任意大结构的情况感兴趣 而不仅仅是本机类型 Not
  • 操作码的十六进制值

    我创建了一个非常简单的汇编程序 可以在 DOS 中打印字母 a 我在十六进制编辑器中打开它 结果是这样的 汇编代码 mov ah 2 mov dx a int 21h 十六进制代码 B4 02 B2 61 CD 21 我想了解它是如何生成的
  • 如何将 IA32 'cmp' 指令转换为 Y86?

    IA32 to Y86 ATT组装 我有以下 IA32 汇编代码 Bubble LFB0 pushl esi pushl ebx movl 16 esp esi movl 12 esp edx subl 1 esi andl esi esi
  • 如果您的程序+库不包含 SSE 指令,那么使用 VZEROUPPER 有用吗?

    我明白使用它很重要VZEROUPPER混合 SSE 和 AVX 代码时 但如果我只使用 AVX 和普通 x86 64 代码 而不使用任何旧版 SSE 指令怎么办 如果我从未在代码中使用单个 SSE 指令 是否有任何性能原因导致我需要使用VZ
  • x86 asm 反汇编程序库

    是否有任何可从 NET 调用的库 我可以在其中传递二进制数据并将其反汇编为 x86 汇编代码 如果您不介意使用 P Invoke 绑定到非托管 dll 请查看比引擎 http www beaengine org 它是您可能找到的最好的反汇编
  • 字大小及其指示

    请参阅下面关于各种指令集架构中的字长以及它与汇编语言的关系的问题 感谢您提供的所有帮助 先说几个事实 如有错误 请指正 处理器架构的字长表示 编辑 其中一些是错误的 请参阅下面 Seva 的帖子 每个寄存器的最大尺寸 每个内存地址的最大尺寸
  • 处理负整数的汇编 MASM

    我被指示用汇编语言编写一个程序 该程序将执行以下算术 A B C D A E 当没有负值发挥作用时 我成功地做到了这一点 但假设 A 5 B 4 C 3 D 2 和 E 1 这给了我们 5 4 3 2 5 1 或 6 这就是我需要帮助的地方
  • 链接描述文件未按预期跳过字节

    因此 我有这个汇编文件 我使用 GNU as 进行汇编 并使用链接器脚本与 GNU ld 进行链接 链接描述文件 boot ld INPUT boot o OUTPUT boot out ENTRY boot start SECTIONS
  • 获取比较指令的值

    据我了解 cmp 指令将设置标志寄存器中的一些位 然后 您可以使用 jle jnp 等指令基于这些指令进行分支 我想知道如何从比较中恢复整数值 示例 以下是有效的 c 语法 y x a gt 13 因此 a 与 13 进行比较 得到 tru
  • 为什么当设置为 TLS 选择器时,ES 和 DS 在 64 位内核上最终会归零?

    下面的 32 位程序调用set thread area 2 http linux die net man 2 set thread area在 GDT 中创建一个条目 该条目旨在用于 TLS 通常将结果选择器放入FS or GS并成功使用
  • 预取双类成员需要转换为 char*?

    我有一个正在使用的课程 mm prefetch 预先请求包含 double 类型的类成员的缓存行 class MyClass double getDouble return dbl other members double dbl othe
  • 大会,你好世界问题

    我正在 Linux 上学习 asm noobuntu 10 04 我得到了以下代码 http asm sourceforge net intro hello html http asm sourceforge net intro hello
  • 弹出 x86 堆栈以访问函数 arg 时出现分段错误

    我正在尝试链接 x86 程序集和 C 我的C程序 extern int plus 10 int include
  • 程序集比较标志理解

    我正在努力理解汇编程序中的以下代码片段 if EAX gt 5 EBX 1 else EBX 2 在汇编程序中 可以写如下 根据我的书 模拟jge操作说明 https www felixcloutier com x86 jcc您通常会使用

随机推荐

  • NSAttributedString文本属性设置的使用

    使用NSAttributedString进行文本属性的设置 设置字体属性 xff0c 默认值 xff1a 字体 xff1a Helvetica Neue 字号 xff1a 12 NSFontAttributeName NSMutableAt
  • http请求方法(GET、POST、HEAD、OPTIONS、PUT、DELETE、TRACE、CONNECT)

    根据HTTP标准 xff0c HTTP请求可以使用多种请求方法 HTTP的1 0版本中只有三种请求方法 xff1a GET POST 和 HEAD方法 到了1 1版本时 xff0c 新增加了五种请求方法 xff1a OPTIONS PUT
  • MongoDB可视化工具 Studio 3T

    告别终端使用可视化工具Studio 3T对MongoDB进行数据库的操作 简单的使用步骤介绍 1 启动MongoDB服务器 xff08 方法见MongoDB介绍与安装中的介绍 xff09 2 连接MongoDB服务器 3 操作数据库
  • 微信小程序开发——form表单

    WeChat小程序交流 xff08 QQ群 xff1a 769977169 xff09 效果图 代码示例 1 xxx wxml lt form bindsubmit 61 39 submitClick 39 bindreset 61 39
  • 苹果电脑(Mac mini或Macbook或iMac)恢复出厂设置

    苹果电脑 xff08 Mac mini或Macbook或iMac xff09 恢复出厂设置 xff0c 首先要做好如下的准备 xff1a 第一 xff1a 数据的备份 xff1b 第二 xff1a 保证正常的wifi连接 xff1b 第三
  • 【NLP】用ML实现中文短文本分类(二分类)

    1 用ML实现外卖评论的分类 步骤 语料加载 分词 去停用词 抽取词向量特征 分别进行算法建模和模型训练 评估 计算AUC值 模型对比 1 进行语料加载 在此之前 xff0c 引入python依赖的包 xff0c 并将全部语料和停用词dic
  • jupyter报错:[Errno 2] No such file or directory: xxx

    可能解决方法1 xff1a 使用 pwd语句查看当前代码所在目录 xff0c 根据这个目录地址 xff08 如 home lp xff09 xff0c 再导入文件 xff0c 如np load data test txt 导入的就是 hom
  • ASP.NET Core Blazor与JavaScript 互操作(相互调用)

    1 xff09 C 调用JS xff0c 需要依赖注入IJSRuntime xff08 默认已经包含了 xff09 xff0c 只能在组件或者页面中进行调用 InvokeAsync lt TValue gt String Object 异步
  • leetcode多线程合集

    1114 按序打印 与1116题类似 xff0c 使用condition variable span class token keyword class span span class token class name Foo span s
  • 人工智能是什么?

    人工智能是什么 xff1f 欢迎大家迈入人工智能的大门1 人工智能的定义2 人工智能的话题3 人工智能的四大技术分支4 人工智能的主要应用领域5 人工智能的三种形态5 1 弱人工智能到强人工智能有多难 xff1f 5 2 弱人工智能的前进方
  • Gradle Wrapper 详解

    Gradle Wrapper 详解 我们介绍了 Android 项目的目录及 Gradle 配置 xff0c 我们提到有个目录是 gradle wrapper 今天这篇文章我们来学习 Gradle Wrapper 通过这篇文章我们将了解什么
  • 一、LCD12864(带字库的)使用教程:

    一 LCD12864简介 LCD12864液晶显示 xff0c 也就是屏幕上总共有128 64 xff0c 个点 xff0c 每个点就只有两种状态亮和不亮我这里使用的就是带字库的 xff0c 直接可以显示中文 xff0c 不需要自己去编码
  • 使用cpolar发布群晖NAS上的网页 下篇(7.X版)

    系列文章 使用cpolar发布群晖NAS上的网页 上篇 xff08 7 X版 xff09 使用cpolar发布群晖NAS上的网页 中篇 xff08 7 X版 xff09 使用cpolar发布群晖NAS上的网页 下篇 xff08 7 X版 x
  • 滴水石穿

    不积跬步 xff0c 无以至千里 xff1b 不积小流 xff0c 无以成江海 1 hashcode相等两个类一定相等吗 equals呢 相反呢 hashcode相等 xff0c 两个类不一定相等 xff1b equals相等 xff0c
  • CAD批量打图精灵功能列表

    功能简介功能细分识别图框识别直线 多段线 二维多段线 三维多段线 面域 视口 代理实体 块参照 外部参照单图模式 xff0c 识别整个图形的边界 xff0c 适用于模型或布局只有一张图的情况多图模式 xff0c 识别矩形或无矩形块边界标准
  • Linux下VirtualBox虚拟机的命令行启动/关闭方法和开机自动启动

    SUN VirtualBox 的命令行启动 关闭方法简介 VirtualBox 详细命令 linux开机自动启动虚拟机系统 当你安装很多套Virtualbox的虚拟机器系统后 xff0c 希望能在开机后自动启动虚拟机器的系统 开启记事本 x
  • NSIS制作安装软件过程

    目录 1 工具介绍 1 1 界面设计用 xff0d xff0d NSIS Dialog Designer 1 2 编辑及向导 xff0d xff0d nisedit2 0 3 1 3 控件信息查看 Au3Info exe 2 脚本的结构 1
  • 欧拉题目收集

    nbsp https www oschina net group kunpeng 赛题6 容器网络可视化 赛题类别 操作系统 nbsp 赛题难度 中 nbsp 赛题描述 容器场景的微服务运维已经在向可视化方式演进 可视化运维中最大的内容是A
  • ASP.NET Core Blazor: 两种IJSRuntime依赖注入的方式

    1 xff09 将 IJSRuntime 抽象注入Razor组件或者页面 razor 中 xff1a public partial class ToolsWidget Inject private IJSRuntime JSRuntime
  • x86 smbus 下挂eeprom不能写问题

    目录 背景 分析 驱动影响 SPD register 接口 只读 修改验证 总结 背景 x86 smbus上下挂一个eeprom xff0c 只能读取 xff0c 不能写入 写入命令采用 xff1a i2cset y f 0 0x50 0