我是启动加载器世界的新手,我有一个问题,关于我们何时发送写命令如何分配数据源,这与函数参数 * src <有关/ STRONG>?我跟踪了源代码,但我找不到它在c代码中分配数据源的位置。
自己回答:我发现当我们做 #mmc写1 0x4 2 时,参数意味着 dev#1,block#4,count 2 ,如下面的函数参数 mmc-&gt; block_dev.block_write( curr_device,blk,cnt,addr );
但是,我仍然想知道,是否可以直接分配外部数据源?
mmc写入或mmc读取只能从内部存储器写入/读取吗?
是否可以分配外部数据源,例如USB端口或SD卡?
最佳&amp;方面。
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;
答案 0 :(得分: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()
的调用。