02.07.2013 Views

Uboot中start.S源码的指令级的详尽解析

Uboot中start.S源码的指令级的详尽解析

Uboot中start.S源码的指令级的详尽解析

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

┳┳┳┳┳┳┳┳┳┳┳┳┳┳┳┳┳┳┳┳┳┳┳┳┳┳┳┳┳┳┳┳┳┳┳┳┳┳┳┳┳<br />

typedef struct global_data {<br />

bd_t *bd;<br />

unsigned long flags;<br />

unsigned long baudrate;<br />

unsigned long have_console; /* serial_init() was called */<br />

unsigned long reloc_off; /* Relocation Offset */<br />

unsigned long env_addr; /* Address of Environment struct */<br />

unsigned long env_valid; /* Checksum of Environment valid? */<br />

unsigned long fb_base; /* base address of frame buffer */<br />

#ifdef CONFIG_VFD<br />

#endif<br />

#if 0<br />

#endif<br />

} gd_t;<br />

unsigned char vfd_type; /* display type */<br />

unsigned long cpu_clk; /* CPU clock in Hz! */<br />

unsigned long bus_clk;<br />

unsigned long ram_size; /* RAM size */<br />

unsigned long reset_status; /* reset status register at boot */<br />

void **jt; /* jump table */<br />

┻┻┻┻┻┻┻┻┻┻┻┻┻┻┻┻┻┻┻┻┻┻┻┻┻┻┻┻┻┻┻┻┻┻┻┻┻┻┻┻┻<br />

而此全局变量gd_t *gd会被其他很多文件所引用,详情自己去代码中找。<br />

.macro get_fiq_stack @ setup FIQ stack<br />

ldr sp, FIQ_STACK_START<br />

.endm<br />

此处和上面类似,把地址为FIQ_STACK_START中的内容,给sp。<br />

其中:<br />

FIQ_STACK_START = IRQ_STACK_START - CONFIG_STACKSIZE_IRQ;<br />

即FIQ的堆栈起始地址,是IRQ堆栈起始地址减去IRQ堆栈的大小。<br />

/*<br />

* exception handlers<br />

*/<br />

.align 5<br />

undefined_instruction:<br />

get_bad_stack<br />

bad_save_user_regs<br />

bl do_undefined_instruction<br />

.align 5

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!