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

📄 board.c

📁 u-boot-1.1.6 源码包
💻 C
📖 第 1 页 / 共 2 页
字号:
	debug ("Stack Pointer at: %08lx\n", addr_sp);	/*	 * Save local variables to board info struct	 */	bd->bi_memstart  = CFG_SDRAM_BASE;	/* start of  DRAM memory      */	bd->bi_memsize   = gd->ram_size;	/* size  of  DRAM memory in bytes */	bd->bi_mbar_base = CFG_MBAR;		/* base of internal registers */	bd->bi_bootflags = bootflag;		/* boot / reboot flag (for LynxOS)    */	WATCHDOG_RESET ();	bd->bi_intfreq = gd->cpu_clk;	/* Internal Freq, in Hz */	bd->bi_busfreq = gd->bus_clk;	/* Bus Freq,      in Hz */	bd->bi_baudrate = gd->baudrate;	/* Console Baudrate     */#ifdef CFG_EXTBDINFO	strncpy (bd->bi_s_version, "1.2", sizeof (bd->bi_s_version));	strncpy (bd->bi_r_version, U_BOOT_VERSION, sizeof (bd->bi_r_version));#endif	WATCHDOG_RESET ();#ifdef CONFIG_POST	post_bootmode_init();	post_run (NULL, POST_ROM | post_bootmode_get(0));#endif	WATCHDOG_RESET();	memcpy (id, (void *)gd, sizeof (gd_t));	debug ("Start relocate of code from %08x to %08lx\n", CFG_MONITOR_BASE, addr);	relocate_code (addr_sp, id, addr);	/* NOTREACHED - jump_to_ram() does not return */}/************************************************************************ * * This is the next part if the initialization sequence: we are now * running from RAM and have a "normal" C environment, i. e. global * data can be written, BSS has been cleared, the stack size in not * that critical any more, etc. * ************************************************************************ */void board_init_r (gd_t *id, ulong dest_addr){	cmd_tbl_t *cmdtp;	char *s, *e;	bd_t *bd;	int i;	extern void malloc_bin_reloc (void);#ifndef CFG_ENV_IS_NOWHERE	extern char * env_name_spec;#endif#ifndef CFG_NO_FLASH	ulong flash_size;#endif	gd = id;		/* initialize RAM version of global data */	bd = gd->bd;	gd->flags |= GD_FLG_RELOC;	/* tell others: relocation done */	debug ("Now running in RAM - U-Boot at: %08lx\n", dest_addr);	WATCHDOG_RESET ();	gd->reloc_off =  dest_addr - CFG_MONITOR_BASE;	monitor_flash_len = (ulong)&__init_end - dest_addr;	/*	 * We have to relocate the command table manually	 */	for (cmdtp = &__u_boot_cmd_start; cmdtp !=  &__u_boot_cmd_end; cmdtp++) {		ulong addr;		addr = (ulong) (cmdtp->cmd) + gd->reloc_off;#if 0		printf ("Command \"%s\": 0x%08lx => 0x%08lx\n",				cmdtp->name, (ulong) (cmdtp->cmd), addr);#endif		cmdtp->cmd =			(int (*)(struct cmd_tbl_s *, int, int, char *[]))addr;		addr = (ulong)(cmdtp->name) + gd->reloc_off;		cmdtp->name = (char *)addr;		if (cmdtp->usage) {			addr = (ulong)(cmdtp->usage) + gd->reloc_off;			cmdtp->usage = (char *)addr;		}#ifdef	CFG_LONGHELP		if (cmdtp->help) {			addr = (ulong)(cmdtp->help) + gd->reloc_off;			cmdtp->help = (char *)addr;		}#endif	}	/* there are some other pointer constants we must deal with */#ifndef CFG_ENV_IS_NOWHERE	env_name_spec += gd->reloc_off;#endif	WATCHDOG_RESET ();#ifdef CONFIG_LOGBUFFER	logbuff_init_ptrs ();#endif#ifdef CONFIG_POST	post_output_backlog ();	post_reloc ();#endif	WATCHDOG_RESET();#if 0	/* instruction cache enabled in cpu_init_f() for faster relocation */	icache_enable ();	/* it's time to enable the instruction cache */#endif	/*	 * Setup trap handlers	 */	trap_init (0);#if !defined(CFG_NO_FLASH)	puts ("FLASH: ");	if ((flash_size = flash_init ()) > 0) {# ifdef CFG_FLASH_CHECKSUM		print_size (flash_size, "");		/*		 * Compute and print flash CRC if flashchecksum is set to 'y'		 *		 * NOTE: Maybe we should add some WATCHDOG_RESET()? XXX		 */		s = getenv ("flashchecksum");		if (s && (*s == 'y')) {			printf ("  CRC: %08lX",					crc32 (0,						   (const unsigned char *) CFG_FLASH_BASE,						   flash_size)					);		}		putc ('\n');# else	/* !CFG_FLASH_CHECKSUM */		print_size (flash_size, "\n");# endif /* CFG_FLASH_CHECKSUM */	} else {		puts (failed);		hang ();	}	bd->bi_flashstart = CFG_FLASH_BASE;	/* update start of FLASH memory    */	bd->bi_flashsize = flash_size;	/* size of FLASH memory (final value) */	bd->bi_flashoffset = 0;#else	/* CFG_NO_FLASH */	bd->bi_flashsize = 0;	bd->bi_flashstart = 0;	bd->bi_flashoffset = 0;#endif /* !CFG_NO_FLASH */	WATCHDOG_RESET ();	/* initialize higher level parts of CPU like time base and timers */	cpu_init_r ();	WATCHDOG_RESET ();	/* initialize malloc() area */	mem_malloc_init ();	malloc_bin_reloc ();#ifdef CONFIG_SPI# if !defined(CFG_ENV_IS_IN_EEPROM)	spi_init_f ();# endif	spi_init_r ();#endif	/* relocate environment function pointers etc. */	env_relocate ();	/*	 * Fill in missing fields of bd_info.	 * We do this here, where we have "normal" access to the	 * environment; we used to do this still running from ROM,	 * where had to use getenv_r(), which can be pretty slow when	 * the environment is in EEPROM.	 */	s = getenv ("ethaddr");	for (i = 0; i < 6; ++i) {		bd->bi_enetaddr[i] = s ? simple_strtoul (s, &e, 16) : 0;		if (s)			s = (*e) ? e + 1 : e;	}	/* IP Address */	bd->bi_ip_addr = getenv_IPaddr ("ipaddr");	WATCHDOG_RESET ();	/** leave this here (after malloc(), environment and PCI are working) **/	/* Initialize devices */	devices_init ();	/* Initialize the jump table for applications */	jumptable_init ();	/* Initialize the console (after the relocation and devices init) */	console_init_r ();#if defined(CONFIG_MISC_INIT_R)	/* miscellaneous platform dependent initialisations */	misc_init_r ();#endif#if (CONFIG_COMMANDS & CFG_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	 */	timer_init();#ifdef CONFIG_SERIAL_SOFTWARE_FIFO	serial_buffered_init();#endif#ifdef CONFIG_STATUS_LED	status_led_set (STATUS_LED_BOOT, STATUS_LED_BLINKING);#endif	udelay (20);	set_timer (0);	/* Insert function pointers now that we have relocated the code */	/* Initialize from environment */	if ((s = getenv ("loadaddr")) != NULL) {		load_addr = simple_strtoul (s, NULL, 16);	}#if (CONFIG_COMMANDS & CFG_CMD_NET)	if ((s = getenv ("bootfile")) != NULL) {		copy_filename (BootFile, s, sizeof (BootFile));	}#endif /* CFG_CMD_NET */	WATCHDOG_RESET ();#if (CONFIG_COMMANDS & CFG_CMD_DOC)	WATCHDOG_RESET ();	puts ("DOC:   ");	doc_init ();#endif#if (CONFIG_COMMANDS & CFG_CMD_NAND)	WATCHDOG_RESET ();	puts ("NAND:  ");	nand_init();		/* go init the NAND */#endif#if (CONFIG_COMMANDS & CFG_CMD_NET) && defined(FEC_ENET)	WATCHDOG_RESET();	eth_init(bd);#endif#ifdef CONFIG_POST	post_run (NULL, POST_RAM | post_bootmode_get(0));#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 (CONFIG_COMMANDS & CFG_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		/* Also take the logbuffer into account (pram is in kB) */		pram += (LOGBUFF_LEN+LOGBUFF_OVERHEAD)/1024;#endif		sprintf (memsz, "%ldk", (bd->bi_memsize / 1024) - pram);		setenv ("mem", memsz);	}#endif#ifdef CONFIG_MODEM_SUPPORT {	 extern int do_mdm_init;	 do_mdm_init = gd->do_mdm_init; }#endif#ifdef CONFIG_WATCHDOG	/* disable watchdog if environment is set */	if ((s = getenv ("watchdog")) != NULL) {		if (strncmp (s, "off", 3) == 0) {			WATCHDOG_DISABLE ();		}	}#endif /* CONFIG_WATCHDOG*/	/* 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");	for (;;);}

⌨️ 快捷键说明

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