嵌入式:使用dd命令制作烧写文件
1. 使用dd命令制作烧写文件
环境:
bootargs=mem=64M console=ttyAMA0,115200 root=/dev/mtdblock2 rootfstype=jffs2 mtdparts=hi_sfc:512K(boot),3M(kernel),2560K(rootfs),10M
MTD partitions :
0x000000000000-0x000000080000 : "boot"
0x000000080000-0x000000380000 : "kernel"
0x000000380000-0x000000600000 : "rootfs"
0x000000600000-0x000001000000 : "app"
材料:uboot.bin, kernel,rootfs.jffs2, app.img
kernel是zImage(没有头部)而不是uImage.
由zImage生成uImage: http://www.cnblogs.com/mylinux/p/3994455.html
由uImage生成zImage: dd if=uImage of=zImage bs=64 skip=1
工具脚本:makeprogrammingflashimg
脚本的写法应该和mtd分区保持一致。
#! /bin/sh rm -rf PROGRAMMING.bin dd if=$1 of=PROGRAMMING.bin bs=1k conv=sync dd if=$2 of=PROGRAMMING.bin bs=1k seek=512 dd if=$3 of=PROGRAMMING.bin bs=1k seek=3584 conv=sync dd if=$4 of=PROGRAMMING.bin bs=1k seek=6144 conv=sync #0.5 3 2.5 10 echo '' echo 'flash.bin address map' echo '0x00000000 : u-boot' echo '0x00100000 : Linux Kernel' echo '0x00200000 : JFFS2' echo '0x00600000 : APP '
操作方法: ./makeprogrammingflashimg uboot.bin kernel rootfs.jffs2 app.img
如果不想使用app分区,直接在脚本里注释掉$4,使用脚本的时候不传入app.img即可。
2. Linux-dd命令详解 http://www.cnblogs.com/dkblog/archive/2009/09/18/1980715.html
使用方式: dd [option]
如果你想要在线看 manual, 可以试试:
dd --help 或是 info dd
如果你想要看看这个版本如何:
dd --version
输入或输出
dd if=[STDIN] of=[STDOUT]
强迫输入或输出的Size为多少Bytes
bs: dd -ibs=[BYTE] -obs=[SIZE]
强迫一次只做多少个 Bytes
cbs=BYTES
跳过一段以后才输出
seek=BLOCKS
跳过一段以后才输入
skip=BLOCKS
if =输入文件(或设备名称)。
of =输出文件(或设备名称)。
ibs = bytes 一次读取bytes字节,即读入缓冲区的字节数。
skip = blocks 跳过读入缓冲区开头的ibs*blocks块。
obs = bytes 一次写入bytes字节,即写入缓冲区的字节数。
bs = bytes 同时设置读/写缓冲区的字节数(等于设置ibs和obs)。
cbs = byte 一次转换bytes字节。
count=blocks 只拷贝输入的blocks块。
conv = ASCII 把EBCDIC码转换为ASCIl码。
conv = ebcdic 把ASCIl码转换为EBCDIC码。
conv = ibm 把ASCIl码转换为alternate EBCDIC码。
conv = block 把变动位转换成固定字符。
conv = ublock 把固定位转换成变动位。
conv = ucase 把字母由小写转换为大写。
conv = lcase 把字母由大写转换为小写。
conv = notrunc 不截短输出文件。
conv = swab 交换每一对输入字节。
conv = noerror 出错时不停止处理。
conv = sync 把每个输入记录的大小都调到ibs的大小(用NUL填充)。