有什么方法可以从 Linux 用户空间向 SD 卡发送命令吗?

2023-11-23

我有一个 Debian 7.0 Linux 3.2 嵌入式 ARM TI AM335x 系统。这是我们开发的定制板,但是SD卡部分至少和开发板是一样的。我想向卡发出一些特定于供应商的 SD 卡命令,即使用 CMD56 读取一些 SMART 数据。

有没有办法向SD卡控制器发送命令并从用户空间读取响应?


您的司机是omap_hsmmc根据http://processors.wiki.ti.com/index.php/AM335x_MMC/SD_Driver%27s_Guide一些信息也在https://www.kernel.org/doc/Documentation/devicetree/bindings/mmc/ti-omap-hsmmc.txt

经过一些web在 SD 卡中搜索 SMART 监控支持,我得到搜索查询mmc smartctl(因为smartctl是 Linux 中 *ATA 的 SMART 监控实用程序的名称,并且mmc是实现MMC、SD、SDHC卡和控制器的内核子系统。我发现该错误已填充一些移动PC操作系统, https://code.google.com/p/chromium/issues/detail?id=315380作者:格温达尔·格里尼奥

如果根设备是 SATA 设备:

  • 添加 hdparm -I /dev/sda 的输出
  • 添加 smartctl -a /dev/sda 的输出

如果根设备是eMMC设备:

  • 当 mmc-utils 将成为映像的一部分时,添加类似的命令输出。

听起来像是mmc-utils它是为 SD 卡实施 SMART 的首选工具。有 home git 的mmc-utils在 kernel.org 上:http://git.kernel.org/cgit/linux/kernel/git/cjb/mmc-utils.git/tree/

我在这里没有看到“SMART”,但是mmc-utils/mmc_cmds.c具有使用以下代码将自定义命令发送到卡的代码ioctl(fd, MMC_IOC_CMD, (struct mmc_ioc_cmd*) &ioctl_data)fd 指向正确mmcblkX设备(我希望这适用于大多数 SD 控制器)。 Johan RUDHOLM 的代码(来自 st-ericsson,2012,GPLv2):

   int read_extcsd(int fd, __u8 *ext_csd)
   {
       struct mmc_ioc_cmd idata;
       memset(&idata, 0, sizeof(idata));
       memset(ext_csd, 0, sizeof(__u8) * 512);
       idata.write_flag = 0;
       idata.opcode = MMC_SEND_EXT_CSD;
       idata.arg = 0;
       idata.flags = MMC_RSP_SPI_R1 | MMC_RSP_R1 | MMC_CMD_ADTC;
       idata.blksz = 512;
       idata.blocks = 1;
       mmc_ioc_cmd_set_data(idata, ext_csd);

       return  ioctl(fd, MMC_IOC_CMD, &idata);
   }

   int write_extcsd_value(int fd, __u8 index, __u8 value)
   {
       struct mmc_ioc_cmd idata;

       memset(&idata, 0, sizeof(idata));
       idata.write_flag = 1;
       idata.opcode = MMC_SWITCH;
       idata.arg = (MMC_SWITCH_MODE_WRITE_BYTE << 24) |
            (index << 16) |
            (value << 8) |
            EXT_CSD_CMD_SET_NORMAL;
       idata.flags = MMC_RSP_SPI_R1B | MMC_RSP_R1B | MMC_CMD_AC;

       return ioctl(fd, MMC_IOC_CMD, &idata);
   }

MMC_IOC_CMD 的一些文档和示例由 Shashidhar Hiremath 于 2011 年 12 月 20 日 14:54 在 LKML 中发布“[PATCH 1/1] mmc:用于测试 SD/MMC 命令和用于 MMC 卡重置的额外 IOCTL 命令的用户应用程序”

官方 userAPI (uapi)struct mmc_ioc_cmd位于 Linux 源代码树中include/uapi/linux/mmc/ioctl.h:

  6 struct mmc_ioc_cmd {
...
 10         /* Application-specific command.  true = precede with CMD55 */
 11         int is_acmd;
...
 51  * Since this ioctl is only meant to enhance (and not replace) normal access
 52  * to the mmc bus device...
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

有什么方法可以从 Linux 用户空间向 SD 卡发送命令吗? 的相关文章

  • Json.net 将数字属性序列化为字符串

    我正在使用 JsonConvert SerializeObject 序列化模型对象 服务器期望所有字段都是字符串 我的模型对象具有数字属性和字符串属性 我无法向模型对象添加属性 有没有办法将所有属性值序列化为字符串 我必须只支持序列化 而不
  • 设置Linux使用特定版本的python进行编译

    我正在运行 Ubuntu 来编译一组需要 python 2 4 的代码 如何设置终端启动器 以便当我打开该启动器时 所有与 python 相关的命令都将使用 python 2 4 而不是 Ubuntu 中默认的 python 2 6 Set
  • HttpContext.Current.Items["value"] 不起作用,因为 AngularJS 调用创建新会话

    我正在使用 C MVC 和 AngularJS 我的问题是我的 MVC 程序创建了一个HttpContext Current Items value 并在初始主控制器中设置值 但是当我的 AngularJS 通过 ajax 调用调用应用程序
  • 无法构建 lldb - 找不到“原子”文件

    我正在尝试建立lldb这是 Clang LLVM 3 4 2 下载的一部分LLVM 下载页面 http llvm org releases download html 我可以构建 LLVM Clang Compiler RT 和 Extra
  • 使用 Visual Studio 确定堆栈空间

    我正在 Visual Studio 2005 中使用 C 进行编程 我有一个多线程程序 但这在这里并不是特别重要 如何确定 大约 我的线程使用了多少堆栈空间 我计划使用的技术是将堆栈内存设置为某个预定值 例如 0xDEADBEEF 长时间运
  • TextBlock 中的 C# 超链接:单击它时没有任何反应

    在我的 C 独立应用程序中 我想让用户单击一个链接来启动他们最喜欢的浏览器 System Windows Controls TextBlock text new TextBlock Run run new Run Link Text Hyp
  • 如何在 C# 中创建唯一的随机字符序列?

    我正在我的应用程序中实现 URL 缩短功能 以便为我的用户提供可在 Twitter 中使用的更短的替代 URL 关键是要独立于提供相同服务的缩短服务 并将其作为我的网络应用程序的一项功能 创建约 6 个字符的独特随机字符序列的最佳方法是什么
  • 如何将大数组发送到存储过程

    我需要将多个列表 大约 20000 个 id 发送到存储过程 如下所示 1391924 6546510 7419635 6599910 6546888 1116510 6546720 我有这个数据List
  • 套接字编程指针错误

    我正在尝试学习一些套接字编程 我对 c 也很陌生 并且在创建服务器时遇到了一些问题 我在指针方面遇到问题 当我尝试运行代码时出现的错误是 警告 将 int 传递给 socklen t 类型的参数 又名 unsigned int 会在指针之间
  • 如何将 CreateThread 用于类成员函数?

    你如何使用CreateThread 创建作为类成员的函数的线程 您需要创建一个静态方法来用作实际的线程启动函数 并将一个指向实例的指针作为lpParameter论证CreateThread 这将被传递给静态方法 该方法可以将其转换为对象指针
  • 代码分析警告 CA2213 - 在 IDisposable 支持字段上调用 ​​Dispose()

    想要发布这个 尽管我在写问题时就弄清楚了 下面将发布答案 使用 VS Code Analysis 收到以下警告 警告 CA2213 DBConn 包含 IDisposable 类型的字段 DBConn k BackingField SqlC
  • 引用未初始化的对象

    在解释问题之前 我想指出我知道给定的示例是糟糕的代码 我已经在看std shared ptr以更合理的方式实现我的目标 写这篇文章的原因只是我的好奇心和学习新东西的愿望 预先感谢您的帮助 今天我的解析器代码有点混乱 优化的东西等等 我专注于
  • 编译C代码字符串

    这里真的是一个离奇的问题 但是有没有一种方法可以在 GCC 中编译 C 代码字符串 而无需任何介质来保存该字符串 例如源文件 大致如下 gcc include
  • 如何创建一个包含自身列表的结构?

    我想创建一个结构 其中包含相同结构的列表 如下所示 include
  • GCC 为什么以及如何编译缺少 return 语句的函数?

    考虑 include
  • 我应该从私有派生类到其基类进行指针转换吗?

    我从 C FAQ 中找到了这个 一般来说 没有 来自成员函数或某个成员的朋友 私有派生类 与基类的关系是 已知 并且向上转换 PrivatelyDer 到 Base 或 PrivatelyDer to Base 是安全的 不 需要或推荐演员
  • 如何等到我的批处理文件完成

    我正在做一个程序 我需要启动 cmd 并启动一个批处理文件 问题是我正在使用MyProcess WaithForexit 我认为它不会等到批处理文件处理完成 它只是等待 cmd 关闭 到目前为止我的代码 System Diagnostics
  • 在 C++ 中连接 __FILE__ 和 __LINE__ 宏

    我希望我的异常消息包含有关异常位置的信息 所以我想要这样的东西 define LOCATION FILE LINE throw std exception std string ABCD LOCATION 这个定义显然是不正确的 我怎样才能
  • 如何在 Application.Run(form1) 执行时隐藏 form1?

    我有一个运行的 form1Application Run 我想隐藏这个表单 我需要它隐藏 因为我在后台运行一些东西 所以它们必须执行 并打开另一个表单进行登录 我尝试的方法是在我的 form1 构造函数中执行命令this Hide 如果登录
  • 添加触发器到转换

    如何在 Enterprise Architect 中的状态机转换的 属性 约束 触发器 区域添加触发器 报价是您在 EA 中手动到达那里的方式 我尝试过的 下面 这实际上导致触发器被添加到状态机 但我需要将其链接到特定的转换 多变的状态机属

随机推荐

  • 在 OnClickListener 内部我无法访问很多东西 - 如何处理?

    在 OnClickListener 内部 我无法访问作用域 外部 的大多数变量 如下所示 findViewById R id Button01 setOnClickListener new OnClickListener Override
  • 如何读取文件注释字段

    在 OS X Finder 中 有 注释 文件属性 可以通过添加 注释 列在查找器中检查它 也可以在右键单击文件或文件夹并选择 获取信息 后进行编辑 检查 如何在 swift 或 Objective C 中读取这个值 我已经检查过 NSUR
  • GIT:仅从 GitHub 克隆特定分支

    有没有可能从 GitHub 克隆不完整的存储库 而只是克隆选定的分支 我发现可以使用命令进行单分支克隆 git 克隆 git github path to repository git branch my branch 1 single b
  • HttpClient 和 Unity 的 UnityWebRequest/WWW API 的区别

    Unity 现在支持 NET 4 5 我可以使用HttpClient类来自System Net Http命名空间 这很棒 因为我有现有的客户端库 因此很容易重用 有谁知道内部情况之间的区别使用单声道 HttpClient and Unity
  • PHP - 关闭浏览器后会话销毁

    虽然这个问题有多个重复项 但我找不到适合我的正确解决方案 需要一些帮助 我用过ini set session cookie lifetime 0 在我的配置文件中 但它并不能帮助我在浏览器关闭时销毁会话 应用电流 1 在身份验证页面中 如果
  • 上课T?添加范围 ICollection?

    我尝试做静态类 添加到 icollection 但我遇到了一些我似乎无法克服的问题 这就是我得到的方式 以便我可以在方法中传递 ICollection 原因T是说它无法解决 然后我想知道有没有办法在 icollection 上执行 AddR
  • genfromtxt 返回 NaN 行

    我正在尝试使用 numpy 读取 csv 文件 并且有以下代码 from numpy import genfromtxt data genfromtxt open errerr csv r names True delimiter 并出现以
  • 从c#中的控制台输入多行

    我正在尝试从控制台读取 c 中的一些值 然后处理它们 但是我陷入了错误 控制台的输入是 Name ABCD School Xyz Marks 80 here the user enters a new line before enterin
  • git clone:致命:无法从重定向更新 url 库:

    我正在尝试将 gitlab 克隆到我的本地库 在进行克隆时出现错误 致命 无法通过重定向更新 url 库 要求 重定向 用户签名 链接 任何人都可以让我知道如何解决这个问题 是的 我能够解决这个问题 粘贴 URL 时 我们不应该使用浏览器中
  • 为什么这里不需要显式强制转换?

    class MyClass void myMethod byte b System out print myMethod1 public static void main String args MyClass me new MyClass
  • nodejs require - 模块名称区分大小写问题

    最近我发现了一个关于node js require机制的奇怪问题 您可能会认为 由于 Windows 文件系统 所需模块是否区分大小写并不重要 所以 模块A require fancyModule 模块B require fancymodu
  • 如何抑制詹金斯管道控制台输出中的源脚本行回显?

    我正在 Jenkins 中编写一个管道作业 它在管道控制台输出中显示下游作业的输出控制台 到目前为止 该作业正在运行 但由于管道作业本身将所有回显线添加到输出中 因此输出确实很难读取 Started by user email protec
  • Codeigniter - 未指定输入文件

    我是 Codeigniter 的初学者 我看到了 CI 教程 只是想做一件简单的事情 我下载了 CI 并将此文件添加到控制器目录中 但它不起作用 当我尝试使用它访问它时http index php site我得到输出 未指定输入文件 顺便说
  • 谷歌翻译顶栏隐藏

    我在我的网站上使用谷歌翻译 我想隐藏谷歌翻译的顶部栏 请告诉我如何隐藏该栏 请在此处检查我的网站链接http www rewords com让我知道我要隐藏那个栏吗 Thanks 通过 CSS 完成 goog te banner frame
  • :root 变量在 :before 元素上不可用

    我将很多 css 变量分配给 root 但这些变量在我的 before 元素中无法访问 我在网上找不到任何关于此的信息 当检查 before 元素的父元素时 我在谷歌开发工具的样式面板底部看到所有 root 变量 请参阅下面的屏幕截图 my
  • 如何在 Python 中对函数进行深度复制?

    我想在 Python 中制作一个函数的深度复制 这copy根据该模块没有帮助文档 其中说 该模块不复制模块 方法 堆栈跟踪 堆栈帧 文件等类型 套接字 窗口 数组或任何类似的类型 它确实 复制 函数和类 浅层 并深入 通过不变地返回原始对象
  • 如何检测 makefile `--silent/--quiet` 命令行选项是否已设置?

    如何检测makefile是否存在 silent quiet命令行选项已设置 相关问题 如何检测是否使用 rake 指定了 quiet 选项 我认为你需要 findstring s word 1 MAKEFLAGS 因为 MAKEFLAGS
  • calendar.getDisplayName 返回错误的日期

    下面是我的程序 当我输入相关的月份 日期和年份时 它返回错误的日期名称 我在这里缺少什么 我的计划 import java util Calendar import java util Locale import java util Sca
  • 理解git:将分支连接到远程存储库

    我在 github 上有一个存储库 比如 testrepo 现在我想设置一个本地存储库repo有一个分支origin master我希望能够从存储库中编辑内容 repo origin master lt gt origin master 克
  • 有什么方法可以从 Linux 用户空间向 SD 卡发送命令吗?

    我有一个 Debian 7 0 Linux 3 2 嵌入式 ARM TI AM335x 系统 这是我们开发的定制板 但是SD卡部分至少和开发板是一样的 我想向卡发出一些特定于供应商的 SD 卡命令 即使用 CMD56 读取一些 SMART