Kernel

這個 dd 命令究竟做了什麼?

  • January 9, 2016

我有一個帶有此 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

我為什麼要問這個?這個命令對我來說很奇怪,因為:

  1. 複製的圖像小於目標分區
  2. 似乎圖像是在 /dev/mmcblk0p1 上提取的,即根分區。它從 305 開始,而 dd 跳過 2048 塊編輯:請參閱Anthon 的答案
  3. 沒有引導分區
  4. uImage被提取;相反,我希望它會被 u-boot 按原樣使用

背景:設備為Kobo Glo,通過更新腳本執行命令更新核心。

我在這裡猜測,因為我沒有 Kobo Glo(我希望我的 Bookeen HD 是可重新程式的)。

您內部似乎有一個 2Gb SD 記憶體(60352 個 32K 柱面)

確實跳過了 512 (1048576)的dd2048 個塊,小於 305 柱面偏移 (9994240)。實際上必須寫入超過 8Mb 才能到達/dev/mmcblk0p1分區。

設備如何引導取決於其韌體,但很可能通過 SD 記憶體上的前 1Mb 完成一些基本引導,然後呼叫使用dd.

/dev/mmcblk0p1是 256Mb ( (8497 - 305)*32768 ) 並且似乎安裝/了它的備份/dev/mmcblk0p2或 vv。

引用自:https://unix.stackexchange.com/questions/125973