我有一个带有此 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
我为什么要问这个?这个命令对我来说很奇怪,因为:
复制的图像比目标分区小看来图像是在 /dev/mmcblk0p1 上提取的,即根分区。它从 305 开始,而 dd 跳过 2048 块编辑:参见安东的回答- 没有启动分区
- 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
。