dd基本的參數描述如下:
*基本輸入輸出
if=FILE:輸入名稱
of=FILE:輸出名稱
*做相對應的轉換conv=[lcase/ucase/nocreat/notrunc/fdatasync]
lcase:大寫字母轉小寫
ucase:小寫字母轉大寫
nocreat:不要建立輸出檔案
notrunc:input小於output時,仍維持output大小
fdatasync:讓資料同步寫入硬碟
*區塊參數,分別有以下四個參數可以調整:
bs=[bytes]:等同於同時設定ibs和obs,一次讀或寫的block size。
ibs=[bytes]:指定每次讀取的block size(default 512 bytes)
obs=[bytes]:指定每次寫入的block size(default 512 bytes)
count=[number]:只處理前[number]輸入區塊,block size要參考ibs。
seek=[number]:輸出檔案跳過前[number]個區塊,block size要參考obs。
skip=[number]:輸入檔案跳過前[number]個區塊,block size要參考ibs。
下面給幾個使用範例:
[example_1] 使用dd產生一個2MB的檔案,其內容皆為0xff
$ dd if=/dev/zero ibs=1M count=2 | tr "\000" "\377" >rom.bin
[example_2] 使用dd把一個835KB的檔案(flash.bin)放到 2MB的rom.bin檔案的最前面
$ dd if=flash.bin of=rom.bin bs=1K count=835 conv=notrunc
[example_3] 使用dd把一個64KB的檔案(env.bin)放到2MB的rom.bin檔案的960KB位置之後
$ dd if=env.bin of=rom.bin bs=1K count=64 seek=960 conv=notrunc
[example_4] 使用dd把一個1024KB的檔案(jffs2.bin)放到2MB的rom.bin檔案的1024KB之後的位置
$ dd if=image.jffs2 of=rom.bin bs=1K count=1024 seek=1024 conv=notrunc
最終的rom.bin內容如下圖所示:
*產生空的1MB 的jffs2 image的指令(jffs2_dir為一個空資料夾):
$ mkfs.jffs2 -r jffs2_dir -o image.jffs2 --pad=0x100000
若是沒有mkfs.jff2指令,請先使用apt-get install mtd-util
2019年9月24日 星期二
2019年9月20日 星期五
C 更改檔名 example
紀錄C當中,一個簡單的改檔名function,rename();
#include <stdio.h>
int main () {
int ret;
char oldname[] = "file.txt";
char newname[] = "newfile.txt";
ret = rename(oldname, newname);
if(ret == 0) {
printf("renamed successfully");
} else {
printf("unable to rename");
}
return 0;
}
#include <stdio.h>
int main () {
int ret;
char oldname[] = "file.txt";
char newname[] = "newfile.txt";
ret = rename(oldname, newname);
if(ret == 0) {
printf("renamed successfully");
} else {
printf("unable to rename");
}
return 0;
}
2019年9月3日 星期二
[shell script] 2進制,10進制,16進制的轉換方法
1. 搭配ibase, obase, bc 能夠達到進制轉換的目的
2. ibase => input base為幾進制,obase => output base為幾進制
3. 注意須先寫obase,再去寫ibase
上面幾點注意事項了解了之後,來看實際範例:
example: 16進制"35"轉10進制
echo "obase=10; ibase=16; 35" | bc
=> 53
example: 16進制"C0"轉10進制
echo "obase=10; ibase=16; C0" | bc
=>192
實際應用可以這樣
value=`echo "obase=10; ibase=16; C0" | bc`
echo $value
=>192
或是可以這樣
tmp=C0
value=`echo "obase=10; ibase=16; $tmp" | bc`
echo $value
=>192
2. ibase => input base為幾進制,obase => output base為幾進制
3. 注意須先寫obase,再去寫ibase
上面幾點注意事項了解了之後,來看實際範例:
example: 16進制"35"轉10進制
echo "obase=10; ibase=16; 35" | bc
=> 53
example: 16進制"C0"轉10進制
echo "obase=10; ibase=16; C0" | bc
=>192
實際應用可以這樣
value=`echo "obase=10; ibase=16; C0" | bc`
echo $value
=>192
或是可以這樣
tmp=C0
value=`echo "obase=10; ibase=16; $tmp" | bc`
echo $value
=>192
============= 如果沒有 bc 可以使用, 則用下面方式(only 16轉10) ============
echo $((0x35))
=> 53
使用變數的用法
hexVal=35
echo $((0x${hexVal}))
=> 53
訂閱:
文章 (Atom)