⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 board.c

📁 uboot详细解读可用启动引导LINUX2.6内核
💻 C
📖 第 1 页 / 共 3 页
字号:
			bd->bi_iic_fast[1] = 0;		}	}#else	bd->bi_iic_fast[0] = 0;	bd->bi_iic_fast[1] = 0;#endif	/* CONFIG_I2CFAST */#endif	/* CONFIG_405GP, CONFIG_405EP */#endif	/* CFG_EXTBDINFO */#if defined(CONFIG_SC3)	sc3_read_eeprom();#endif#if defined (CFG_ID_EEPROM) || defined (CFG_I2C_MAC_OFFSET)	mac_read_from_eeprom();#endif	s = getenv ("ethaddr");#if defined (CONFIG_MBX) || \    defined (CONFIG_RPXCLASSIC) || \    defined(CONFIG_IAD210) || \    defined(CONFIG_V38B)	if (s == NULL)		board_get_enetaddr (bd->bi_enetaddr);	else#endif		for (i = 0; i < 6; ++i) {			bd->bi_enetaddr[i] = s ? simple_strtoul (s, &e, 16) : 0;			if (s)				s = (*e) ? e + 1 : e;		}#ifdef	CONFIG_HERMES	if ((gd->board_type >> 16) == 2)		bd->bi_ethspeed = gd->board_type & 0xFFFF;	else		bd->bi_ethspeed = 0xFFFF;#endif#ifdef CONFIG_NX823	load_sernum_ethaddr ();#endif#ifdef CONFIG_HAS_ETH1	/* handle the 2nd ethernet address */	s = getenv ("eth1addr");	for (i = 0; i < 6; ++i) {		bd->bi_enet1addr[i] = s ? simple_strtoul (s, &e, 16) : 0;		if (s)			s = (*e) ? e + 1 : e;	}#endif#ifdef CONFIG_HAS_ETH2	/* handle the 3rd ethernet address */	s = getenv ("eth2addr");#if defined(CONFIG_XPEDITE1K) || defined(CONFIG_METROBOX) || defined(CONFIG_KAREF)	if (s == NULL)		board_get_enetaddr(bd->bi_enet2addr);	else#endif	for (i = 0; i < 6; ++i) {		bd->bi_enet2addr[i] = s ? simple_strtoul (s, &e, 16) : 0;		if (s)			s = (*e) ? e + 1 : e;	}#endif#ifdef CONFIG_HAS_ETH3	/* handle 4th ethernet address */	s = getenv("eth3addr");#if defined(CONFIG_XPEDITE1K) || defined(CONFIG_METROBOX) || defined(CONFIG_KAREF)	if (s == NULL)		board_get_enetaddr(bd->bi_enet3addr);	else#endif	for (i = 0; i < 6; ++i) {		bd->bi_enet3addr[i] = s ? simple_strtoul (s, &e, 16) : 0;		if (s)			s = (*e) ? e + 1 : e;	}#endif#if defined(CONFIG_TQM8xxL) || defined(CONFIG_TQM8260) || \    defined(CONFIG_TQM8272) || \    defined(CONFIG_CCM) || defined(CONFIG_KUP4K) || \    defined(CONFIG_KUP4X) || defined(CONFIG_PCS440EP)	load_sernum_ethaddr ();#endif	/* IP Address */	bd->bi_ip_addr = getenv_IPaddr ("ipaddr");	WATCHDOG_RESET ();#if defined(CONFIG_PCI) && !defined(CONFIG_BAB7xx) && !defined(CONFIG_CPC45)	/*	 * Do pci configuration	 */	pci_init ();#endif/** leave this here (after malloc(), environment and PCI are working) **/	/* Initialize devices */	devices_init ();	/* Initialize the jump table for applications */	jumptable_init ();#if defined(CONFIG_API)	/* Initialize API */	api_init ();#endif	/* Initialize the console (after the relocation and devices init) */	console_init_r ();#if defined(CONFIG_CCM)		|| \    defined(CONFIG_COGENT)	|| \    defined(CONFIG_CPCI405)	|| \    defined(CONFIG_EVB64260)	|| \    defined(CONFIG_KUP4K)	|| \    defined(CONFIG_KUP4X)	|| \    defined(CONFIG_LWMON)	|| \    defined(CONFIG_PCU_E)	|| \    defined(CONFIG_SC3)		|| \    defined(CONFIG_W7O)		|| \    defined(CONFIG_MISC_INIT_R)	/* miscellaneous platform dependent initialisations */	misc_init_r ();#endif#ifdef	CONFIG_HERMES	if (bd->bi_ethspeed != 0xFFFF)		hermes_start_lxt980 ((int) bd->bi_ethspeed);#endif#if defined(CONFIG_CMD_KGDB)	WATCHDOG_RESET ();	puts ("KGDB:  ");	kgdb_init ();#endif	debug ("U-Boot relocated to %08lx\n", dest_addr);	/*	 * Enable Interrupts	 */	interrupt_init ();	/* Must happen after interrupts are initialized since	 * an irq handler gets installed	 */#ifdef CONFIG_SERIAL_SOFTWARE_FIFO	serial_buffered_init();#endif#if defined(CONFIG_STATUS_LED) && defined(STATUS_LED_BOOT)	status_led_set (STATUS_LED_BOOT, STATUS_LED_BLINKING);#endif	udelay (20);	set_timer (0);	/* Initialize from environment */	if ((s = getenv ("loadaddr")) != NULL) {		load_addr = simple_strtoul (s, NULL, 16);	}#if defined(CONFIG_CMD_NET)	if ((s = getenv ("bootfile")) != NULL) {		copy_filename (BootFile, s, sizeof (BootFile));	}#endif	WATCHDOG_RESET ();#if defined(CONFIG_CMD_SCSI)	WATCHDOG_RESET ();	puts ("SCSI:  ");	scsi_init ();#endif#if defined(CONFIG_CMD_DOC)	WATCHDOG_RESET ();	puts ("DOC:   ");	doc_init ();#endif#if defined(CONFIG_CMD_NET)#if defined(CONFIG_NET_MULTI)	WATCHDOG_RESET ();	puts ("Net:   ");#endif	eth_initialize (bd);#endif#if defined(CONFIG_CMD_NET) && ( \    defined(CONFIG_CCM)		|| \    defined(CONFIG_ELPT860)	|| \    defined(CONFIG_EP8260)	|| \    defined(CONFIG_IP860)	|| \    defined(CONFIG_IVML24)	|| \    defined(CONFIG_IVMS8)	|| \    defined(CONFIG_MPC8260ADS)	|| \    defined(CONFIG_MPC8266ADS)	|| \    defined(CONFIG_MPC8560ADS)	|| \    defined(CONFIG_PCU_E)	|| \    defined(CONFIG_RPXSUPER)	|| \    defined(CONFIG_STXGP3)	|| \    defined(CONFIG_SPD823TS)	|| \    defined(CONFIG_RESET_PHY_R)	)	WATCHDOG_RESET ();	debug ("Reset Ethernet PHY\n");	reset_phy ();#endif#ifdef CONFIG_POST	post_run (NULL, POST_RAM | post_bootmode_get(0));#endif#if defined(CONFIG_CMD_PCMCIA) \    && !defined(CONFIG_CMD_IDE)	WATCHDOG_RESET ();	puts ("PCMCIA:");	pcmcia_init ();#endif#if defined(CONFIG_CMD_IDE)	WATCHDOG_RESET ();# ifdef	CONFIG_IDE_8xx_PCCARD	puts ("PCMCIA:");# else	puts ("IDE:   ");#endif#if defined(CONFIG_START_IDE)	if (board_start_ide())		ide_init ();#else	ide_init ();#endif#endif#if defined(CONFIG_CMD_SATA)	puts ("SATA:  ");	sata_initialize ();#endif#ifdef CONFIG_LAST_STAGE_INIT	WATCHDOG_RESET ();	/*	 * Some parts can be only initialized if all others (like	 * Interrupts) are up and running (i.e. the PC-style ISA	 * keyboard).	 */	last_stage_init ();#endif#if defined(CONFIG_CMD_BEDBUG)	WATCHDOG_RESET ();	bedbug_init ();#endif#if defined(CONFIG_PRAM) || defined(CONFIG_LOGBUFFER)	/*	 * Export available size of memory for Linux,	 * taking into account the protected RAM at top of memory	 */	{		ulong pram;		uchar memsz[32];#ifdef CONFIG_PRAM		char *s;		if ((s = getenv ("pram")) != NULL) {			pram = simple_strtoul (s, NULL, 10);		} else {			pram = CONFIG_PRAM;		}#else		pram=0;#endif#ifdef CONFIG_LOGBUFFER#ifndef CONFIG_ALT_LB_ADDR		/* Also take the logbuffer into account (pram is in kB) */		pram += (LOGBUFF_LEN+LOGBUFF_OVERHEAD)/1024;#endif#endif		sprintf ((char *)memsz, "%ldk", (bd->bi_memsize / 1024) - pram);		setenv ("mem", (char *)memsz);	}#endif#ifdef CONFIG_PS2KBD	puts ("PS/2:  ");	kbd_init();#endif#ifdef CONFIG_MODEM_SUPPORT {	 extern int do_mdm_init;	 do_mdm_init = gd->do_mdm_init; }#endif	/* Initialization complete - start the monitor */	/* main_loop() can return to retry autoboot, if so just run it again. */	for (;;) {		WATCHDOG_RESET ();		main_loop ();	}	/* NOTREACHED - no way out of command loop except booting */}void hang (void){	puts ("### ERROR ### Please RESET the board ###\n");	show_boot_progress(-30);	for (;;);}#ifdef CONFIG_MODEM_SUPPORT/* called from main loop (common/main.c) *//* 'inline' - We have to do it fast */static inline void mdm_readline(char *buf, int bufsiz){	char c;	char *p;	int n;	n = 0;	p = buf;	for(;;) {		c = serial_getc();		/*		dbg("(%c)", c); */		switch(c) {		case '\r':			break;		case '\n':			*p = '\0';			return;		default:			if(n++ > bufsiz) {				*p = '\0';				return; /* sanity check */			}			*p = c;			p++;			break;		}	}}extern void  dbg(const char *fmt, ...);int mdm_init (void){	char env_str[16];	char *init_str;	int i;	extern char console_buffer[];	extern void enable_putc(void);	extern int hwflow_onoff(int);	enable_putc(); /* enable serial_putc() */#ifdef CONFIG_HWFLOW	init_str = getenv("mdm_flow_control");	if (init_str && (strcmp(init_str, "rts/cts") == 0))		hwflow_onoff (1);	else		hwflow_onoff(-1);#endif	for (i = 1;;i++) {		sprintf(env_str, "mdm_init%d", i);		if ((init_str = getenv(env_str)) != NULL) {			serial_puts(init_str);			serial_puts("\n");			for(;;) {				mdm_readline(console_buffer, CFG_CBSIZE);				dbg("ini%d: [%s]", i, console_buffer);				if ((strcmp(console_buffer, "OK") == 0) ||					(strcmp(console_buffer, "ERROR") == 0)) {					dbg("ini%d: cmd done", i);					break;				} else /* in case we are originating call ... */					if (strncmp(console_buffer, "CONNECT", 7) == 0) {						dbg("ini%d: connect", i);						return 0;					}			}		} else			break; /* no init string - stop modem init */		udelay(100000);	}	udelay(100000);	/* final stage - wait for connect */	for(;i > 1;) { /* if 'i' > 1 - wait for connection				  message from modem */		mdm_readline(console_buffer, CFG_CBSIZE);		dbg("ini_f: [%s]", console_buffer);		if (strncmp(console_buffer, "CONNECT", 7) == 0) {			dbg("ini_f: connected");			return 0;		}	}	return 0;}#endif#if 0 /* We could use plain global data, but the resulting code is bigger *//* * Pointer to initial global data area * * Here we initialize it. */#undef	XTRN_DECLARE_GLOBAL_DATA_PTR#define XTRN_DECLARE_GLOBAL_DATA_PTR	/* empty = allocate here */DECLARE_GLOBAL_DATA_PTR = (gd_t *) (CFG_INIT_RAM_ADDR + CFG_GBL_DATA_OFFSET);#endif  /* 0 *//************************************************************************/

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -