我有一个Debian 7.0 Linux 3.2embedded式ARM TI AM335x系统。 这是我们开发的定制板,但是SD卡部分至less与开发板相同。 有一些特定于供应商的SD卡命令我想发给卡,即使用CMD56读取一些SMART数据。
有什么办法发送命令到SD卡控制器,并从用户空间读取响应?
在内核中使用printk
请问使用Linux Kernel支持最新的程序?
从程序员的angular度来看Linux内核和UNIX内核(如FreeBSD)之间的区别
内核模式驱动程序和IOCTL
您的驱动程序是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
在网络搜索sd卡中的SMART监视支持后,我得到了搜索查询mmc smartctl (因为smartctl是Linux中的* ATA的SMART监视实用程序的名称,而mmc是实现MMC,SD,SDHC卡和控制器的内核子系统。我发现这个bug是针对一些移动PC操作系统的 , https://code.google.com/p/chromium/issues/detail? id = 315380由Gwendal Grignou
如果根设备是SATA设备:
如果根设备是emmC设备:
当mmc-utils将成为图像的一部分时,添加一个类似的命令输出。
听起来像是mmc-utils它是实现SMART SD卡选择的工具。 kernel.org上有mmc-utils git: 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设备(I希望这与大多数SD控制器一起工作)。 由Johan RUDHOLM编写(来自st-ericsson,2012,GPLv2):
int read_extcsd(int fd,__u8 *ext_csd) { struct mmc_ioc_cmd idata; memset(&idata,sizeof(idata)); memset(ext_csd,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,&idata); } int write_extcsd_value(int fd,__u8 index,__u8 value) { struct mmc_ioc_cmd idata; memset(&idata,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,&idata); }
MMC_IOC_CMD的某些文档和示例在2011年12月20日14:54由Shashidhar Hiremath发布在LKML中“[PATCH 1/1] mmc:用于测试SD / MMC命令的用户应用程序和用于MMC卡重置的额外IOCTL命令”
struct mmc_ioc_cmd的官方用户API(uapi)在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...
最简单的方法是将SD控制器的存储空间进行mmap,然后将sd控制器的数据表命令写入控制器。
是的,有供应商特定的SD卡命令,您可以使用CMD56从SD卡读取SMART数据到您的设备。
主机必须能够支持供应商命令“CMD61”和“CMD56”。 CMD61和CMD56之间的FW繁忙时间需要5ms的延迟。
保罗。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。