知道在哪里填充了操作结构

Knowing where op structs are filled

我目前正在尝试编写一个 linux 驱动程序,为此我有必要了解一些 api 以充分利用它们。我经常遇到这样一种模式:我开始深入研究一个函数,并在函数读取的某个点结束:

returnType OperationX(args...) {
    ...
    struct operations_t operations = get_operations();
    if(operations->X)
        return operations->X(args...)

}

基本上 get_operations() returns 一个指向全局结构的指针,它包含一个指向实际函数的指针 运行 操作。

我发现使用 linux cross reference 深入研究不同的地方然后真正了解实际发生了哪些赋值非常乏味。有没有更好更快的方法?

例如 dma mapping

git grep 和 cscope 是你最好的朋友。

顺便说一句,DMA 操作由平台代码或 IOMMU 实现填充。我敢打赌你很可能为此使用了 lib/swiotlb.c。