我目前正在尝试编写一个Linux驱动程序,为此我必须了解一些api以充分利用它们。我常常遇到一种模式,在这种模式中我开始挖掘功能并最终在函数读取的位置:
returnType OperationX(args...) {
...
struct operations_t operations = get_operations();
if(operations->X)
return operations->X(args...)
}
基本上get_operations()返回一个指向全局结构的指针,该结构包含一个指向运行该操作的实际函数的指针。
我觉得使用linux cross reference挖掘不同的地方然后实际了解实际发生了哪些任务非常繁琐。有更好的更快的方式吗?
示例是dma mapping。
答案 0 :(得分:1)
git grep
和cscope是你最好的朋友。
顺便说一句,DMA操作由平台代码或IOMMU实现填充。我敢打赌你可能已经使用了lib / swiotlb.c。