这个 dd 命令到底是做什么的?

这个 dd 命令到底是做什么的?

我有一个带有此 SD 卡的嵌入式设备:

[root@(none) ~]# busybox fdisk -l
Disk /dev/mmcblk0: 3965 MB, 3965190144 bytes
4 heads, 16 sectors/track, 121008 cylinders
Units = cylinders of 64 * 512 = 32768 bytes

        Device Boot      Start         End      Blocks  Id System
/dev/mmcblk0p1             305        8497      262144+ 83 Linux
/dev/mmcblk0p2            8497       16689      262144+ 83 Linux
/dev/mmcblk0p3           16689       60352     1397247   b Win95 FAT32

和这些分区:

[root@(none) ~]# df
Filesystem           1K-blocks      Used Available Use% Mounted on
/dev/root               253871    140291    113580  55% /
none                     16384         4     16380   0% /tmp
none                    127016         4    127012   0% /dev
none                        16         4        12  25% /var/lib
none                        16         0        16   0% /var/log
none                       128        16       112  13% /var/run
/dev/mmcblk0p3         1394520    118036   1276484   8% /mnt/onboard

我有一个 u-boot 内核映像文件,uImage大约 2 Mb。如果我执行以下操作,到底会发生什么?

dd if=uImage of=/dev/mmcblk0 bs=512 seek=2048

我为什么要问这个?这个命令对我来说很奇怪,因为:

  1. 复制的图像比目标分区小
  2. 看来图像是在 /dev/mmcblk0p1 上提取的,即根分区。它从 305 开始,而 dd 跳过 2048 块编辑:参见安东的回答
  3. 没有启动分区
  4. u图像被提取;相反,我预计它会被 u-boot 按原样使用

背景:设备是Kobo Glo,通过更新脚本执行该命令来更新内核。

答案1

我在这里猜测,因为我没有 Kobo Glo(我希望我的 Bookeen HD 是可重新编程的)。
你似乎内部有一个2Gb SD内存(60352个柱面,每个柱面32K)

确实dd会跳过 512 个块中的 2048 个块 (1048576),这小于 305 柱面偏移量 (9994240)。事实上必须写入超过 8Mb 才能以/dev/mmcblk0p1这种方式到达分区。

设备如何启动取决于其固件,但很可能通过 SD 内存上的前 1Mb 完成一些基本的引导,然后调用用dd.

/dev/mmcblk0p1是 256Mb ( (8497 - 305)*32768 ) 并且似乎是/通过 vv 或 vv 上的备份来安装的/dev/mmcblk0p2

相关内容