bbb u-boot mmc总线初始化分析
1. ?arch/arm/lib/ctr0.s
.global _main
_main:
? ? ? ? ? ?bl board_init_f
2. ?arch/arm/lib/spl.c
void __weak board_init_f(ulong dummy)
{
? ? ?board_init_r(NULL, 0);
}
前兩布應該還沒有初始化串口,所以看不到打印
3. arch/arm/lib/board.c
//從這個函數(shù)開始才有打印,而且函數(shù)的開頭部分也沒有打印
void board_init_r(gd_t *id, ulong dest_addr)
{
? ? ?puts("MMC: ? ");
? ? ?mmc_initialize(gd->bd);
}
4. drivers/mmc.c
int mmc_initialize(bd_t *bis)
{
? ? ?INIT_LIST_HEAD (&mmc_devices);
? ? ?cur_dev_num = 0;
? ? ?if (board_mmc_init(bis) < 0) ? ? ?//board_mmc_init實際調用了下面的__def_mmc_init函數(shù)
? ? ? ? ? cpu_mmc_init(bis); ? ? ? ? ? ? ? //cpu_mmc_init確沒有調用__def_mmc_init函數(shù)
? ? ?print_mmc_devices(','); ? ? ?//打印mmc總線信息
? ? ?return 0;
}
static int __def_mmc_init(bd_t *bis)
{
? ? ?return -1;
}
int cpu_mmc_init(bd_t *bis) __attribute__((weak, alias("__def_mmc_init")));
int board_mmc_init(bd_t *bis) __attribute__((weak, alias("__def_mmc_init")));
5. arch/arm/cpu/armv7/am33xx/board.c
int cpu_mmc_init(bd_t *bis)
{
? ? ?int ret;
? ? ?ret = omap_mmc_init(0, 0, 0);
? ? ?if (ret)
? ? ? ? ? return ret;
? ? ?return omap_mmc_init(1, 0, 0);
}
6. drivers/mmc/omap_hsmmc.c
int omap_mmc_init(int dev_index, uint host_caps_mask, uint f_max)
{
? ? ?struct mmc *mmc;
? ? ?mmc = &hsmmc_dev[dev_index];
? ? ?sprintf(mmc->name, "OMAP SD/MMC");
? ? ?mmc->send_cmd = mmc_send_cmd;
? ? ?mmc->set_ios = mmc_set_ios;
? ? ?mmc->init = mmc_init_setup;
? ? ?mmc->getcd = NULL;
? ? ?mmc_register(mmc);
}
7. drivers/mmc/mmc.c
int mmc_register(struct mmc *mmc)
{
? ? ?mmc->block_dev.if_type = IF_TYPE_MMC;
? ? ?mmc->block_dev.dev = cur_dev_num++;
? ? ?INIT_LIST_HEAD (&mmc->link);
? ? ?list_add_tail (&mmc->link, &mmc_devices);
}
總結
以上是生活随笔為你收集整理的bbb u-boot mmc总线初始化分析的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 误将钱存入招行信用卡怎么办
- 下一篇: 营口沿海银行是什么银行?存款安全吗