ZYNQ emmc使用

1、设备树更改
1)如果使用的是sd0,zynq-zed.dts中已经有配置,不用进行更改

&sdhci0{
	u-boot,dm-pre-reloc;
	status = “okay”;
};

2)如果使用SD1则需要更改设备树

&sdhci1{
	u-boot,dm-pre-reloc;
	status = “okay”;
};

2、烧写设备树之后/dev下出现mmcblk0,还需要进行分区

fdisk /dev/mmcblk0

3、分区完成之后/dev下出现mmcblk0p1,初次使用还需要进行格式化,然后就可以mount了

mkfs.ext2 -T largefile /dev/mmcblk0p1  
mount /dev/mmcblk0p1 emmc/

4、测试读写速度
1)测试写速度

time dd if=/dev/zero bs=1024 count=1000000 of=1Gb.file

2)测试读速度

time dd if=1Gb.file bs=64k  of=/dev/null

5、硬盘由于强制关机之类的操作会造成一定的损坏,造成部分分区挂载不上,可以使用fsck来修复,文件系统中没有此命令,需要交叉编译e2fsprogs包。
1)下载源码包

http://sourceforge.net/projects/e2fsprogs/
cd arm-tools
tar xzvf e2fsprogs.tar.gz
cd e2fsprogs
mkdir release
cd release

2)交叉编译

../configure CC=arm-linux-gnueabi-gcc --enable-elf-shlibs --build=i686-linux --host=arm-linux --prefix=/home/test/arm_tools/e2fsprogs-1.44.5/release
make
make install

3)编译成功之后sbin下有相关命令,复制到开发板/usr/bin目录,复制lib目录下动态库到开发板/lib下,就可以进行磁盘修复了

fsck.ext4 -p /dev/mmcblk1p1

4)e2fsprogs包中的其他命令
badblocks
用来检查设备(通常是硬盘分区)上的坏块
blkid
定位并打印出块设备属性的命令行工具
chattr
在 ext2 和 ext3 文件系统上改变文件属性
compile_et
用来将错误代码(error-code)和相关出错信息的列表 转化为适用于 com_err 库的 C 语言文件
debugfs
文件系统调试器。能用来检查和改变 ext2 文件系统的状态
dumpe2fs
打印特定设备上现存的文件系统的超级块(super block)和块群(blocks group)的信息
e2fsck
用来检查和修复 ext2 和 ext3 文件系统
e2image
将关键的 ext2 文件系统数据保存到一个文件中
e2label
显示或者改变指定设备上的 ext2 文件系统标识
findfs
通过卷标或通用唯一标识符(UUID)寻找文件系统
fsck
用来检查或者修理文件系统
fsck.ext2
默认检查 ext2 文件系统
fsck.ext3
默认检查 ext3 文件系统
logsave
把一个命令的输出保存在日志文件中
lsattr
列出 ext2 文件系统上的文件属性
mk_cmds
将一个包含命令列表的文件转化为适用于子系统库 libss 的 C 源文件
mke2fs
用来创建 ext2 或 ext3 文件系统
mkfs.ext2
默认创建 ext2 文件系统
mkfs.ext3
默认创建 ext3 文件系统
mklost+found
在 ext2 文件系统上创建一个 lost+found 目录,并给该目录预分配磁盘数据块,以减轻 e2fsck 命令的负担。
resize2fs
可以用来增大或缩小 ext2 文件系统
tune2fs
调整 ext2 文件系统的可调参数
uuidgen
创建一个新的通用唯一标识符(UUID)。这个新 UUID 可以被认为是在所有已创建的 UUID 中独一无二的,不论是在本地的系统或者别的系统,过去还是将来。
libblkid
包含设备识别和节点释放的库函数
libcom_err
通用错误显示库
libe2p
用于 dumpe2fs, chattr, lsattr
libext2fs
允许用户级的程序操作 ext2 文件系统
libss
用于 debugfs
libuuid
用来给对象产生通用唯一标识符(UUID)使之可以在本地系统之外引用
6、从应用程序中读取emmc信息
1)shell命令awk,详解参照https://www.cnblogs.com/xudong-bupt/p/3721210.html,如果想要读取emmc总量,可执行

df | grep /dev/mmcblk1p1 |awk '{print $2}'

2)如果想在程序中执行shell命令,可使用popen,popen总是和pclose一起出现被使用的。popen() 创建一个管道,通过fork或者invoke一个子进程,然后执行command。返回值在标准IO流中,由于是在管道之中,因此数据流是单向的,command只能产生stdout或者读取stdin,因此type只有两个值:‘w’或‘r’。r表示command从管道中读取数据流,而w表示command的stdout输出到管道中。command无法同时读取和输出。popen返回该FIFO数据流的指针。代码如下:

int Emmc_Status_Query()
{
	char buffer[20];
	FILE *fp;
	int chars_read;
	fp = popen("df | grep vmhgfs-fuse | awk '{print $2}'","r");
	if(fp != NULL){
		chars_read = fread(buffer,sizeof(char),20,fp);
		pclose(fp);
		if(chars_read <= 0){
			return -1;
		}
		else{
			printf("total_size:%d\n",atoi(buffer));
		}
	}else{
		return  -1;
	}
	return 0;
}

你可能感兴趣的:(ZYNQ,linux)