示例#1
0
int main()
{
	char *buf = (char*) 0x200000;
		
	if (initSdmmcDevice() < 0)
	{
		printf("error initializing card\n");
		return -1;
	}

	// Read blocks in reverse order to verify address is set correctly.
	for (int i = TRANSFER_LENGTH - 1; i >= 0; i--)
		readSdmmcDevice(i, buf + i * BLOCK_SIZE);
	
	return 0;
}
示例#2
0
static int initFileSystem()
{
    char superBlock[BLOCK_SIZE];
    int numDirectoryBlocks;
    int blockNum;
    FsHeader *header;

    // SDMMC not supported on FPGA currently. Fall back to ramdisk if it fails.
    if (initSdmmcDevice() < 0)
    {
        printf("SDMMC init failed, using ramdisk\n");
        gUseRamdisk = 1;
    }

    // Read directory
    if (readBlock(0, superBlock) <= 0)
    {
        errno = EIO;
        return -1;
    }

    header = (FsHeader*) superBlock;
    if (memcmp(header->magic, FS_MAGIC, 4) != 0)
    {
        printf("Bad filesystem: invalid magic value\n");
        errno = EIO;
        return -1;
    }

    numDirectoryBlocks = ((header->numDirectoryEntries - 1) * sizeof(DirectoryEntry)
                          + sizeof(FsHeader) + BLOCK_SIZE - 1) / BLOCK_SIZE;
    gDirectory = (FsHeader*) malloc(numDirectoryBlocks * BLOCK_SIZE);
    memcpy(gDirectory, superBlock, BLOCK_SIZE);
    for (blockNum = 1; blockNum < numDirectoryBlocks; blockNum++)
    {
        if (readBlock(blockNum, ((char*)gDirectory) + BLOCK_SIZE * blockNum) <= 0)
        {
            errno = EIO;
            return -1;
        }
    }

    return 0;
}