OS 개발에서 꽤 새로워졌습니다. 지금은 FAT12 파일 시스템 코드를 작성하고 있습니다. FDC 코드를 사용하여 플로피 디스크에 모든 글을 올렸지 만 디스크에 파일을 쓸 때 어떻게 진행해야하는지에 대해 머리를 감싸는 것처럼 보이지 않습니다.OS 개발 : FAT12 쓰기 기능 구현
내 루트 디렉토리와 관련된 모든 정보를 알고 있지만 파일을 어디에 쓸 것인지 올바른 섹터를 찾는 방법은 무엇입니까? 그리고 그 후에, 그 항목을 FAT에 어떻게 추가해야합니까? 나는 비슷한 작성하고 루트 디렉토리를 통해 도보로 계획되었다
FILE fsysFatDirectory (const char* DirectoryName) {
FILE file;
unsigned char* buf;
PDIRECTORY directory;
//! get 8.3 directory name
char DosFileName[11];
ToDosFileName (DirectoryName, DosFileName, 11);
DosFileName[11]=0;
//! 14 sectors per directory
int sector;
for (sector=0; sector<14; sector++) {
//! read in sector of root directory
buf = (unsigned char*) flpydsk_read_sector (_MountInfo.rootOffset + sector);
//! get directory info
directory = (PDIRECTORY) buf;
//! 16 entries per sector
int i;
for (i=0; i<16; i++) {
//! get current filename
char name[11];
kmemcpy (name, directory->Filename, 11);
name[11]=0;
//! find a match?
if (kstrcmp (DosFileName, name) == 0) {
//! found it, set up file info
kstrcpy (file.name, DirectoryName);
file.id = 0;
file.currentCluster = directory->FirstCluster;
file.fileLength = directory->FileSize;
file.eof = 0;
file.fileLength = directory->FileSize;
//! set file type
if (directory->Attrib == 0x10)
file.flags = FS_DIRECTORY;
else
file.flags = FS_FILE;
//! return file
return file;
}
//! go to next directory
directory++;
}
}
//! unable to find file
file.flags = FS_INVALID;
return file;
}
,는 엔트리 내가 자리를 찾을 때까지 :
이
내가 루트 디렉토리를 탐색하고 파일을 찾기 위해 사용하는 코드입니다. FAT를 추가/걷는 것에 관해서는, 각 항목이 클러스터를 나타내는 것을 알고 있습니다 (항목 1 = 클러스터 1). 그러나 나는 루트 디렉토리 대신에 FAT를 통과해야하는지 또는 둘 다 알고 있어야하는지 모른다.내 코드의 대부분은이 자습서를 기반으로합니다. http://www.brokenthorn.com/Resources/OSDev22.html 그러나 그는 파일 만들기/쓰기 비트를 추가하지 않았기 때문에 직접 해보았습니다.
도움을 주시면 감사하겠습니다.
업데이트 : 나는 실제로 FAT 테이블을 디스크에 쓴 적이 없다는 것을 깨달았습니다 ... 어떻게 수동으로 디스크 이미지에 테이블을 쓸 수 있습니까? –