前言 在710的这个专栏里,我上篇文章中主要分析了驱动代码中的注册函数以及注册所需的结构体,其中有很多内容,今天我们围绕i40e_probe这个探测函数进行分析,由于研究原因以及时间原因,对这个驱动代码的分析,还是紧紧围绕虚拟化这个部分来分析,也就是VF。 代码在github上有共享链接在这:i40e大家如有需要可自行下载。 i40e_probe 该函数位于:i40e_main.c函数下,共计700多行。代码比较多其中包括了配置DCB,配置dma的高低地址,设置pci的链接,设置mac类型,初始化adminq(710自己定义的cmd命令函数),sw初始化, 配置SRIOV,配置二层VLAN等...

  j12w6g2rqsge   2023年12月08日   14   0   0 Intel710probesriovIntel710sriovprobe

之前写过一个版本的通讯录,当时还没有学习动态内存管理,所以只是简单实现了一版。传送门在这: 通讯录 在之前一段时间把动态内存管理学完之后,今天把这个小项目,重新捡起来,改一改,供大家参考。 之前写的时候是给了1000个人的信息,一旦生成.exe文件后,那么这个数量信息就没法改了。不太方便。今天主要是利用动态内存开辟,优化一下之前写的代码。改成动态增长的版本。 动态增长版本通讯录 设定: 默认可以存放3个人的信息,当发现当前通讯录满的时候,我们进行扩容,每次增加两个信息长度的空间。 (这里空间个数少,是方便我调试,大家可以直接多来点空间。) contact.h 首先针对头文件中,我们的宏定义1...

由于研究学习的需要,要对intelXL710网卡的驱动代码进行分析,主要分析其VF的相关代码,整个代码量相当大,有数万行。当然我也是从头开始学,一点一点分析并记录在51cto的博客中,如果大家在阅读过程中发现有错误,请及时提出,另外我会专门开一个专栏,用来记录对每个函数的分析,有些可能会对每行代码进行分析。 代码在github上有共享链接在这:i40e大家如有需要可自行下载。 那么今天就从i40e的驱动中i40e_driver的这个结构体出发,一点一点抽丝剥茧来看来分析。 首先一个设备的驱动程序,一般来说都有一个接口,因为一个硬件插入到主机当中,一定是要通过驱动来讲这个设备注册到系统里,通...

动态内存管理第一部分解释了什么是动态内存管理,有什么用,以及一些函数,第二部分主要讨论了动态内存在使用的时候会出现一些经典的错误,需要注意。 那么这个第三部分主要讨论一些有关动态内存管理有关的比较经典的笔试题。 题目1 请问运行Test函数会有什么样的结果? voidGetMemory(charp){ p=(char)malloc(100); } voidTest(void){ charstr=NULL; GetMemory(str); strcpy(str,"helloworld"); printf(str); } intmain(){ Test(); return0; } 结果: ...

也许你从未听说过这个柔性数组(flexiblearray)这个概念,但是它确实是存在的,C99中,结构中的最后一个元素允许是未知大小的数组,这就叫做【柔性数组】成员。 柔性数组举例 什么意思呢?举个例子: structP{ charn; inta; charcrr[];//可变长度/未知大小 //charcrr[0]//这个也可以 }; intmain(){ structPp; return0; } 其中crr[]就是柔性数组成员-因为它的数组大小是可以调整的。 柔性数组的特点 1.结构中的柔性数组成员前面必须至少有一个其他成员。 2.sizeof返回的这种结构大小不包括柔性数组的内...

在讨论自定义数据类型之前,我们不妨先回忆一下C语言的内置类型。例如字符型的char,整型中的intshortlong以及浮点型的floatdouble,这些都会C语言本身提供的数据类型,但仅仅有这些,是不足以满足我们的开发的。那么也就意味着需要一些复杂类型来帮助我们实现对复杂对象的操作,例如结构体,枚举,联合体等。 结构体 本章主要讨论结构体。将由以下几个部分组成 结构体类型的声明 结构的基础 结构是一些值的集合,这些值称为成员变量。结构的每个成员可以是不同类型的变量。(那么看到了集合我们又会想到数组,回忆一下数组,数组指的是相同类型的一个集合。这是他们的区别。) 结构的声明 struc...

引言 C语言中对字符和字符串的处理是很频繁的,但是C语言本身是没有字符串类型的,字符串通常放在常量字符串中,或者字符数组中。字符串常量适用于对其不做修改的字符串函数。 计算字符串长度 strlen size_tstrlen(constcharstr); 求出字符串str的长度 以空字符‘\0’为结束标志(不包括空字符)从起始位置开始计算直到遇到‘\0’就结束。 简单的用法: intmain(){ intlen=strlen("abcdef"); printf("%d\n",len);//输出结果为:6 } abcdef正好六个字符,结果就是6。 假设如果是下面这种情况结...

一维数组 intmain(){ chararr[]="abcdef"; //arr[]存放的是abcdef\07个字符每个字符为1 printf("%d\n",sizeof(arr)); //7计算数组的大小7 printf("%d\n",sizeof(arr+0)); //8计算地址大小4或8跟具体是64位机器还是32位机器有关 printf("%d\n",sizeof(arr)); //1char类型的数组的步长解引用只取一个字节的大小这里如果输出arr则应该是a即首元素地址 printf("%c\n",arr); printf("%d\n",sizeof(arr[1])); //1 ...

前言 内核中有许多子系统,他们相互独立,但又具有很强的依赖性。因此其中一个子系统侦测到的或者产生的事件其他子系统可能都有兴趣,那么为了实现这样的交互需求,Linux使用了所谓的通知链(notificationchain)。 本博客包含的主要内容 1.通知链如何声明以及内核代码定义了那些链(chain)。 2.内核子系统如何向通知链注册。 内核子系统如何在链上产生通知消息。 正文 为什么需要通知链? 考虑下面一个场景或者例子。假设你的所在的网络D有一台路由器RT可以直接访问网络B和网络C,又可以通过网络B或者网络C访问到网络A。这样的一个拓扑结构。最初通过网络C这条路径访问网络A是因为这条...

  j12w6g2rqsge   2023年11月13日   17   0   0 c内核函数linux
关注 更多

空空如也 ~ ~

粉丝 更多

空空如也 ~ ~