UBOOT——第二阶段start_armboot函数详解(二)
---恢复内容开始---
1:初始化堆管理器
malloc的初始化只设置了堆的start地址和end地址、以及一个malloc_brk,uboot的堆内存管理机制重新开一个章节详解介绍;
1 #ifdef CONFIG_MEMORY_UPPER_CODE /* by scsuh */
2     mem_malloc_init (CFG_UBOOT_BASE + CFG_UBOOT_SIZE - CFG_MALLOC_LEN - CFG_STACK_SIZE);
3 #else
4     mem_malloc_init (_armboot_start - CFG_MALLOC_LEN);
5 #endif
1 static void mem_malloc_init (ulong dest_addr)
2 {
3     mem_malloc_start = dest_addr;
4     mem_malloc_end = dest_addr + CFG_MALLOC_LEN;
5     mem_malloc_brk = mem_malloc_start;
6 
7     memset ((void *) mem_malloc_start, 0,
8             mem_malloc_end - mem_malloc_start);
9 }
---------------------------------------------------------------------------
2:SD/MMC的初始化:输出SD/MMC:真正执行硬件初始化的函数是 cpu_mmc_init(bis);
1 #if defined(CONFIG_X210) 2 3 #if defined(CONFIG_GENERIC_MMC) 4 puts ("SD/MMC: "); 5 ///* //lqm masked 6 mmc_exist = mmc_initialize(gd->bd); 7 if (mmc_exist != 0) 8 { 9 puts ("0 MB\n"); 10 } 11 //*/ 12 #endif 13 14 #if defined(CONFIG_MTD_ONENAND) 15 puts("OneNAND: "); 16 onenand_init(); 17 /*setenv("bootcmd", "onenand read c0008000 80000 380000;bootm c0008000");*/ 18 #else 19 //puts("OneNAND: (FSR layer enabled)\n"); 20 #endif 21 22 #if defined(CONFIG_CMD_NAND) 23 puts("NAND: "); 24 nand_init(); 25 #endif 26 27 #endif /* CONFIG_X210 */
 1 int mmc_initialize(bd_t *bis)
 2 {
 3     struct mmc *mmc;
 4     int err;
 5 
 6     INIT_LIST_HEAD(&mmc_devices);
 7     cur_dev_num = 0;
 8 
 9     if (board_mmc_init(bis) < 0)
10         cpu_mmc_init(bis);
11 
12 #if defined(DEBUG_S3C_HSMMC)
13     print_mmc_devices(',');
14 #endif
15 
16     mmc = find_mmc_device(0);
17     if (mmc) {
18         err = mmc_init(mmc);
19         if (err)
20             err = mmc_init(mmc);
21         if (err) {
22             printf("Card init fail!\n");
23             return err;
24         }
25     }
26     printf("%ldMB\n", (mmc->capacity/(1024*1024/(1<<9))));
27     return 0;
---------------------------------------------------------------
3:env_relocate ();环境变量的重定位
 1 void env_relocate (void)
 2 {
 3     DEBUGF ("%s[%d] offset = 0x%lx\n", __FUNCTION__,__LINE__,
 4         gd->reloc_off);
 5 
 6 #ifdef CONFIG_AMIGAONEG3SE
 7     enable_nvram();
 8 #endif
 9 
10 #ifdef ENV_IS_EMBEDDED
11     /*
12      * The environment buffer is embedded with the text segment,
13      * just relocate the environment pointer
14      */
15     env_ptr = (env_t *)((ulong)env_ptr + gd->reloc_off);
16     DEBUGF ("%s[%d] embedded ENV at %p\n", __FUNCTION__,__LINE__,env_ptr);
17 #else
18     /*
19      * We must allocate a buffer for the environment
20      */
21     env_ptr = (env_t *)malloc (CFG_ENV_SIZE);
22     DEBUGF ("%s[%d] malloced ENV at %p\n", __FUNCTION__,__LINE__,env_ptr);
23 #endif
24 
25     if (gd->env_valid == 0) {
26 #if defined(CONFIG_GTH)    || defined(CFG_ENV_IS_NOWHERE)    /* Environment not changable */
27         puts ("Using default environment\n\n");
28 #else
29         puts ("*** Warning - bad CRC, using default environment\n\n");
30         show_boot_progress (-60);
31 #endif
32         set_default_env();
33     }
34     else {
35         env_relocate_spec ();
36     }
37     gd->env_addr = (ulong)&(env_ptr->data);
38 
39 #ifdef CONFIG_AMIGAONEG3SE
40     disable_nvram();
41 #endif
42 }
 
                    
                     
                    
                 
                    
                
 
 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号