基於ramdisk在PC上使用FATFS

2021-10-06 10:26:14 字數 2886 閱讀 4518

…………………………正文開始……………………………

最近想學習fatfs的原始碼,但是手上沒拿板子,而且可能需要實際除錯看程式怎麼執行的,這麼幹很容易壞sd卡。正好看到有人說可以使用ramdisk來模擬硬碟,而且可以在pc上執行,簡直完美。

先說一下怎麼開啟ramdisk,這個是基礎。當然是使用createfile(),writefile(),and readfile()了,具體引數不多說,下面是我測試的**。

路徑就使用你看到的碟符就可以,之前他們說用"\\.\phycaldrive0:",我試了老半天沒反應,最後用現在的可以了。

#include

#include

intmain()

setfilepointer

(pfile,

512*sector,null,file_begin)

; unsigned char

*buffer =

(unsigned char*)

malloc

(sizeof

(char

)*buff_size)

;for

(i=0

;i<

512;i++)if

(writefile

(pfile,buffer,buff_size,

&writesize,null)==0

)printf

("write size is %d\n"

,writesize)

; unsigned char

*buffer_1 =

(unsigned char*)

malloc

(sizeof

(char

)*buff_size)

;setfilepointer

(pfile,

512*sector,null,file_begin);if

(readfile

(pfile,buffer_1,buff_size,

&readsize,null)==0

)printf

("success read\n");

printf

("0\t");

for(i=

0;i<

512;i++

)return0;

}// bytespersec = 512 secperclus = 8

// rsvdseccnt = 8 numfats = 2

// fatsz16 = 256 totalsec = 0x07ffc1

這個剛開始是正確的,比如讀寫mbr,dbr。對了,不是每乙個硬碟都有mbr的,我居然對著他看了好久,分割槽表在哪呢,沒有,耍我呢!後來猛然突然發現,0扇區是dbr,好吧,是我學藝不精。反正能進行下去就行。開幹移植。

當我移植好,居然可以掛載檔案系統,而且可以開啟檔案時,多麼美好的時光啊。尤其是他還可以讀出檔案內容,你知道多麼興奮嗎。

but,but,but。

它不能寫檔案。然後我就一步步除錯,發現它在writefile()那裡出錯了。但是在出錯之前,也呼叫過writefile(),可是那就沒毛病。於是我懷疑是不同的位址,結果不一樣,我在上面的測試檔案試了一下,果然是,低位址可以讀寫,但是高位址,只能讀,不能寫

#include

#include

intmain()

setfilepointer

(pfile,

512*sector,null,file_begin)

; unsigned char

*buffer =

(unsigned char*)

malloc

(sizeof

(char

)*buff_size)

;for

(i=0

;i<

512;i++)if

(!deviceiocontrol

(pfile,fsctl_lock_volume,null,

0,null,0,

&writesize,null)

)elseif(

writefile

(pfile,buffer,buff_size,

&writesize,null)==0

)printf

("write size is %d\n"

,writesize)

;deviceiocontrol

(pfile,fsctl_unlock_volume,null,

0,null,0,

&writesize,null);

unsigned char

*buffer_1 =

(unsigned char*)

malloc

(sizeof

(char

)*buff_size)

;setfilepointer

(pfile,

512*sector,null,file_begin);if

(readfile

(pfile,buffer_1,buff_size,

&readsize,null)==0

)printf

("success read\n");

printf

("0\t");

for(i=

0;i<

512;i++

)return0;

}// bytespersec = 512 secperclus = 8

//rsvdseccnt = 8 numfats = 2

//fatsz16= 256 totalsec = 0x07ffc1

在ARM中使用Ramdisk

linux啟動時,initrd可以在記憶體中,也可以在 flash或其它可用的裝置上 initrd檔案格式為 romfs minix ext2 gzip 相關的函式 drivers block rd.c identify ramdisk image 載入位置 init main.c prepare ...

在PC上安裝ccm5

主要的步驟是這樣的 1.先在虛擬機器裡安裝配置好ccm5,最好直接公升級到04 2.對這個虛擬機器執行ghost,全盤ghost,所以,這個時候你的安裝ccm5的虛擬機器要新增另外一塊hd,執行ghost的時候選擇disk to image 3.將剛才新增在ccm5的那個hd掛載到另外的虛擬機器裡,...

SDL在pc上的安裝與移植

sdl在pc上的安裝於移植 pc機1.在usr下面建立乙個sdl資料夾,把sdl的壓縮包放在sdl資料夾下,解壓sdl壓縮包,並進入sdl包。root localhost cd usr sdl root localhost sdl ls sdl 1.2.15.tar.gz root localhos...