2014年1月23日 星期四

如何產生都是 0xFF 的檔案。

在 Linux 底下,一般都會用 /dev/zero 或 /dev/null 來產生空的檔案(內容為 0x00)。

例如: dd if=/dev/zer0 of=temp_file bs=1k count=1024

但是有時我們會希望產生內容全部是 0xFF 的檔案,因為 flash 裡面空的狀態就是 0xFF,
所以為了填補 flash image 空的部份,就需要這樣的檔案。


例如:
我們有一個 flash 容量是 2MB,而我們可能會切成 256KB 放 bootcode,1792KB 放 Linux kernel。但是這兩個檔案不會剛好是這樣的大小,所以就會有剩下的空間。

當然,一般比較單純的方法是把這兩個檔案都燒進 flash 中,然後用燒錄機讀出整個 flash 的 image 檔。但是這樣要不是板子上有上 socket 不然就要解焊。

所以如果可以的話,能直接用軟體產生相同的 image 檔是會比較方便的。

這樣就可以先產生一個全為 0xFF 的檔,然後把 bootcode 跟 Linux kernel 放進特定的位置就可以了。

回到重點,但是 Linux 裡只有 /dev/zero 跟 /dev/null,所以產生這樣的檔案需要其它的工具的協助。目前網路上找到的是利用 awk。

awk 'BEGIN { while (1) printf("%c", 255) }' | dd of=flash_image bs=1K count=2048

2 則留言:

  1. 用 awk 的 printf("%c", 255) 不一定能夠印出 0xFF,像我的 Ubuntu 14.04.6 就印出 0xc3bf,可能跟 locale 有關吧!詳情不清楚。

    可以透過以下這個命令,以 'tr' 將 /dev/zero 吐出來的 0x00 轉換成 0xFF:

    tr '\000' '\377' < /dev/zero | dd of=flash_image bs=1K count=2048

    回覆刪除