加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

BLOB(1)

发布时间:2020-12-15 06:58:22 所属栏目:百科 来源:网络整理
导读:? 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,l
?


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? 开始扫描

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读