zoukankan      html  css  js  c++  java
  • dd命令的高级应用

    dd是Linux上的一个常用的命令。例如:dd if=/1.txt of=/tmp/2.txt
         (其中, if代表input file;of代表output file, 命令的结果就是将根目录下的1.txt的内容拷贝到/tmp目录的的2.txt。)

         当然,如果只是用dd做这样的事情显然大材小用了,因为cp可以干同样的事情,而且更简单。

     
         下面就介绍一下dd的“高级”应用:

     
    (一)直接读写闪存
        在嵌入式系统中,经常需要测试系统文件读写的性能,如果想绕过文件系统(文件系统一般都有自己的cache),直接测试闪存驱动的性能,最简单的方法就是dd。
        一般,闪存(NAND)会有几个分区,每个分区对应/dev/mtd*的一个结点:

     

     写操作
     dd if=/dev/urandom of=/dev/mtd1 bs=4096 count=1000
    (上面这个命令就是从/dev/urandom中拷贝文件到mtd1这个分区上,每次读写的数据量是4096个字节,拷贝1000次,因此总的数据量就4M.)

     读操作
     dd if=/dev/mtd1 of=/dev/null bs=4096 count=1000
     (上面这个命令就是从分区mtd1中拷贝文件到空设备/dev/null上,每次读写的数据量是4096个字节,拷贝1000次,因此总的数据量就4M.)
     
    dd执行完毕后会输出的吞吐率。
     
    (二)DirectIO

        在有些系统上,没有mtd节点或者不能直接操作存储设别,如果想测试文件读写性能,如何消除文件系统的影响呢?
        dd命令有一组参数oflag和iflag, 控制源文件和目标文件的读写方式为direct IO,即读或写文件时越过操作系统的读写buffer。如果指定oflag=direct,nonblock,写文件时忽略cache的影响;而如果指定iflag=direct,nonblock,读文件时忽略cache的影响
     
        下面就是一组实测数据,从中可以看出cache对最终性能的影响。

       


         flag 中除了可以指定direct和nonblock,还可以指定其他的值,具体参见: http://www.gnu.org/software/coreutils/manual/html_node/dd-invocation.html
         需要注意的是有些的平台可能只支持一部分flag.
     
    (三) 拷贝屏幕

        利用dd可以实现截屏,假设屏幕对应的设备节点/dev/fb0,屏幕大小是600×800,屏幕像素的格式是rgb565(每个像素对应两个字节),则命令如下:
                dd if=/dev/fb0 of=/tmp/1.dat bs=600 count=1600

        反之,也可以利用dd,直接写屏幕,例如下面的命令将随机渲染屏幕:
                dd if=/dev/urandom of=/dev/fb0 bs=600 count=1600


    (四) 串口读写

        dd还可以写串口,假设串口节点为/dev/ttyS0, 下面的命令将文件写入串口中:
              dd if=1.txt of=/dev/ttyS0

        下面是dd命令的调用流程:

     

         

        上图中的f_op数据结构是在open一个文件或设备时赋值的,其中的read, write等指向真正的操作该文件的函数。通过这个流程图,我们可以看出该设备或文件的驱动实现了标准的读写函数,就可以利用dd进行读写。

  • 相关阅读:
    [BZOJ1657] [Usaco2006 Mar] Mooo 奶牛的歌声 (单调栈)
    [BZOJ1016] [JSOI2008] 最小生成树计数 (Kruskal)
    [BZOJ1015] [JSOI2008] 星球大战starwar (并查集)
    [BZOJ1007] [HNOI2008] 水平可见直线 (凸包)
    [BZOJ1061] [Noi2008] 志愿者招募 (费用流)
    [BZOJ1051] [HAOI2006] 受欢迎的牛 (强联通分量)
    BZOJ2299: [HAOI2011]向量
    BZOJ2783: [JLOI2012]树
    BZOJ3521: [Poi2014]Salad Bar
    BZOJ2429: [HAOI2006]聪明的猴子
  • 原文地址:https://www.cnblogs.com/gzxbkk/p/7704498.html
Copyright © 2011-2022 走看看