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

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

?? fw_env.c

?? linux下的BOOT程序原碼,有需要的可以來下,保證好用
?? 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在线精品一区二区| 欧美探花视频资源| 久久成人麻豆午夜电影| 亚洲超碰精品一区二区| 亚洲精品v日韩精品| 亚洲日本护士毛茸茸| 最新不卡av在线| 亚洲色图制服诱惑| 亚洲女人****多毛耸耸8| 国产精品久久综合| 国产精品久久久久久久裸模| 欧美国产激情二区三区| 国产精品久久久久久久久晋中| 国产欧美va欧美不卡在线| 国产精品三级视频| 亚洲欧美在线视频| 亚洲香蕉伊在人在线观| 亚洲午夜久久久久久久久电影院| 午夜精品久久一牛影视| 日韩精品一二三区| 麻豆精品在线视频| 国产精品1024| 91麻豆精品秘密| 欧美精品欧美精品系列| 精品久久国产97色综合| 国产亚洲精久久久久久| 亚洲三级小视频| 日韩精品免费视频人成| 国产精品一级黄| 在线看日韩精品电影| 日韩一二三四区| 中文字幕在线播放不卡一区| 午夜亚洲国产au精品一区二区| 蜜桃久久av一区| av亚洲产国偷v产偷v自拍| 91成人在线精品| 精品国产乱码久久久久久浪潮 | 自拍偷拍欧美激情| 亚洲一二三四在线| 国产一区二区91| 91福利在线看| 欧美激情综合五月色丁香| 亚洲国产欧美另类丝袜| 国产精品乡下勾搭老头1| 在线影院国内精品| 久久女同精品一区二区| 亚洲一本大道在线| 国产精品一区二区久久不卡| 欧美在线一区二区三区| 国产亚洲女人久久久久毛片| 水野朝阳av一区二区三区| 国产99久久精品| 日韩一区二区精品葵司在线 | 欧美午夜精品电影| 国产日韩欧美不卡在线| 亚洲国产精品影院| caoporen国产精品视频| 欧美va亚洲va| 婷婷一区二区三区| 99riav一区二区三区| 欧美成人aa大片| 亚洲成av人在线观看| 91网上在线视频| 欧美国产成人在线| 国产精品一级二级三级| 日韩一区二区三| 日韩va欧美va亚洲va久久| 91免费视频观看| 国产精品久久久久久一区二区三区| 久久电影国产免费久久电影| 欧美天堂亚洲电影院在线播放| 亚洲色图.com| 97se狠狠狠综合亚洲狠狠| 国产精品天天看| 成人爽a毛片一区二区免费| 2017欧美狠狠色| 国产一区二区电影| 久久影院视频免费| 国产一区二区三区黄视频| 日韩精品中文字幕在线一区| 日av在线不卡| 日韩一区二区不卡| 国产综合色在线| 久久亚洲捆绑美女| 成人国产一区二区三区精品| 国产精品久久久久久久久免费桃花| 国产成人夜色高潮福利影视| 欧美高清一级片在线观看| 国产成人精品影视| 中文字幕一区三区| 欧洲激情一区二区| 日韩av在线播放中文字幕| 精品福利一二区| 国产999精品久久久久久| 国产精品久久久久久久裸模| 97国产精品videossex| 亚洲宅男天堂在线观看无病毒| 在线中文字幕不卡| 免费久久99精品国产| 久久免费电影网| 99久久精品免费看国产免费软件| 亚洲欧美日韩系列| 欧美日本韩国一区二区三区视频| 免费在线观看成人| 国产亚洲婷婷免费| 日本精品视频一区二区| 天天操天天综合网| 亚洲精品一区二区三区精华液 | 成人欧美一区二区三区1314| 色婷婷av一区二区三区大白胸| 亚洲综合图片区| 日韩欧美国产1| av电影在线观看一区| 午夜精品视频在线观看| 国产亚洲精品资源在线26u| 在线亚洲精品福利网址导航| 日本不卡高清视频| 中文字幕一区av| 日韩午夜中文字幕| 91在线porny国产在线看| 日本伊人午夜精品| 国产精品天天看| 欧美一级国产精品| 99精品视频一区| 久久精品久久99精品久久| 亚洲精选视频免费看| 久久久天堂av| 欧美二区乱c少妇| 91在线porny国产在线看| 国内精品不卡在线| 亚洲成人av免费| 中文字幕亚洲视频| 久久综合久久综合九色| 在线不卡一区二区| 91电影在线观看| 成年人国产精品| 国产成人亚洲精品狼色在线| 天堂成人免费av电影一区| 亚洲三级免费观看| 国产精品视频线看| 久久综合久久综合久久| 91精品欧美久久久久久动漫| 色婷婷av一区二区三区之一色屋| 国产精品夜夜嗨| 激情综合网激情| 久久99九九99精品| 免费视频一区二区| 三级成人在线视频| 午夜精品福利在线| 亚洲在线成人精品| 亚洲一区二区av电影| 一区二区三区国产精华| 亚洲图片欧美激情| 成人欧美一区二区三区在线播放| 国产精品嫩草99a| 亚洲国产精品成人久久综合一区| 久久精品人人做人人综合| 精品三级av在线| 久久天天做天天爱综合色| 精品av综合导航| 久久女同精品一区二区| 国产日本欧美一区二区| 欧美国产禁国产网站cc| 日本一区二区成人在线| 国产精品入口麻豆原神| 国产精品色眯眯| 亚洲精品国产第一综合99久久| 亚洲精品国产第一综合99久久| 亚洲男人都懂的| 亚洲影院在线观看| 亚洲777理论| 狠狠色丁香久久婷婷综合丁香| 国产一区二区在线观看免费| 国产99精品国产| 色婷婷综合久久| 欧美精品123区| 久久毛片高清国产| 亚洲色欲色欲www| 性欧美疯狂xxxxbbbb| 国模无码大尺度一区二区三区| 成人网在线播放| 精品视频1区2区| www日韩大片| 亚洲激情在线激情| 美国三级日本三级久久99| 国产成人精品三级| 欧美少妇bbb| 国产性天天综合网| 亚洲午夜在线视频| 激情六月婷婷久久| 色婷婷精品大视频在线蜜桃视频| 精品婷婷伊人一区三区三| 精品国产露脸精彩对白| 亚洲女性喷水在线观看一区| 美女被吸乳得到大胸91| 成人av在线网| 精品免费一区二区三区| 亚洲人成在线观看一区二区| 免费观看在线综合色| 99热国产精品|