?? imafileread.txt
字號:
操作系統開發者的新手經常會遇到一個問題,那就是怎樣建立ima文件(即軟盤映像,也可能是img格式的)。曾經我也在這個問題山浪費了很多不必要的時間。現在我將解決方法寫出來,希望可以讓大家快速的解決這個困難。
實際上,ima文件(或img)就是嚴格按照軟盤的格式來的。而軟盤的數據組織格式就是FAT12文件系統。也就是說,我們要讀文件就是按照FAT12文件系統的規則來讀!而不要按照扇區來讀!因為winimage(代指類似的創建軟盤映像的工具)就是按照FAT12文件系統的規則來寫入的!如果我們用winimage來建立ima文件,而通過扇區的方式來讀文件當然會出錯!
解決的方法有兩個:
一、按照winimage來建立ima文件,并用winimage來把我們的文件寫入映像,然后用FAT12的規則來讀文件。(FAT12文件系統的讀寫方法足以寫一篇文章,我會在以后單獨通過一篇文章來研究這個問題.)
二、按照我們自己的方式來建立ima文件,并按照扇區的方式寫入我們的文件,然后按照扇區的方式來讀我們的文件。
其中第一種方法,兼容性很好。因為無論是dos還是windows還是linux都可以認識它,并讀寫它。但是我們在程序里面讀取的時候卻要費些勁。這里面主要的難度是讀寫FAT12系統。
而第二種方法,非常的簡單。對于剛剛入門的新手非常適合。但是有一點就是現有的工具很少.事實上,實現起來非常的簡單.下面我就在這個方面做一下介紹。
1、創建ima文件:
這一步很簡單,你可以用任何一個創建ima文件的工具創建。也可以自己編寫程序創建。時間上你只要寫1.44MB個0的二進制文件就可以了(我是說在我們這種情況下)!
2、寫入引導程序和我們的操作系統文件(包括內核等文件)
這一步也很簡單,但是沒有現成的工具來完成。其原理是:把引導程序寫到前面創建ima文件前512個字節里面去。把我們的操作系統文件也寫入相應的位置。為什么說是相應的位置?怎樣計算這個相應位置呢?因為每個人都會把操作系統的文件寫入不同的扇區,比如有些人希望寫入以第三個扇區開頭的兩個扇區里。而另一些人可能會寫到別的地方去。但是無論怎么我們都是可以計算出它在ima文件里面的絕對位置的,即它是從第幾個字節開始,到第幾個字節結束的。
Byte=512 *(Track * n + Sector)
其中:
Track:代表要寫入位置的起始磁道號
n:代表每個磁道包含的扇區數
Sector:代表要寫入位置的起始扇區號
Byte:代表這個文件在ima文件中的開始位置
這樣我們就可以知道我們的操作系統文件到底在ima要寫到什么地方。現在,我們要做的就是把我們的操作系統文件寫到相應的位置就是了。寫入方法很簡單,就是讀寫二進制文件。我想這個大家都會,不會的話找一下C語言中文件讀寫部分的內容看一下。而我們的引導程序在加載這些文件的時候也就簡單了。我們只需要調用BIOS提供的中斷就可以了。
不過還有一點需要注意的就是,我們的程序最好是扇區對齊的。也就是說我們的程序最好是512字節的整數倍,當然不是512個字節的整數倍也沒有關系,因為我們前面創建文件的時候是全部填充的0。但是在其他情況下可能會出錯。例如,你是使用的其他工具進行建立的或者是修改原來的ima映像。解決的方法也有兩個,一個就是我前面說的讓程序的大小扇區對齊,另一個就是在寫入的時候將最后一個扇區中寫文件剩余的該扇區空間填充為0。但是,我們應該注意的是這中方法只是新手入門是的解決方案。在你逐漸熟悉了文件系統技術,能夠方便的通過編程的方式讀寫FAT分區的時候,你就應該改成使用第一種方法。畢竟這種方法在兼容性上更好一些。編輯ima文件的時候也容易一些。擴展性也要更好一些.
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -