0

私はブートローダーの世界に不慣れです。関数引数 *src に関連するデータ ソースを割り当てる方法について、書き込みコマンドを送信するタイミングについて質問がありますソース コードをトレースしましたが、C コードでデータ ソースが割り当てられている場所が見つかりません。

自分で答えます: #mmc write 1 0x4 2を実行 すると、引数はdev # 1、ブロック # 4、カウント 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 に答える