Linux 環境下檔案寫入.img

來源:互聯網
上載者:User
 

Linux 環境下檔案寫入.img

刺蝟@http://blog.csdn.net/littlehedgehog

 

 

 

 

下面我們先用bximage建立一個磁碟片映像。(當然 你也可以用其他的工具建立,比如windows平台上的VPC就有這個功能)

$ bximage
========================================================================
                                bximage
                  Disk Image Creation Tool for Bochs
        $Id: bximage.c,v 1.32 2006/06/16 07:29:33 vruppert Exp $
========================================================================

Do you want to create a floppy disk image or a hard disk image?
Please type hd or fd. [hd] fd

Choose the size of floppy disk image to create, in megabytes.
Please type 0.16, 0.18, 0.32, 0.36, 0.72, 1.2, 1.44, 1.68, 1.72, or 2.88.
[1.44]
I will create a floppy image with
cyl=80
heads=2
sectors per track=18
total sectors=2880
total bytes=1474560

What should I name the image?
[a.img]

Writing: [] Done.

I wrote 1474560 bytes to a.img.

The following line should appear in your bochsrc:
floppya: image="a.img", status=inserted

建立了映像檔案後,需要將產生的二進位檔案寫入磁碟片的絕對扇區。我們看一下dd這個小工具的用法。
$ dd --help
用法:dd [運算元] ...
或:dd 選項
複製檔案,並根據以下的運算元將資料轉換並格式化。

bs=位元組         強迫 ibs=<位元組> 及 obs=<位元組>
cbs=位元組        每次轉換指定的<位元組>
conv=關鍵字     根據以逗號分隔的關鍵字表示的方式來轉換檔
count=塊數目    只複製指定量<塊數目>的輸入資料
ibs=位元組        每次讀取指定的<位元組>
if=檔案         讀取<檔案>內容而非標準輸入的資料
iflag=標記    以指定標記取代逗號作為讀入符號列表的分隔字元
obs=位元組        每次寫入指定的<位元組>
of=檔案         將資料寫入<檔案>而不在標準輸出顯示
oflag=標記    以指定標記取代逗號作為寫出符號列表的分隔字元
seek=塊數目     先略過以 obs 為單位的指定<塊數目>的輸出資料
skip=塊數目     先略過以 ibs 為單位的指定<塊數目>的輸入資料
status=noxfer    不顯示資料轉送狀態

<塊數目>和<位元組>可以加上以下的單位:
xM=M、c=1、w=2、b=512、kB=1000、K=1024、MB=1000*1000、M=1024*1024、
GB=1000*1000*1000、G=1024*1024*1024,還有 T、P、E、Z、Y 如此類推。
每個<關鍵字>可以是:

ascii     由 EBCDIC 碼轉換至 ASCII 碼
ebcdic    由 ASCII 碼轉換至 EBCDIC 碼
ibm       由 ASCII 碼轉換至替換的 EBCDIC 碼
block     將結束字元塊裡的換行替換成等長的空格
unblock   會將 cbs 大小的塊中尾部的空格替換為一個分行符號
lcase     將大寫字元轉換為小寫
nocreat    不建立輸出檔案
excl        如果輸出檔案已存在則操作失敗
notrunc   不截斷輸出檔案
ucase     將小寫字元轉換為大寫
swab      交換每一對輸入資料位元組
noerror   讀取資料發生錯誤後仍然繼續
sync      將每個輸入資料區塊以 NUL 字元填滿至 ibs 的大小;當配合 block
              或 unblock 時,會以空格代替 NUL 字元進行填充
fdatasync   在操作完成前切實寫入輸出檔案
fsync       和上者類似,但同時也寫入中繼資料

每個<標記>符號可以是:

append 追加模式 (只對輸出操作有意義)
direct 使用 Direct I/O 存模數式
dsync 對資料採用 I/O 同步
sync 和上者類似,但同時也對中繼資料生效
nonblock 使用無阻塞 I/O
nofollow 不跟隨連結檔案
noctty 不根據檔案指派控制終端

對運行中的“dd”進程發送一個 USR1 訊號會使得
I/O 的統計資訊被列印到標準錯誤裝置然後恢複復制操作。

$ dd if=/dev/zero of=/dev/null& pid=$!
$ kill -USR1 $pid; sleep 1; kill $pid
18335302+0 records in
18335302+0 records out
9387674624 bytes (9.4 GB) copied, 34.6279 seconds, 271 MB/s

可用選項有:

      --help     顯示此協助資訊並離開
      --version 顯示版本資訊並離開

請向 <bug-coreutils@gnu.org> 報告錯誤。

我們用如下命令寫入磁碟片絕對扇區。
$ dd if=boot.bin of=a.img bs=512 count=1 conv=notrunc
記錄了 1+0 的讀入
記錄了 1+0 的寫出
512 位元組 (512 B) 已複製,0.000112553 秒,4.5 MB/秒

好了,現在終於可以看執行效果了。在終端輸入
$ bochs -q -f bochsrc.bxrc
虛擬機器運行效果顯示:那個紅色的T清晰可見。雖然我們並沒有做清屏的工作。
在Linux調試大概就是這樣吧。寫個Makefile用來處理一系列的任務應該是個不錯的選擇。

不過在windows裡面的時候我記得是寫一個批次檔 ,想進行類比的時候只要雙擊那個批次檔就可以了。在Linux裡面可不可以呢,答案是肯定的。我們可以寫一個shell指令碼本執行。和Windows裡的那個批次檔一樣,也是只用兩行代碼就行:
#!/bin/sh
bochs -q -f bochsrc.bxrc
寫完後儲存了任意檔案名稱,然後,為這個檔案名稱加可執行許可權 。比如我的(檔案名稱為run):
$ sudo chmod +x run
然後想進行類比時只要在終端裡輸入
$ sudo ./run
就可以看到bochs運行了。

如果調試帶有檔案 系統的磁碟片映像檔案 怎麼辦。別著急,下面幾條命令也可以搞定。
首先在/mnt目錄下建一個檔案 夾,將來我們的映像檔案就被 mount到這裡。
$ cd /mnt/
$ sudo mkdir floppy
然後回到我們的作業系統開發目錄,將磁碟片映像檔案掛載到上面剛剛建 好的目錄下面。假設我的磁碟片映像檔案 為:floppya.img
那麼我用下面的命令持載:
$ sudo mount ./floppya.img /mnt/floppy/ -o loop
其中-o loop的意思就是將映像檔案看作一個塊裝置(迴環裝置)。
然後我們就可以很方便的往這個目錄裡面寫檔案了。
寫完檔案後別忘了卸載掉剛剛掛上去的磁碟片映像。
然後用bochs 進行類比,效果如下所示:

 

 

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.