本文主要是介绍寻找网卡初始化的地方,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
2019/07/18
今天算是真正深入DPDK的文件中查看源码,真的是发现了很多很多,它使用的技巧,具体的内容现在一时也说不清楚,就一点一点记录把。
入口点
rte_eal_init->rte_bus_scan
进入这个函数的文件之后,发现它使用了一个rte_bus_list的变量,但怎么也找不到具体的定义。
最后发现,librte_eal/common/include/rte_bus.h:TAILQ_HEAD(rte_bus_list, rte_bus)
这个宏就是定义这个东西的,TAILQ[2]是linux的头文件,所以一直我都找不到这个宏的定义。各种设备的初始化
对于各种设备的初始化,他们的那个数组我一直都找不到具体的初始化过程;后来发现是GCC的一种形式,就是在main函数之前就进行了相关内容的初始化,这一块我不是非常理解。他可以在main之前执行没问题,但最后执行的时候为什么能包含那一块,这个问题就是相关的编译和链接的问题。网卡初始化[1]
这个应该是我看的最早的一篇,但是这篇文章基于DPDK的版本很早了,所有代码基本上都不一样了。
不过最重要的,还是前面2中提到的,这个函数能够在main函数执行前就跑了。(疑问,那内核模块也是这么跑的?)
4.关于GCC编译
对于2中main函数之前执行相关函数,需要相关的属性定义[3]
5.DPDK初始化相关的内容
[4][5][6][7][8][9]
- 网卡驱动与PCI设备等一系列内容的关系
文章[10][11]从内核的角度,解释了所有设备进行注册的过程,这个里面的内容呢,跟我在查看DPDK的源码过程中得到的认知是相仿的。但是这一块内容,怎么说呢,我只需要知道这样一个流程就可以了,并不需要进行深入理解。
所以按照这么来理解,最开始的全局变量,一般是设备,网卡设备,这些都是驱动部分先进行注册,然后将这些内容挂载在具体的部分。先是bus_scan,然后是bus_probe。
参考文献
[1][DPDK收发包处理流程-----(一)网卡初始化
[2]queue.h中TAILQ_QUEUE的解析
[3]attribute中constructor和destructor
[4]DPDK源码学习——初始化
[5]DPDK初始化分析(一)
[6]http://blog.chinaunix.net/uid/28541347/cid-222786-list-2.html
[7]dpdk源码(16.04)分析--端口初始化
[8]DPDK学习(网卡初始化)
[9]DPDK的RTE_INIT初始化
[10]Linux网卡驱动学习(一)
[11]Linux网卡驱动学习(二)
这篇关于寻找网卡初始化的地方的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!