知道在哪里填充了操作结构
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。
我目前正在尝试编写一个 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。