S5PV210开发 -- Linux dd命令
如需轉(zhuǎn)載請(qǐng)注明出處:https://blog.csdn.net/qq_29350001/article/details/78475434
昨天群里有人詢問(wèn),為什么破壞 BootLoader 破壞不掉。
出現(xiàn)錯(cuò)誤:dd: writing '/dev/mtdblock0': Operation not permitted
我說(shuō)需要插著 SD卡才可以。(這個(gè)也不對(duì),不插SD卡也可以,那這個(gè)錯(cuò)誤還是沒(méi)有搞清楚)
然后我們來(lái)看一下它操作指令:
? ? busybox dd if=/dev/zero of=/dev/mmcblk0 bs=512 seek=1 count=1 conv=sync
? ? 為了確保執(zhí)行數(shù)據(jù)有效,再執(zhí)行 sync 同步一下,即可破壞掉前一個(gè)塊的數(shù)據(jù)。
進(jìn)而引出了我們今天要講的 dd命令。
參看:Linux dd命令
參看:Learning Linux commands: dd
一、dd 命令
Linux dd命令用于讀取、轉(zhuǎn)換并輸出數(shù)據(jù)。
dd 可從標(biāo)準(zhǔn)輸入或文件中讀取數(shù)據(jù),根據(jù)指定的格式來(lái)轉(zhuǎn)換數(shù)據(jù),再輸出到文件、設(shè)備或標(biāo)準(zhǔn)輸出。
二、參數(shù)說(shuō)明
if=文件名:輸入文件名,缺省為標(biāo)準(zhǔn)輸入。即指定源文件。
of=文件名:輸出文件名,缺省為標(biāo)準(zhǔn)輸出。即指定目的文件。
ibs=bytes:一次讀入bytes個(gè)字節(jié),即指定一個(gè)塊大小為bytes個(gè)字節(jié)。
obs=bytes:一次輸出bytes個(gè)字節(jié),即指定一個(gè)塊大小為bytes個(gè)字節(jié)。
bs=bytes:同時(shí)設(shè)置讀入/輸出的塊大小為bytes個(gè)字節(jié)。
cbs=bytes:一次轉(zhuǎn)換bytes個(gè)字節(jié),即指定轉(zhuǎn)換緩沖區(qū)大小。
skip=blocks:從輸入文件開頭跳過(guò)blocks個(gè)塊后再開始復(fù)制。
seek=blocks:從輸出文件開頭跳過(guò)blocks個(gè)塊后再開始復(fù)制。
count=blocks:僅拷貝blocks個(gè)塊,塊大小等于ibs指定的字節(jié)數(shù)。
conv=<關(guān)鍵字>,關(guān)鍵字可以有以下11種:
? ? conversion:用指定的參數(shù)轉(zhuǎn)換文件。
? ? ascii:轉(zhuǎn)換ebcdic為ascii
? ? ebcdic:轉(zhuǎn)換ascii為ebcdic
? ? ibm:轉(zhuǎn)換ascii為alternate ebcdic
? ? block:把每一行轉(zhuǎn)換為長(zhǎng)度為cbs,不足部分用空格填充
? ? unblock:使每一行的長(zhǎng)度都為cbs,不足部分用空格填充
? ? lcase:把大寫字符轉(zhuǎn)換為小寫字符
? ? ucase:把小寫字符轉(zhuǎn)換為大寫字符
? ? swab:交換輸入的每對(duì)字節(jié)
? ? noerror:出錯(cuò)時(shí)不停止
? ? notrunc:不截短輸出文件
? ? sync:將每個(gè)輸入塊填充到ibs個(gè)字節(jié),不足部分用空(NUL)字符補(bǔ)齊。
--help:顯示幫助信息
--version:顯示版本信息
三、實(shí)例
?
[root@localhost text]# dd if=/dev/zero of=sun.txt bs=1M count=1 1+0 records in 1+0 records out 1048576 bytes (1.0 MB) copied, 0.006107 seconds, 172 MB/s [root@localhost text]# du -sh sun.txt 1.1M sun.txt
該命令創(chuàng)建了一個(gè)1M大小的文件sun.txt,其中參數(shù)解釋:?
?
if 代表輸入文件。如果不指定if,默認(rèn)就會(huì)從stdin中讀取輸入。?
of 代表輸出文件。如果不指定of,默認(rèn)就會(huì)將stdout作為默認(rèn)輸出。?
bs 代表字節(jié)為單位的塊大小。?
count 代表被復(fù)制的塊數(shù)。
?/dev/zero 是一個(gè)字符設(shè)備,會(huì)不斷返回0值字節(jié)(\0)。
?
塊大小可以使用的計(jì)量單位表:
以上命令可以看出dd命令來(lái)測(cè)試內(nèi)存操作速度:
?
1048576 bytes (1.0 MB) copied, 0.006107 seconds, 172 MB/s?
四、解釋破壞指令
接下來(lái)我們根據(jù) dd 指令參數(shù)說(shuō)明來(lái)看一下破壞指令:?
busybox dd if=/dev/zero of=/dev/mmcblk0 bs=512 seek=1 count=1 conv=sync
if 代表輸入文件。?/dev/zero 是一個(gè)字符設(shè)備,會(huì)不斷返回0值字節(jié)(\0)。
of 代表輸出文件。/dev/mmcblk0 是一個(gè)塊設(shè)備。
?
bs 代表512字節(jié)為單位的塊大小。?
seek 代表從輸出文件開頭跳過(guò) 1個(gè)塊后再開始復(fù)制。
count 代表被復(fù)制1個(gè)塊。
conv:若讀取的輸入塊不足512字節(jié),不足部分用空(NUL)字符補(bǔ)齊。
?
注釋:輸入以上命令的意思為,把板載中iNand的第一個(gè)扇區(qū)用0來(lái)填充,即擦除了iNand的第一個(gè)扇區(qū),當(dāng)再次啟動(dòng)時(shí),IROM還是會(huì)先去讀取iNand中的前16kb的數(shù)據(jù),計(jì)算校驗(yàn)和,校驗(yàn)和不通過(guò),啟動(dòng)失敗,此時(shí)就會(huì)執(zhí)行第二種啟動(dòng)方式即從SD卡啟動(dòng)。
若此時(shí)未檢測(cè)到SD卡,SecureCRT中將會(huì)顯示:SD checksum Error
分析:
?
然后參看:How to make an image (.img) from what's on the SD card?
使用指令 fdisk -l /dev/mmcblk0 查看:
翻譯一下:
? ? 磁盤/ dev / mmcblk0:3959 MB,3959422976字節(jié)
? ? 229頭,33個(gè)部門/軌道,1023個(gè)汽缸,總計(jì)7733248個(gè)部門
? ? 單位= 1 * 512 = 512字節(jié)的扇區(qū)
? ? 扇區(qū)大小(邏輯/物理):512字節(jié)/ 512字節(jié)
? ? I / O大小(最小/最佳):512字節(jié)/ 512字節(jié)
? ? 磁盤標(biāo)識(shí)符:0x00000000
可知磁盤大小為 4G,我們的 eMMC 內(nèi)存大小正好就是 4G 的。可以得出 mmblk0 是 eMMC 的塊設(shè)備。
然后它的單位是 512 字節(jié)的扇區(qū)。這就是為什么?bs=512 的原因。我們使用 dd?擦除了它的第一個(gè)扇區(qū)。
?
再思考,刪除一個(gè)扇區(qū)造成了什么影響?
是的,執(zhí)行完破壞指令,現(xiàn)在將SD卡拔出的情況下,SecureCRT中將會(huì)顯示:SD checksum Error。
但是我重新將SD卡插入開發(fā)板還是可以正常啟動(dòng)進(jìn)入系統(tǒng)的。就算我將 SD 卡格式化之后,照樣可以。
這是為什么??
如需轉(zhuǎn)載請(qǐng)注明出處:https://blog.csdn.net/qq_29350001/article/details/78475434
?
總結(jié)
以上是生活随笔為你收集整理的S5PV210开发 -- Linux dd命令的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: Word2Vec学习笔记(一)
- 下一篇: Linux命令:ls、grep、wc统计