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