0

我是引导加载程序世界的新手,我有一个问题,当我们发送写入命令时,我们如何分配数据源,这与函数参数*src相关?我跟踪了源代码,但我找不到它在 c 代码中分配数据源的位置。

我自己回答:我发现当我们执行#mmc write 1 0x4 2 时,参数表示dev #1,block #4,count 2,如下函数的参数 mmc->block_dev.block_write( curr_device, blk, cnt, addr );

但是,我仍然想知道,是否可以直接分配外部数据源?

mmc write 或 mmc read 是否只能从内部存储器写入/读取?

是否可以分配外部数据源,例如来自 USB 端口或 SD 卡?

最良好的问候。

static unsigned long mmc_bwrite(int dev_num, unsigned long start, lbaint_t blkcnt, const void *src){
int err;
struct mmc *mmc = find_mmc_device(dev_num);

if (!mmc) {
    printf("MMC Device %d not found\n", dev_num);
    return 0;
}

if (blkcnt > 1)
    return mmc_bwrite_multi(mmc, start, blkcnt, src);
else if (blkcnt == 1)
    return mmc_bwrite_single(mmc, start, src);

return 0;

}

我应该如何跟踪如下代码?

mmc->block_dev.block_write = mmc_bwrite;
4

1 回答 1

1

src是指向文件系统内部的内存块的指针,如果您希望将数据从设备流式传输到 MMC,那么您将需要中间代码来缓冲内存中的流并将其传递给高级文件系统写入功能。您不应该mmc_write()直接访问。

我应该如何跟踪如下代码?

mmc->block_dev.block_write = mmc_bwrite;

这只是一个赋值,而不是函数调用。 mmc_bwrite是指向函数的指针:

mmc_bwrite(int dev_num, unsigned long start, lbaint_t blkcnt, const void *src)

它是一种在运行时而不是通过静态链接将设备驱动程序实现挂钩到文件系统的方法。在文件系统内,mmc_bwrite()将通过mmc->block_dev.block_write而不是直接调用。所以

mmc->block_dev.block_write(curr_device, blk, cnt, addr);

实际上是调用mmc_bwrite().

于 2013-08-07T14:51:27.427 回答