Linux内核链表list

    技术2022-05-19  23

         看SPI驱动核心模块时,看到用到很多klist,之前没多深入理解,现在来一步步分析源码。klist是对list_head的扩展,实现代码很少。内核代码:

    include/linux/klist.h

    lib/klist.c

    ----------------------

    先要有一点点预备知识——list_head

    ----------------------

    先看看头文件如何定义klist,以及一些基本操作方法接口。

    ----------------------

    klist头文件

     

    ----------------------

    klist实现代码

     

    ----------------------

    总结:

    按面向对象的思想

    klist是一个链表操作类,klist->k_list是链表入口,get/put是节点操作的方法。

    knode是链表节点,knode->n_klist包括节点状态、链表入口, kref节点引用次数, n_node是节点链表入口

    klist_iter是迭代器,是作为klist链表中查找特定对象的辅助结构体。查找特定的n_node

    ----------------------

    结合内核驱动模型说明下klist的用法,实现代码在/drivers/base/core.c。

    ----------------------

    klist的应用

     

    ----------------------


    最新回复(0)