在uboot启动过程中,norflash的初始化在启动的第二阶段中,start_armboot()中调用了flash_init()函数,该函数(猜测)在[arm_lib/cfi_flash.c中(可能是在board/myjz2440/flash.c中),其中在cfi_flash.c中的flash_init函数在韦东山教程中使用了flash_detect_legacy (BANK_BASE(i), i)函数,该函数在/board/myjz2440/myjz2440.c中定义!!
流程如下:
start_armboot()
->flash_init()
->flash_detect_legacy (BANK_BASE(i), i) //返回值改为0即采用CFI方式
//return 1就是legacy方式
->flash_get_size (BANK_BASE(i), i); //普通情况使用后者!!!!
start_armboot()中nor和nandflash初始化相关函数:
NorFlash的初始化
#ifndef CFG_NO_FLASH
size = flash_init ();
display_flash_config (size);
NandFlash的初始化
#if defined(CONFIG_NAND)
puts ("NAND: ");
nand_init();
#endif
纠正:在start_armboot中使用的flash_init函数在/board/myjz2440/flash.c中,而不是/arm_lib/cfi_flash.c中,因为如果要在该函数的最前面有:
#ifdef CFG_FLASH_CFI_DRIVER
......
flash_init()
{ ... }
......
而要使用前面的flash_init()函数,对于韦东山教程中在/include/configs/100ask24x0.h中定义了:
#define CFG_FLASH_CFI 1
#define CFG_FLASH_CFI_DRIVER 1
#define CFG_FLASH_USE_BUFFER_WRITE 1
#define CONFIG_FLASH_CFI_LEGACY 1
一般情况下是不用的,只使用了一般的方法!!!!!!!
流程如下:
start_armboot()
->flash_init()
->flash_detect_legacy (BANK_BASE(i), i) //返回值改为0即采用CFI方式
//return 1就是legacy方式
->flash_get_size (BANK_BASE(i), i); //普通情况使用后者!!!!
start_armboot()中nor和nandflash初始化相关函数:
NorFlash的初始化
#ifndef CFG_NO_FLASH
size = flash_init ();
display_flash_config (size);
NandFlash的初始化
#if defined(CONFIG_NAND)
puts ("NAND: ");
nand_init();
#endif
纠正:在start_armboot中使用的flash_init函数在/board/myjz2440/flash.c中,而不是/arm_lib/cfi_flash.c中,因为如果要在该函数的最前面有:
#ifdef CFG_FLASH_CFI_DRIVER
......
flash_init()
{ ... }
......
而要使用前面的flash_init()函数,对于韦东山教程中在/include/configs/100ask24x0.h中定义了:
#define CFG_FLASH_CFI 1
#define CFG_FLASH_CFI_DRIVER 1
#define CFG_FLASH_USE_BUFFER_WRITE 1
#define CONFIG_FLASH_CFI_LEGACY 1
一般情况下是不用的,只使用了一般的方法!!!!!!!