/** * \fn int VFS_Init(void) * \brief Initialises the VFS for use by the kernel and user */ int VFS_Init(void) { // Core Drivers gVFS_Drivers = &gRootFS_Info; gVFS_Drivers->Next = &gDevFS_Info; VFS_UpdateDriverFile(); // Register with SysFS giVFS_MountFileID = SysFS_RegisterFile("VFS/Mounts", NULL, 0); giVFS_DriverFileID = SysFS_RegisterFile("VFS/Drivers", NULL, 0); if( VFS_Mount("root", "/", "rootfs", "") != 0 ) { Log_KernelPanic("VFS", "Unable to mount root (Where the **** is rootfs?)"); return -1; } VFS_MkDir("/Devices"); VFS_MkDir("/Mount"); VFS_Mount("dev", "/Devices", "devfs", ""); // Set default max user file count // - Applies to PID0, but propagated to all children *Threads_GetMaxFD(NULL) = 32; return 0; }
int Disk_Thread::init_vfs(int dev, bool *ping) { char DevName[50] = {0}; char textMessage[100] = {0}; PVFS_FILESYS VfsSys = &FileSys; int devNr = dev; #if defined(_WIN32) || defined(_WIN64) snprintf(DevName, 50, "\\Device\\Harddisk%d\\Partition0",dev); #else snprintf(DevName, 50, "/dev/sd%c",devNr+'b'); #endif printTextBrowser(0); snprintf(textMessage, 100, "Test device %s\n", DevName); printTextBrowser(textMessage); if(VfsDevtoLetter(DevName, DRIVER_MAGIC) == -1) { printTextBrowser("Dev not ready!\n"); dev = 0; } else { #if defined(_WIN32) || defined(_WIN64) sprintf(DevName, "%s", DRIVER_MAGIC); #endif if(!NT_SUCCESS(VfsOpenDevice(VfsSys, (PUCHAR)DevName))){ printTextBrowser("vfs: Volume does not exist!\n"); #if defined(_WIN32) || defined(_WIN64) devNr = 0; #else devNr++; #endif }else{ qDebug(" DEV OPEN OK"); VfsGetMediaInfo(VfsSys); VfsInit.VfsSys = VfsSys; VfsInit.Init = false; VFS_Open(&VfsInit); if(VFS_Mount(0) == FAT_OK){ U32 idx; HD_VFS_HANDLER *File = (HD_VFS_HANDLER*)malloc(sizeof(HD_VFS_HANDLER)); printTextBrowser(" Device mounted OK!\n"); VfsInit.Init = true; *ping = true; *this->pFileCounter =0; for(idx = 0;idx < VFS_ROOT_ENTRIES;idx++){ if(VFS_GetFileInfobyIndex(idx,File) == FAT_OK){ if(File->Inode.status == INODE_BUSY){ lock->lock(); *this->pFileCounter = idx+1; printf(" VFS loop 0x%x\n",(int)*this->pFileCounter); AddNewVFSHandler(File); while(*this->pFileCounter != 0xffffffff){ // sync thread lock->unlock(); msleep(1); lock->lock(); } lock->unlock(); } } } free(File); return devNr; } VfsCloseDevice(VfsSys); devNr++; } } Unmount(DRIVER_MAGIC); return devNr; }