全部博文(28)
分类: 嵌入式
2014-04-18 20:48:31
第二阶段的功能:
<1>初始化IRQ FIQ模式的栈
arch_cpu_init
<2>设置系统时钟 保存机器ID
gd->bd->bi_arch_number = MACH_TYPE_S3C2440; //值为362
<3>初始化中断、定时器
interrupt_init
timer_init
<4>检查flash上的环境参数是否有效
env_init
<5>初始化串口控制台
init_baudrate, /* initialze baudrate settings */
serial_init, /* serial communications setup */
console_init_f, /* stage 1 init of console */
<6> say that we are here 打印出uboot的版本信息及各模块的地址
display_banner
<7>检测系统内存映射(memory map)
int dram_init(void)
{config配置中有关于 PHYS_SDRAM_1 PHYS_SDRAM_1_SIZE变量的定义
gd->bd->bi_dram[0] . start = PHYS_SDRAM_1; //即0x3000 0000
gd->bd->bi_dram[0].size = PHYS_SDRAM_1_SIZE; //即0x0400 0000
}
<8>将SDRAM的参数打印出来
display_dram_config
<9>初始化NOR_flash并打印出其配置的参数数信息
display_flash_config (flash_init ());
10>Nand_flash初始化
nand_init()
<11>初始化环境变量并读入指定的内存
env_relocate ();
<12>初始化各种设备驱动 i2c lcd key等
stdio_init (); /* get the devices list going. */
<13>初始化网络设备 和控制台 使能中断
gd->bd->bi_ip_addr = getenv_IPaddr ("ipaddr");
init_fnc_t **init_fnc_ptr; //定义二级函数指针
char *s;
gd = (gd_t*)(_armboot_start - CONFIG_SYS_MALLOC_LEN - sizeof(gd_t));
定义了全局数据指针,armboot_start的值位于0x3ff80000,且CONFIG_SYS_MALLOC_LEN在congfig中有定义
#define config_sys_malloc_len (CONFIG_ENV_SIZE + 128 * 1024)
#define CONFIG_ENV_SIZE 0x20000 //128K为256M的Nandflash的块大小,block。
通过以上计算得出 config_sys_malloc_len 的大小为 256k = 0x4 0000。
再来看一下结构体gd_t,位于arch/arm/include/asm/global_data.h
sizeof(gd_t)=4 + 4 * 6 + 4+?+? = 32 +?= 0x20+?。
故gd所指向地址 0x3ff80000 - 0x40000 - 0x20-?为 0x3FF3 FFE0-?
点击(此处)折叠或打开
__asm__ __volatile__("": : :"memory"); //分配一个存储全局数据的区域,地址给指针 gd/
//uboot镜像文件大小
monitor_flash_len = _bss_start - _armboot_start;
//初始化函数循环
见上述<3>--<8>
for (init_fnc_ptr = init_sequence; *init_fnc_ptr; ++init_fnc_ptr) {
if ((*init_fnc_ptr)() != 0)
{
hang ();
}
}
点击(此处)折叠或打开
点击(此处)折叠或打开
for (init_fnc_ptr = init_sequence; *init_fnc_ptr; ++init_fnc_ptr) {
if ((*init_fnc_ptr)() != 0)
{ hang ();}}
点击(此处)折叠或打开
点击(此处)折叠或打开
点击(此处)折叠或打开
点击(此处)折叠或打开
点击(此处)折叠或打开
点击(此处)折叠或打开
点击(此处)折叠或打开
点击(此处)折叠或打开
点击(此处)折叠或打开
点击(此处)折叠或打开