コード例 #1
0
ファイル: mtd.c プロジェクト: adeelmunir/x210_ics_rtm_v13
/*
 * initial mtd device
 */
static __init void mtd_device_init(void)
{
	/*
	 * probe all nand flash device
	 */
	nand_flash_probe();
}
コード例 #2
0
ファイル: cmd_probe.c プロジェクト: qioixiy/xboot
static int probe(int argc, char ** argv)
{
    s32_t i;

    if(argc < 2)
    {
        usage();
        return -1;
    }

    for(i=1; i<argc; i++)
    {
        if( !strcmp((const char *)argv[i], "nor"))
        {

        }
        else if( !strcmp((const char *)argv[i], "nand"))
        {
            nand_flash_probe();
            list_nand_flash();
        }
        else if( !strcmp((const char *)argv[i], "mmc"))
        {
            mmc_card_probe();
            list_mmc_card();
        }
        else
        {
            printk("do not probe device with the type of '%s'\r\n", argv[i]);
        }
    }

    return 0;
}
コード例 #3
0
ファイル: cmd_nand.c プロジェクト: rharter/xboot-clone
static int nand(int argc, char ** argv)
{
	struct nand_device * nand;
	u32_t off = 0;
	u32_t size = 0;
	u32_t addr = 0;
	u32_t o, l, len = 0;
	char * filename;
	u8_t * buf;
	s32_t fd;
	s32_t n;

	if(argc < 2)
	{
		list_nand_device();

		return 0;
	}

	if( !strcmp((const char *)argv[1], "list"))
	{
		list_nand_device();

		return 0;
	}
	else if( !strcmp((const char *)argv[1], "probe"))
	{
		nand_flash_probe();
		list_nand_device();

		return 0;
	}
	else if( !strcmp((const char *)argv[1], "read") )
	{
		if(argc != 7)
		{
			usage();
			return -1;
		}

		nand = search_nand_device((const char *)argv[2]);
		if(!nand)
		{
			printk(" not found nand device \"%s\"\r\n", argv[2]);
			printk(" try 'nand list' for list all of nand devices\r\n");
			return -1;
		}

		off = strtoul((const char *)argv[3], NULL, 0);
		size = strtoul((const char *)argv[4], NULL, 0);

		if( !strcmp((const char *)argv[5], "-r") )
		{
			addr = strtoul((const char *)argv[6], NULL, 0);

			if(nand_read(nand, (u8_t *)addr, off, size) != 0)
				return -1;

			printk("read %s 0x%08lx ~ 0x%08lx to ram 0x%08lx.\r\n", nand->name, off, off + size, addr);
		}
		else if( !strcmp((const char *)argv[5], "-f") )
		{
			filename = (char *)argv[6];

			buf = malloc(SZ_64K);
			if(!buf)
				return -1;

			fd = open(filename, O_WRONLY | O_CREAT | O_TRUNC, (S_IRUSR|S_IWUSR|S_IRGRP|S_IWGRP|S_IROTH|S_IWOTH));
			if(fd < 0)
			{
				free(buf);
				return -1;
			}

			o = off;
			while(len < size)
			{
				if(len + SZ_64K > size)
					l = size - len;
				else
					l = SZ_64K;

				if(nand_read(nand, buf, o, l) != 0)
				{
					close(fd);
					unlink(filename);
					free(buf);
					return -1;
				}

				n = write(fd, (void *)buf, l);
				if( n != l )
				{
					close(fd);
					unlink(filename);
					free(buf);
					return -1;
				}

				o += l;
				len += l;
			}

			close(fd);
			free(buf);

			printk("read %s 0x%08lx ~ 0x%08lx to file %s.\r\n", nand->name, off, off + size, filename);
		}
		else
		{
			usage();
			return -1;
		}
	}
	else if( !strcmp((const char *)argv[1], "write") )
	{

	}
	else if( !strcmp((const char *)argv[1], "erase") )
	{

	}
	else if( !strcmp((const char *)argv[1], "bad") )
	{

	}
	else
	{
		usage();
		return -1;
	}

	return 0;
}