Linux内核
文章平均质量分 73
小狮子安度因
这个作者很懒,什么都没留下…
展开
-
Linux内核源码-USB驱动分析
通用串行总线(USB)主要用于连接主机和外部设备(协调主机和设备之间的通讯),USB 设备不能主动向主机发送数据。USB 总线采用拓扑(树形),主机侧和设备侧的 USB 控制器(Host 和 UDC),每个总线只要一个主机控制器。主机侧的 USB 节点为根节点,所有子节点都连接在根节点集线器(Root hub)上,根节点有 USB 主机控制器(USB Host Controller)控制。结构体类型标识一个 USB 设备。USB 是一种总线,而连接到总线上 USB 设备可以是块设备、字符设备、输入设备等。原创 2024-09-03 23:23:36 · 590 阅读 · 0 评论 -
USB设备驱动代码分析(鼠标)
这段代码是用于定义一个 USB 鼠标设备的 ID 表。它使用了 Linux 内核中的结构,其中包含了 USB 设备的类、子类和协议信息。这个ID表定义了USB接口,其类别为HID(Human Interface Device),子类别为BOOT(表示鼠标设备),协议为MOUSE(表示鼠标协议)。这个表示在Linux内核的USB驱动中使用,可以匹配对应类型的USB设备,并进行相应的操作。在最后添加一个空结构表示结束符。原创 2024-08-24 19:54:25 · 1178 阅读 · 0 评论 -
Linux源码阅读笔记-USB设备驱动架构
USB系统主机端提供为4个引脚的A型接口,USB外围设备通过4个引脚的B型接口和主机端连接。那4个引脚(一条电压线VBUS、一条地线GND、一条正方向传输数据的D+和一条反方向传输数据的D-线。)USB主机和USB设备收发器可以采用相同型号的芯片。每个端点可以沿上行方向发送数据,也可以沿下行方向接收数据。寻址:USB设备里面每个寻址单元称为端点。为每个端点分配的地址称为端点地址。每个端点地址都与之相关的传输模式。USB传输模式:控制传输模式,中断传输模式,登时传输模式,批量传输模式。原创 2024-08-21 21:52:21 · 529 阅读 · 0 评论 -
PCI驱动代码分析
修订ID(revision ID):修订ID(Revision ID)是PCI设备的一个标识符,用于指示设备的版本或修订级别。类别ID(class ID):类别ID(Class ID)是PCI设备的一个标识符,用于指示设备所属的设备类别。每个PCI设备都有一个唯一的类别ID,它定义了该设备的功能和特征。设置驱动函数:使用pci_set_drvdata()函数将pci_mcard指针保存在设备结构体dev的私有数据字段中,以便后续在其他驱动程序调用时可以方便地获取。禁用 PCI 设备,防止进一步访问设备。原创 2024-08-19 14:23:05 · 588 阅读 · 0 评论 -
Linux源码阅读笔记20-PCI设备驱动详解
【代码】Linux源码阅读笔记20-PCI设备驱动详解。原创 2024-08-08 23:23:47 · 593 阅读 · 0 评论 -
Linux源码阅读笔记19-插入删除模块实战
前面已经讲了Linux模块的基本知识,现在我们来熟悉一下模块相关的基本操作。原创 2024-08-07 22:22:13 · 374 阅读 · 0 评论 -
Linux源码阅读笔记18-插入模型及删除模块操作
在详细讲解模块相关函数实现之前,有必要解释如何在内核中表示模块(及其属性)。:将一个新模块插入到内核中。如果模块B依赖模块A提供的函数,那么模块A和模块B之间就存在关系。当然,前提是该模块的代码不再使用,并且其他模块不再使用该模块导出的函数。函数(不是系统调用),用于从内核端加载模块。内核中驻留的每个模块,都分配了该结构的一个实例。同样,其目的在于将相应的符号放置到模块二进制映像的适当段中。用户空间工具和内核的模块实现之间的接口,包括两个系统调用。系统调用是用户空间和内核之间用于装载新模块的接口,通过。原创 2024-08-06 19:37:17 · 803 阅读 · 0 评论 -
Linux源码阅读笔记13-进程通信组件中
需要注意的是,这只是代码片段,并没有提供完整的上下文环境。在完成计算新位置之后,函数会对新位置进行合法性检查。,用于进行文件的轮询操作。它主要用于检查是否有数据可读,并返回相应的事件掩码。函数将当前进程加入到等待队列中,以便在有新数据到达时唤醒进程。的值不同,函数将会根据指定的偏移量进行定位,并返回新的位置。然后,在判断是否有数据可读之前,代码中缺少了一个变量。,它用于在文件中进行定位。最后,函数更新文件结构体中的当前位置(给调用者,表示当前的文件状态。)为新位置,并返回新位置值。最后,函数返回事件掩码。原创 2024-08-05 21:23:51 · 349 阅读 · 0 评论 -
Linux源码阅读笔记17-资源分配及总线系统
作为一种通用的外部总线,在用于连接中低数据传输速率的设备时(如鼠标,网络摄像头,键盘),USB很有优势。I/O内存不仅包括与扩展设备通信直接使用的内存区域,还包括系统中可用的物理内存和ROM存储器,以及包含在资源列表中的内存(可以使用proc文件系统中的iomem文件,显示所有的I/O内存)PCI(Peripheral Component Interconnect),是因特尔公司开发的一种标准总线,它迅速在系统组件和体系结构厂商中确立了自身的地位,成为一种非常流行的总线。如果区域不是空闲的,则分配失败。原创 2024-08-02 09:54:50 · 417 阅读 · 0 评论 -
Linux源码阅读笔记16-文件系统关联及字符设备操作
设备文件都是由标准函数处理,类似普通文件。设备文件也是通过虚拟文件系统来管理的,和普通文件都是通过完全相同的接口访问的。读写字符设备文件,其实虚拟文件和设备驱动程序代码之间已建立关联。调用标准库的读写操作,向内核发出一些系统调用,最终会调用。通过chrdev_open打开字符设备的通用函数。在打开一个设备文件时,各种文件系统的实现基本都会调用。与自负设备相比,块设备操作的指针会集中到一个叫做。表示,同时内核维护一个数据库,包括所有活动的。函数,为块设备或字符设备创建一个。前面说到过,字符设备是由。原创 2024-07-28 19:20:49 · 376 阅读 · 0 评论 -
Linux源码阅读笔记15-块设备详解
磁盘是计算机主要的存储介质,可以存储大量二进制数据,并且断电后也能保持数据不丢失。早期计算机使用的磁盘是软磁盘(Floppy Disk,简称软盘);如今常用的磁盘是硬磁盘(Hard Disk,简称硬盘)。是一种具有一定结构的随机存取设备,对这种设备的读写是按照块进行的,它使用缓冲区来存放暂时的数据,满足条件,从缓存一次性写入设备或者从设备一次性读取到缓冲区。中对块设备或者设备分区抽象,它唯一对应于一个设备号。,对通用磁盘的描述,与真正的底层物理设备关联。对于分区来说,主设备号相同,次设备号不同。原创 2024-07-27 21:13:48 · 724 阅读 · 0 评论 -
Linux源码阅读笔记14-IO体系结构与访问设备
内核会区分字符设备和块设备。设备驱动程序的任务在于支持应用程序由设备文件与设备通讯,是的能够按照适当方式在设备上读取/写入数据。这些文件并不关联到硬盘或其他任何存储介质上的数据段,而是建立了与某个设备驱动程勋的连接,以支持与扩展设备的通信。设备文件需要设备号才能创建,设备驱动也需要设备号才能装载,设备文件是通过主设备号找到它的驱动;设备驱动利用次设备号才知道他要操作的是具体哪个设备。设备号,就是系统分配一个编号,设备号是一个无符号32位整数,包括主设备号+次设备号,主设备号位高12位,次设备号位低20位。原创 2024-07-25 15:38:11 · 1241 阅读 · 0 评论 -
Linux源码阅读笔记13-进程通信组件上
每一个设备都有一个设备号,字符模块有一个字符模块的ID就是设备号;一个主设备号可以有多多个次设备号。原创 2024-07-18 15:59:48 · 371 阅读 · 0 评论 -
Linux源码学习笔记01-Linux内核源码结构
是一个类Unix操作系统,但不是简化的Unix;不仅继承了Unix的特征,还有其他特性。原创 2024-06-16 23:16:44 · 815 阅读 · 0 评论 -
Linux源码阅读笔记02-进程原理及系统调用
他是独立运行在内核中的进程,与普通用户进程区别在于内核线程没有独立的进程地址空间。task_struct结构里面有一个成员指针mm设置为NULL,他只能运行在内核空间通常被称为守护线程。Linux通过:ps输出当前系统的进程状态。显示瞬间进程状态,不是动态连续;如果想动态连续,使用top命令。系统调用就是应用程序进入内核空间执行任务,比如:创建进程、文件IO等等。将进程抽象为进程控制块(PCB,Process Control BLock),Linux内核中使用。结构描述进程控制块。运行应用程序时,调用。原创 2024-06-17 07:02:02 · 1001 阅读 · 0 评论 -
Linux源码阅读笔记03-调度器及CFS调度器
完全公平调度算法体现在对每个进程都是公平的,让每个进程都运行一段相同的的时间片,这就是基于时间片轮询调度算法。古国一个进程得以执行,随着时间的不断增长,他的vruntime也会不断增大,没有得到执行的进程vruntime保持不变。调度器:Linux内核中用来安排调度进程(一段程序的执行过程)执行的模块成为调度器,他可以切换进程状态。在一个调度周期里,所有进程的虚拟运行时间是相同的,所以在进程调度时,只要找到虚拟运行时间最小的进程调度即可。指向红黑树最左边的调度实体,即虚拟时间最小的调度实体。原创 2024-06-18 10:42:58 · 622 阅读 · 0 评论 -
Linux源码阅读笔记04-实时调度类及SMP和NUMA
对称多处理器结构(symmetrical mulit-processing,SMP),在对称多处理器系统中,所有处理器的地位都是平等的,所有CPU共享全部资源,比如内存,总线,中断及IO系统等等,都具有相同的可访问性,消除结构上的障碍,最大的特点是共享资源。NUMA是多处理器计算机,系统各个CPU都有本地内存都可以支持超快的访问能力,各个处理器之间用总线链接,支持对其他CPU的本地内存访问(但是访问比自己内存慢一点)。多处理器系统中,内核需要额外考虑几个问题,确保良好调度。原创 2024-06-21 00:16:20 · 952 阅读 · 0 评论 -
Linux源码阅读笔记05-进程优先级与调度策略-实战分析
如果有相同优先级的实时进程(根据优先级计算的调度权值是一样的)已经准备好,FIFO 时必须等待该进程主动放弃之后才可以运行这个优先级相同的任务。而 RR 可以每个任务都执行一段时间。(SCHED_NORMAL/SCHED_BATCH/SCHED_IDLE),始终返回0,即普通任务调度的函数。实时调度策略(SCHED_FIFO/SCHED_RR)优先级最大值为99;支持优先级使用,它们分别为 1-99,数值越大优先级越高。它 不 支 持 优 先 级 使 用 , 而。设置和获取优先级的2个主要核心参数。原创 2024-06-23 02:43:33 · 377 阅读 · 0 评论 -
Linux源码阅读笔记06-RCU机制和内存优化屏障
在编程的时候,指令一般不按照源程序顺序执行,原因是为了提高程序性能,会对他进行优化,主要分两种:编译器优化和CPU执行优化。优化屏障避免编译的重新排序优化操作,保证编译程序时在优化屏障之前的指令不会在优化屏障之后执行。RCU记录所有指向共享数据的指针使用者,当要修改共享数据时,首先创建一个副本,在副本中修改。内存屏障(也称内存栅障或屏障指令等),是一类同步屏障指令,是编译器或CPU对内存访问操作的时候,严格按照一定顺序来执行,也就是。在整个操作过程中,要防止编译器和CPU优化代码执行的顺序。原创 2024-06-25 18:46:03 · 1150 阅读 · 0 评论 -
Linux源码阅读笔记07-进程管理4大常用API函数
获取进程描述符,且描述符的。+1,表示进程多一个用户。原创 2024-06-27 21:44:18 · 341 阅读 · 0 评论 -
Linux源码阅读笔记09-进程NICE案例分析1
函数功能:获取某个进程的nice值,其中nice值为进程的优先级,与静态优先级有关(nice=static_prio-120)。原创 2024-07-02 23:16:42 · 244 阅读 · 0 评论 -
Linux源码阅读笔记10-进程NICE案例分析2
静态优先级,直接通过 set_user_nice()函数更改进程的静态优先级。(nice的取值范围:-20 ~ 19)函数功能:设置某进程的 NICE 值,其 NICE 值的计算是根据进程的。原创 2024-07-02 23:20:24 · 179 阅读 · 0 评论 -
Linux源码阅读笔记12-RCU案例分析
在中我们已经了解了RCU机制的原理和Linux的内核源码,这里我们要根据RCU机制写一个demo来展示他应该如何使用。原创 2024-07-03 22:22:58 · 508 阅读 · 0 评论