Exemplo n.º 1
0
/**
 * \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;
}
Exemplo n.º 2
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;
}