x86 smbus 下挂eeprom不能写问题

news2024/11/25 8:23:49

     

目录

     

 背景

        分析

        驱动影响

       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,导致被误伤。

     

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1885.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

哈夫曼树原理及Java编码实现

文章目录前言一、哈夫曼树原理二、哈夫曼编码(Java题解)参考资料前言 所有博客文件目录索引:博客目录索引(持续更新) 源代码:Gitee—Huffman.java、Github—Huffman.java 一、哈夫曼树原理 对于哈夫曼树的构造以及权值计算原理…

Java语言高级-10MySQL-第2节MySQL安装与使用

2、MySQL数据库软件 1、安装 详细见视频 2、卸载 1、去mysql的安装目录找到my.ini文件 “复制datadir “C:/programData/MySQL/MySQL Server 5.5/Data” 2、卸载MySQL 控制面板->程序卸载,但是此时并没有卸载干净 3、删除C:/ProgramData目录下得MySQL文件夹 注意…

java 内部类

小镇做题家 前段时间很火的一个话题“小镇做题家”,我没有具体了解,我以为是在鼓励一些努力拼搏的人。 某一天,禁不住好奇,我打开了百度百科,看了看小镇做题家的解释 就是指一些村里或者小镇的人,通过学习…

模板和泛型编程(上)

目录函数模板泛型编程函数模板概念及原理函数模板的实例化函数模板的匹配原则类模板类模板实例化函数模板 泛型编程 泛型编程(Generic Programming)最初提出时的动机很简单直接:发明一种语言机制,能够帮助实现一个通用的标准容器…

猿创征文|Python迭代器、生成器、装饰器、函数闭包

欢迎关注博主 Mindtechnist 或加入【Linux C/C/Python社区】一起探讨和分享Linux C/C/Python/Shell编程、机器人技术、机器学习、机器视觉、嵌入式AI相关领域的知识和技术。 Python迭代器、生成器、装饰器、函数闭包1. 迭代器 iterator☞迭代器协议☞Python中的for循环2. 生成器…

C语言qsort()函数针对:整型、单个字符、字符串、结构体,超详细讲解(多维度分析举例,小白一看就懂!!!!!)

目录 一、前言 二、qsort()函数 🍑qsort()函数简介 🍉qsort()函数中整型、double型、字符型的应用 💦整型 💦 double型 💦字符排序 🍎qsort()函数在字符串中的应用 💦在字符串中按首字母…

Android NDK开发基础

文章目录cmake语法基础cmake添加日志:cmake增加宏字符串比较cmake在build.gradle中传递编译参数到cmake通过javah生成native对应的c头文件jni和java之间字符串的相互操作JavaVM和JNIEnv字符串的编码native方法静态注册和动态注册静态注册动态注册extern cC中STATIC和…

SpringCloud Alibaba-Sentinel保姆级教程

文章目录1、Sentinel前奏1.1、服务雪崩效应1.2、常见容错方案1、隔离2、超时3、限流4、熔断5、降级1.3、常见容错组件1、Hystrix2、Resilience4J3、Sentinel2、Sentinel入门2.1、什么是Sentinel2.2、实战编码1、安装Sentinel服务端2、微服务引入Sentinel2.3、Sentinel流控模式1…

YOLOv5蒸馏 | 知识蒸馏理论篇 | 1/2

之前在《一文搞懂【知识蒸馏】【Knowledge Distillation】算法原理》这篇文章中介绍过一些知识蒸馏的原理,这篇博文将会着重介绍目标检测领域的知识蒸馏原理。 文章目录 1.《Object detection at 200 Frames Per Second》1.1 蒸馏难点1.2 蒸馏损失1.3 实验结果2. 《Learning E…

计算机毕业设计ssm+vue基本微信小程序的体检预约小程序

项目介绍 我国经济迅速发展,人们对手机的需求越来越大,各种手机软件也都在被广泛应用,但是对于手机进行数据信息管理,对于手机的各种软件也是备受用户的喜爱,体检预约系统小程序被用户普遍使用,为方便用户…

【前端】CSS(1) —— CSS的基本语法和一些简单的选择器

JavaEE传送门JavaEE 网络原理——网络层与数据链路层 【前端】HTML入门 —— HTML的常见标签 目录CSS基本语法注释引入方式内部样式内联样式外部样式代码风格样式格式样式大小写空格规范CSS 选择器标签选择器类选择器id 选择器通配符选择器复合选择器后代选择器子选择器并集选…

文件包含漏洞和hash破解

介绍 Windows是当今世界最主要的操作系统,因为它易于使用的GUI可访问性。大约85%的市场份额已成为攻击的关键操作系统。此外,大多数组织使用Active Directory来设置其Windows域网络。微软聘请NTLM(New Technology LAN Manager)和…

Pico Neo3 4VR游戏下载地址及十大好玩游戏推荐

大家好,杰克今天为大家分享的是VR一体机游戏。 说到VR一体机,我们首先想到的一定是国产之光pico啦,picovr被认为是国内最被看好的VR一体机,有望在国内取代红极一时的OculusQuest,填补这块市场的空白。OculusQuest将6D…

#Primavera Unifier:关于零代码/低代码平台特点【2/3】

在之前对Unifier的介绍中,我提到了Unifier应用的一个非常关键的特征,及零代码快速配置使用,而为了更好的介绍Oracle Primavera Unifier 的零代码特点,以下我将通过3篇内容来逐一介绍零代码/低代码平台的特点。 前面介绍到了零代码…

Opencv项目实战:14 手势控制音量

目录 0、项目介绍 1、项目展示 2、项目搭建 3、项目的代码与讲解 4、项目资源 5、项目总结 0、项目介绍 本篇与上一篇有很多联系,大家可以看看这篇Opencv项目实战:13 手部追踪,我们将根据上一节的内容,进行一个拓展。本篇你…

AtCoder Beginner Contest 275 【E】【F】

E - Sugoroku 4 【概率dp】 题意: 对于每个样例,读入n,m,k。 一维数轴,你现在在0这个点上,目标是到达n这个点,你有k次掷骰子的机会,每次可能等概率的掷出1~m的任意一个数字&#xff…

面了一个4年经验的测试工程师,自动化都不会也要15k,我真是醉了...

在深圳这家金融公司也待了几年,被别人面试过也面试过别人,大大小小的事情也见识不少,今天又是团面的一天, 一百多个人都聚集在一起,因为公司最近在谈项目出来面试就2个人,无奈又被叫到面试房间。 整个过程…

.NET Core HttpReports 监控

HttpReports 基于.NET Core 开发的APM监控系统,使用MIT开源协议,主要功能包括,统计, 分析, 可视化, 监控,追踪等,适合在中小项目中使用。 语雀:https://www.yuque.com/httpreports/docs/uyaiil …

SQL注入之绕过is_numeric过滤

目录预备知识PHP常用的过滤类函数is_numeric()函数介绍实验目的实验环境实验步骤一通过源代码审计,发现临时文件实验步骤二通过分析源代码的执行逻辑,了解程序的功能,发现程序中的安全漏洞实验步骤三绕过过滤函数实现SQL注入预备知识 PHP常用…

Linux进程信号

文章目录什么是信号signal函数的功能(捕捉信号后自己处理)Core Dump(核心转储)kill,raise,alarm系统调用再度理解OS给进程发送信号信号集操作函数自定义捕捉详解什么是信号 生活中的信号:闹钟&…