亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? fw_env.c

?? 移植好的楊創utu2440F ARM9 的uboot1.1.4代碼
?? C
?? 第 1 頁 / 共 2 頁
字號:
static int flash_io (int mode){	int fd, fdr, rc, otherdev, len, resid;	erase_info_t erase;	char *data = NULL;	if ((fd = open (DEVNAME (curdev), mode)) < 0) {		fprintf (stderr,			"Can't open %s: %s\n",			DEVNAME (curdev), strerror (errno));		return (-1);	}	len = sizeof (environment.crc);	if (HaveRedundEnv) {		len += sizeof (environment.flags);	}	if (mode == O_RDWR) {		if (HaveRedundEnv) {			/* switch to next partition for writing */			otherdev = !curdev;			if ((fdr = open (DEVNAME (otherdev), mode)) < 0) {				fprintf (stderr,					"Can't open %s: %s\n",					DEVNAME (otherdev),					strerror (errno));				return (-1);			}		} else {			otherdev = curdev;			fdr = fd;		}		printf ("Unlocking flash...\n");		erase.length = DEVESIZE (otherdev);		erase.start = DEVOFFSET (otherdev);		ioctl (fdr, MEMUNLOCK, &erase);		if (HaveRedundEnv) {			erase.length = DEVESIZE (curdev);			erase.start = DEVOFFSET (curdev);			ioctl (fd, MEMUNLOCK, &erase);			environment.flags = active_flag;		}		printf ("Done\n");		resid = DEVESIZE (otherdev) - CFG_ENV_SIZE;		if (resid) {			if ((data = malloc (resid)) == NULL) {				fprintf (stderr,					"Cannot malloc %d bytes: %s\n",					resid,					strerror (errno));				return (-1);			}			if (lseek (fdr, DEVOFFSET (otherdev) + CFG_ENV_SIZE, SEEK_SET)				== -1) {				fprintf (stderr, "seek error on %s: %s\n",					DEVNAME (otherdev),					strerror (errno));				return (-1);			}			if ((rc = read (fdr, data, resid)) != resid) {				fprintf (stderr,					"read error on %s: %s\n",					DEVNAME (otherdev),					strerror (errno));				return (-1);			}		}		printf ("Erasing old environment...\n");		erase.length = DEVESIZE (otherdev);		erase.start = DEVOFFSET (otherdev);		if (ioctl (fdr, MEMERASE, &erase) != 0) {			fprintf (stderr, "MTD erase error on %s: %s\n",				DEVNAME (otherdev),				strerror (errno));			return (-1);		}		printf ("Done\n");		printf ("Writing environment to %s...\n", DEVNAME (otherdev));		if (lseek (fdr, DEVOFFSET (otherdev), SEEK_SET) == -1) {			fprintf (stderr,				"seek error on %s: %s\n",				DEVNAME (otherdev), strerror (errno));			return (-1);		}		if (write (fdr, &environment, len) != len) {			fprintf (stderr,				"CRC write error on %s: %s\n",				DEVNAME (otherdev), strerror (errno));			return (-1);		}		if (write (fdr, environment.data, ENV_SIZE) != ENV_SIZE) {			fprintf (stderr,				"Write error on %s: %s\n",				DEVNAME (otherdev), strerror (errno));			return (-1);		}		if (resid) {			if (write (fdr, data, resid) != resid) {				fprintf (stderr,					"write error on %s: %s\n",					DEVNAME (curdev), strerror (errno));				return (-1);			}			free (data);		}		if (HaveRedundEnv) {			/* change flag on current active env partition */			if (lseek (fd, DEVOFFSET (curdev) + sizeof (ulong), SEEK_SET)				== -1) {				fprintf (stderr, "seek error on %s: %s\n",					DEVNAME (curdev), strerror (errno));				return (-1);			}			if (write (fd, &obsolete_flag, sizeof (obsolete_flag)) !=				sizeof (obsolete_flag)) {				fprintf (stderr,					"Write error on %s: %s\n",					DEVNAME (curdev), strerror (errno));				return (-1);			}		}		printf ("Done\n");		printf ("Locking ...\n");		erase.length = DEVESIZE (otherdev);		erase.start = DEVOFFSET (otherdev);		ioctl (fdr, MEMLOCK, &erase);		if (HaveRedundEnv) {			erase.length = DEVESIZE (curdev);			erase.start = DEVOFFSET (curdev);			ioctl (fd, MEMLOCK, &erase);			if (close (fdr)) {				fprintf (stderr,					"I/O error on %s: %s\n",					DEVNAME (otherdev),					strerror (errno));				return (-1);			}		}		printf ("Done\n");	} else {		if (lseek (fd, DEVOFFSET (curdev), SEEK_SET) == -1) {			fprintf (stderr,				"seek error on %s: %s\n",				DEVNAME (curdev), strerror (errno));			return (-1);		}		if (read (fd, &environment, len) != len) {			fprintf (stderr,				"CRC read error on %s: %s\n",				DEVNAME (curdev), strerror (errno));			return (-1);		}		if ((rc = read (fd, environment.data, ENV_SIZE)) != ENV_SIZE) {			fprintf (stderr,				"Read error on %s: %s\n",				DEVNAME (curdev), strerror (errno));			return (-1);		}	}	if (close (fd)) {		fprintf (stderr,			"I/O error on %s: %s\n",			DEVNAME (curdev), strerror (errno));		return (-1);	}	/* everything ok */	return (0);}/* * s1 is either a simple 'name', or a 'name=value' pair. * s2 is a 'name=value' pair. * If the names match, return the value of s2, else NULL. */static uchar *envmatch (uchar * s1, uchar * s2){	while (*s1 == *s2++)		if (*s1++ == '=')			return (s2);	if (*s1 == '\0' && *(s2 - 1) == '=')		return (s2);	return (NULL);}/* * Prevent confusion if running from erased flash memory */static int env_init (void){	int crc1, crc1_ok;	uchar *addr1;	int crc2, crc2_ok;	uchar flag1, flag2, *addr2;	if (parse_config ())		/* should fill envdevices */		return 1;	if ((addr1 = calloc (1, ENV_SIZE)) == NULL) {		fprintf (stderr,			"Not enough memory for environment (%ld bytes)\n",			ENV_SIZE);		return (errno);	}	/* read environment from FLASH to local buffer */	environment.data = addr1;	curdev = 0;	if (flash_io (O_RDONLY)) {		return (errno);	}	crc1_ok = ((crc1 = crc32 (0, environment.data, ENV_SIZE))			   == environment.crc);	if (!HaveRedundEnv) {		if (!crc1_ok) {			fprintf (stderr,				"Warning: Bad CRC, using default environment\n");			environment.data = default_environment;			free (addr1);		}	} else {		flag1 = environment.flags;		curdev = 1;		if ((addr2 = calloc (1, ENV_SIZE)) == NULL) {			fprintf (stderr,				"Not enough memory for environment (%ld bytes)\n",				ENV_SIZE);			return (errno);		}		environment.data = addr2;		if (flash_io (O_RDONLY)) {			return (errno);		}		crc2_ok = ((crc2 = crc32 (0, environment.data, ENV_SIZE))				   == environment.crc);		flag2 = environment.flags;		if (crc1_ok && !crc2_ok) {			environment.data = addr1;			environment.flags = flag1;			environment.crc = crc1;			curdev = 0;			free (addr2);		} else if (!crc1_ok && crc2_ok) {			environment.data = addr2;			environment.flags = flag2;			environment.crc = crc2;			curdev = 1;			free (addr1);		} else if (!crc1_ok && !crc2_ok) {			fprintf (stderr,				"Warning: Bad CRC, using default environment\n");			environment.data = default_environment;			curdev = 0;			free (addr2);			free (addr1);		} else if (flag1 == active_flag && flag2 == obsolete_flag) {			environment.data = addr1;			environment.flags = flag1;			environment.crc = crc1;			curdev = 0;			free (addr2);		} else if (flag1 == obsolete_flag && flag2 == active_flag) {			environment.data = addr2;			environment.flags = flag2;			environment.crc = crc2;			curdev = 1;			free (addr1);		} else if (flag1 == flag2) {			environment.data = addr1;			environment.flags = flag1;			environment.crc = crc1;			curdev = 0;			free (addr2);		} else if (flag1 == 0xFF) {			environment.data = addr1;			environment.flags = flag1;			environment.crc = crc1;			curdev = 0;			free (addr2);		} else if (flag2 == 0xFF) {			environment.data = addr2;			environment.flags = flag2;			environment.crc = crc2;			curdev = 1;			free (addr1);		}	}	return (0);}static int parse_config (){	struct stat st;#if defined(CONFIG_FILE)	/* Fills in DEVNAME(), ENVSIZE(), DEVESIZE(). Or don't. */	if (get_config (CONFIG_FILE)) {		fprintf (stderr,			"Cannot parse config file: %s\n", strerror (errno));		return 1;	}#else	strcpy (DEVNAME (0), DEVICE1_NAME);	DEVOFFSET (0) = DEVICE1_OFFSET;	ENVSIZE (0) = ENV1_SIZE;	DEVESIZE (0) = DEVICE1_ESIZE;#ifdef HAVE_REDUND	strcpy (DEVNAME (1), DEVICE2_NAME);	DEVOFFSET (1) = DEVICE2_OFFSET;	ENVSIZE (1) = ENV2_SIZE;	DEVESIZE (1) = DEVICE2_ESIZE;	HaveRedundEnv = 1;#endif#endif	if (stat (DEVNAME (0), &st)) {		fprintf (stderr,			"Cannot access MTD device %s: %s\n",			DEVNAME (0), strerror (errno));		return 1;	}	if (HaveRedundEnv && stat (DEVNAME (1), &st)) {		fprintf (stderr,			"Cannot access MTD device %s: %s\n",			DEVNAME (1), strerror (errno));		return 1;	}	return 0;}#if defined(CONFIG_FILE)static int get_config (char *fname){	FILE *fp;	int i = 0;	int rc;	char dump[128];	if ((fp = fopen (fname, "r")) == NULL) {		return 1;	}	while ((i < 2) && ((rc = fscanf (fp, "%s %lx %lx %lx",				  DEVNAME (i),				  &DEVOFFSET (i),				  &ENVSIZE (i),				  &DEVESIZE (i)  )) != EOF)) {		/* Skip incomplete conversions and comment strings */		if ((rc < 3) || (*DEVNAME (i) == '#')) {			fgets (dump, sizeof (dump), fp);	/* Consume till end */			continue;		}		i++;	}	fclose (fp);	HaveRedundEnv = i - 1;	if (!i) {			/* No valid entries found */		errno = EINVAL;		return 1;	} else		return 0;}#endif

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
精品一区二区三区免费播放| 丁香网亚洲国际| 麻豆成人91精品二区三区| 国产xxx精品视频大全| 在线观看日韩av先锋影音电影院| 欧美一区二区视频在线观看2020 | 亚洲午夜精品网| 粉嫩一区二区三区在线看| 欧美一级片在线看| 一区二区三区精品在线| 成人激情校园春色| 国产日本欧美一区二区| 久国产精品韩国三级视频| 欧美三级电影网站| 亚洲欧美另类在线| 成人综合婷婷国产精品久久 | 国产伦精品一区二区三区在线观看| 色一区在线观看| 国产精品日韩成人| 国产不卡视频在线播放| 久久久久久久免费视频了| 亚洲午夜激情网站| 在线观看一区日韩| 一区二区三区.www| 在线观看av一区| 亚洲激情综合网| 97国产一区二区| 1区2区3区国产精品| 成人黄色综合网站| 国产精品国产a级| 成人黄色片在线观看| 国产精品美女久久久久aⅴ国产馆| 国产麻豆午夜三级精品| 国产视频一区二区在线观看| 国产一区中文字幕| 国产亚洲一区二区三区| 国产精品一区在线观看你懂的| 精品久久久久久久久久久久包黑料| 青青草91视频| 精品国产一区二区三区四区四| 精品一区二区精品| 久久久久久毛片| 不卡一区二区中文字幕| 亚洲精品国产第一综合99久久 | 成人动漫视频在线| 亚洲免费av高清| 欧美人与z0zoxxxx视频| 久久99国产精品麻豆| 久久久久久久久久久久久久久99| 国产不卡在线播放| 亚洲免费视频中文字幕| 欧美日韩中文另类| 久久国产精品99精品国产| 久久婷婷国产综合国色天香| 成人免费毛片aaaaa**| 亚洲精品视频自拍| 欧美年轻男男videosbes| 捆绑调教一区二区三区| 中文天堂在线一区| 欧美精品一卡二卡| 国产成人亚洲精品狼色在线| 亚洲蜜臀av乱码久久精品| 欧美一区永久视频免费观看| 国产精品自在欧美一区| 一区二区三区丝袜| 久久亚洲综合色一区二区三区| proumb性欧美在线观看| 香蕉加勒比综合久久| 久久久91精品国产一区二区三区| 91玉足脚交白嫩脚丫在线播放| 亚洲影视资源网| 久久综合久久综合亚洲| 色婷婷综合激情| 国精产品一区一区三区mba桃花| 亚洲男人都懂的| 久久久久久久久岛国免费| 91麻豆国产自产在线观看| 久久福利视频一区二区| 一区二区三区不卡在线观看| 国产亚洲欧美色| 欧美精品国产精品| av资源网一区| 韩国视频一区二区| 亚洲成av人片在线观看无码| 欧美高清在线一区二区| 3d动漫精品啪啪| caoporn国产一区二区| 九一久久久久久| 亚洲国产cao| 亚洲色图欧洲色图婷婷| 久久亚洲私人国产精品va媚药| 欧洲日韩一区二区三区| 99久久久免费精品国产一区二区| 久久疯狂做爰流白浆xx| 日本午夜一本久久久综合| 亚洲日本中文字幕区| 国产偷v国产偷v亚洲高清| 日韩欧美卡一卡二| 欧美日韩国产成人在线免费| 日本电影欧美片| 99久久国产综合精品色伊| 国产精品77777| 经典一区二区三区| 美国十次综合导航| 日韩不卡手机在线v区| 视频一区中文字幕| 天堂成人免费av电影一区| 亚洲福利视频一区| 亚洲成人精品一区二区| 一区二区三区加勒比av| 亚洲综合在线电影| 亚洲影院免费观看| 日韩成人午夜电影| 日本视频一区二区| 美腿丝袜亚洲一区| 国产专区欧美精品| 丁香天五香天堂综合| 成人免费毛片app| gogogo免费视频观看亚洲一| 99免费精品在线观看| 91麻豆免费看| 欧美性色黄大片| 欧美一区三区四区| 精品粉嫩超白一线天av| 2021国产精品久久精品| 久久精子c满五个校花| 欧美国产精品一区二区三区| 中文字幕一区在线| 亚洲欧美偷拍卡通变态| 亚洲伊人色欲综合网| 天天综合色天天综合色h| 日本午夜精品一区二区三区电影| 免费精品视频在线| 国产激情一区二区三区桃花岛亚洲| 国产精品一区二区久久精品爱涩| 成人国产一区二区三区精品| 在线日韩av片| 日韩欧美一区二区在线视频| 精品国免费一区二区三区| 国产蜜臀97一区二区三区| 樱花草国产18久久久久| 日本亚洲电影天堂| 成人av资源站| 欧美日韩和欧美的一区二区| 欧美xxxx老人做受| 国产精品国产自产拍高清av王其 | 国产精品全国免费观看高清| 亚洲免费在线播放| 久久精品国产第一区二区三区| 国产精品亚洲人在线观看| 91日韩在线专区| 欧美电影免费提供在线观看| 中文字幕制服丝袜一区二区三区 | 日韩欧美电影在线| 中文字幕一区视频| 精品一区二区三区免费观看| 一本色道久久综合亚洲精品按摩| 91精品国模一区二区三区| 国产精品入口麻豆九色| 日本在线观看不卡视频| 99精品黄色片免费大全| 日韩欧美成人午夜| 亚洲免费大片在线观看| 国产一区91精品张津瑜| 欧美三级韩国三级日本三斤| 中文字幕不卡的av| 麻豆国产精品官网| 欧美曰成人黄网| 欧美韩国日本综合| 免费欧美在线视频| 欧美日韩在线免费视频| 国产精品免费av| 国产精品综合久久| 日韩欧美你懂的| 日韩国产在线观看一区| 91国产免费观看| 国产精品麻豆久久久| 国产精品一二三区| 日韩欧美在线1卡| 喷白浆一区二区| 4hu四虎永久在线影院成人| 亚洲无线码一区二区三区| 成人黄色一级视频| 中文字幕国产一区| 高清在线成人网| 国产日韩视频一区二区三区| 久久精品国产第一区二区三区| 欧美日韩国产首页在线观看| 亚洲精品国产精品乱码不99| 99久久久久免费精品国产| 国产精品女上位| 成人激情免费电影网址| 国产色产综合产在线视频| 国产真实乱偷精品视频免| 精品噜噜噜噜久久久久久久久试看| 日本亚洲电影天堂| 日韩欧美国产麻豆| 美女视频一区二区| 精品欧美乱码久久久久久1区2区| 日韩成人免费在线|