概述 Linux内核的等待队列(Wait Queue)是重要的数据结构,与进程调度机制紧密相关联,可以用来同步对系统资源的访问、异步事件通知、跨进程通信等。在Linux中,等待队列以循环链表为基础结构,包括两种数据结构:等待队列头(wait queue head)和等待队列元素(wait queue),整个等待队列由等待队列头进行管理 核心原理 内…
概述 linux提供了一种称为模块(Module)的机制,模块具有如下的特点 模块自身不被编译到内核映像中,从而不影响内核映像的大小 一旦模块被加载,模块和内核中的其他部分的功能完全一样 管理方式 显示当前装入的内核模块: lsmod 显示模块信息: modinfo module_name 显示所有模块的配置信息: modprobe -c | le…
符号导出 概述 Linux中一组API使得开发人员可以将需要的符号导出,如下 EXPORT_SYMBOL EXPORT_SYMBOL 是一个在 Linux 内核代码中使用的宏。它的主要作用是将一个符号(通常是一个函数名或变量名)导出,使其可以被内核的其他部分或者动态加载的内核模块LKMs访问 EXPORT_SYMBOL_GPL EXPORT_SYM…
模块入口和出口注册API 在各个linux子模块中经常可以看到的module_init和module_exit两个宏,这分别注册了模块的初始化和结束部分需要调用的函数 module_init(demo_init):module_init宏的作用是告诉内核,当这个模块被加载时,应该执行名为 demo_init 的函数。demo_init 函数通常包含…
参考文档 Release v5.4 · torvalds/linux 概述 常规写法的经典链表每个链表的节点包含指针部分和数据部分,每个节点的指针是一个指针指向下一个节点。每一个链表的节点的内容都是不一样的,每一个链表都需要定义一次,包括对于链表的操作的API也需要重新开发 Linux中的侵入式链表与普通的链表不同的,Linux提供了一个公共的链表…
参考文档: 【原创】Linux select/poll机制原理分析 - LoyenWang - 博客园 (cnblogs.com) 源码解读poll/select内核机制 - Gityuan博客 | 袁辉辉的技术博客 Linux 5.4源码 发展历史 API 发布的时间线 下文中列出了网络 IO 中,各个 api 的发布时间线 1983,socke…
参考文档 Release v5.4 · torvalds/linux 概述 cfg80211模块与驱动模块的交互是通过一系列API来进行交互的,这些API是由内核定义在include/net/cfg80211.h中的struct cfg80211_ops结构体中 这些接口由驱动模块定义并在驱动初始化阶段注册在内核中 整体流程 这个函数通过几个关键步…
参考文档: Linux 802.11 Driver Developer’s Guide — The Linux Kernel documentation Netlink - 维基百科,自由的百科全书 Emulating WLAN in Linux - part I: the 802.11 stack | Linux Embedded 笔者注:关于L…
文件描述符,句柄,标准输入,标准输出,标准错误这些其实是相同的东西 句柄是文件描述符的一个别名,标准输入、输出、错误是三个特殊的文件描述符 文件描述符 文件描述符是计算机操作系统中用于标识和访问打开的文件或设备的整数值。它是操作系统为每个进程维护的一种表格数据结构的索引,用于跟踪文件或设备的状态和属性 在Linux系列的操作系统上,由于Linux的…
1. 进程的定义 PCB 是进程实体的一部分,是操作系统中最重要的记录型数据结构。作用是使一个在 多道程序环境下不能独立运行的程序,成为一个能独立运行的基本单位,成为能与其它进程 并发执行的进程。OS是根据PCB对并发执行的进程进行控制和管理的 Linux的进程控制块为一个由结构task_struct所定义的数据结构,其中包括管理进程所需的各种信息…