2019年9月24日 星期二

dd 檔案合併,詳細使用方法

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月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;
}


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

============= 如果沒有 bc 可以使用, 則用下面方式(only 16轉10) ============
echo $((0x35))
=> 53

使用變數的用法
hexVal=35
echo $((0x${hexVal}))
=> 53