BLOB(1)

 


BLOB(1)


分析一下这个的引导过程


初试化函数

typedef void(*initfunc_t)(void);


typedef struct {
 u32 magic;
 initfunc_t callback;
 int level;
} initlist_t;


#define __init __attribute__((used, __section__(".initlist")))

#define __initlist(fn, lvl) \
static initlist_t __init_##fn __init = { \
 magic:    INIT_MAGIC, \
 callback: fn, \
 level:   lvl }


所有的init函数都放在initlist段中

所有的退出函数都放在exitlist 段中

static struct nand_info monahans_nand;

XllpFlashDfcInitNOGPIO

根据当前平台使用的flash类型,来初始化 DFC

DFC的类型有如下一些

typedef enum {
 XLLP_DFC_FLASH_NULL = 0 ,
 XLLP_DFC_FLASH_Samsung512MbX16 = 1,
 XLLP_DFC_FLASH_Micron1GbX8 = 2,
 XLLP_DFC_FLASH_Micron1GbX16= 3,
 XLLP_DFC_FLASH_STM1GbX16= 4,
 XLLP_DFC_FLASH_STM2GbX16= 5,
 XLLP_DFC_FLASH_STM70nm1GbX16= 6,
 XLLP_DFC_FLASH_Toshiba2GbX16= 7,
 XLLP_DFC_FLASH_END,
}XLLP_DFC_FLASH_TYPE;


接下来通过flash的类型来获取flash的信息

Zylonite board(Samsung K9K1216Q0C)

定义了7种flash芯片

static XLLP_DFC_FLASH_TYPE_INFO typeInfo[] = {
 { XLLP_DFC_FLASH_Samsung512MbX16, &samsung512MbX16},
 { XLLP_DFC_FLASH_Micron1GbX8, &micron1GbX8},
 { XLLP_DFC_FLASH_Micron1GbX16,&micron1GbX16},
 { XLLP_DFC_FLASH_STM1GbX16,&stm1GbX16},
 { XLLP_DFC_FLASH_STM2GbX16,&stm2GbX16},
 { XLLP_DFC_FLASH_STM70nm1GbX16,&stm70nm1GbX16},
 { XLLP_DFC_FLASH_Toshiba2GbX16,&toshiba2GbX16},
 { XLLP_DFC_FLASH_NULL, NULL},
};

这样就获取了flash芯片的信息


然后对其设置计时信息

XllpFlashDfcSetDMA

设置DMA
XllpFlashDfcSetECC

设置ECC

XllpFlashDfcSetSpare

完成了对flash的各种设置

XllpFlashDfcReadID 读取厂商ID和设备 ID

scan_nand  开始扫描

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值