---恢複内容開始---
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 }