Kernel
這個 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
我有一個
uImage
約 2 Mb 的 u-boot 核心映像文件。如果我執行以下操作會發生什麼?dd if=uImage of=/dev/mmcblk0 bs=512 seek=2048
我為什麼要問這個?這個命令對我來說很奇怪,因為:
- 複製的圖像小於目標分區
- 似乎圖像是在 /dev/mmcblk0p1 上提取的,即根分區。它從 305 開始,而 dd 跳過 2048 塊編輯:請參閱Anthon 的答案
- 沒有引導分區
- uImage被提取;相反,我希望它會被 u-boot 按原樣使用
背景:設備為Kobo Glo,通過更新腳本執行命令更新核心。
我在這裡猜測,因為我沒有 Kobo Glo(我希望我的 Bookeen HD 是可重新程式的)。
您內部似乎有一個 2Gb SD 記憶體(60352 個 32K 柱面)
確實跳過了 512 (1048576)的
dd
2048 個塊,小於 305 柱面偏移 (9994240)。實際上必須寫入超過 8Mb 才能到達/dev/mmcblk0p1
分區。設備如何引導取決於其韌體,但很可能通過 SD 記憶體上的前 1Mb 完成一些基本引導,然後呼叫使用
dd
.
/dev/mmcblk0p1
是 256Mb ( (8497 - 305)*32768 ) 並且似乎安裝/
了它的備份/dev/mmcblk0p2
或 vv。