07 2022 档案
摘要:工作队列work queue 工作队列(work queue)是中断下半部的一种实现机制,主要用于耗时任务处理,由内核线程代表进程执行。工作队列运行于进程上下文,因此允许阻塞。 运行工作队列的内核线程,称为工作者线程(worker thread),可以使用系统默认的,也可以自行创建(通常无必要理由不
阅读全文
摘要:tasklet tasklet 是中断下半部的一种实现机制,主要用于小任务处理,耗时较短、不能阻塞的任务,用tasklet处理较合适。对于耗时较长,可以用work queue(工作队列)来处理。 tasklet和内核定时器timer_list都是通过软中断方式来实现的。 tasklet结构体 中断下
阅读全文
摘要:内核定时器 软件意义的定时器依赖于硬件定时器来实现,内核在时钟中断发生后检测各定时器是否到期,到期后定时器处理函数将作为软中断在底半部执行。实质上,时钟中断处理程序会唤起TIMER_SOFTIRQ软中断,运行当前处理器上到期的所有定时器。 定时器数据结构与函数 Linux设备驱动编程中,可利用Lin
阅读全文
摘要:基本概念 PinCtrl:Pin Controller,是一个虚拟概念,用于设置IOMUX,让某个引脚连接到指定模块,从而实现某个功能。不同于GPIO子系统,可用于GPIO功能、I2C功能等。 GPIO子系统:配置引脚输入、输出功能,设置方向等GPIO模块内功能。 不过,大多数的芯片并没有单独的IO
阅读全文
摘要:工厂模式解决什么问题? 在C++中,通常,我们用构造函数创建对象。但这种方式存在几个限制: 没有返回值。构造函数不能返回结构,如果发生错误,调用者无法通过返回NULL指针得知。(不过可以在构造函数内抛出异常) 命名限制。C++要求构造函数名与所在类的名字相同,也就是说,如果我们调用了A类构造函数,那
阅读全文
摘要:Linux驱动的软件架构 基本思想:将驱动与设备分离,具体来说,驱动只管驱动,设备只管设备,总线负责匹配设备和驱动,而驱动以标准途径拿到板级信息。 设备指与项目有关的板级信息,项目用到的板级资源;驱动指对芯片、对硬件的操作。 Linux字符设备驱动需要编写file_operations成员函数,并负
阅读全文
摘要:在虚拟设备驱动中,分配一片大小为GLOBALMEM_SIZE(4KB)的内存空间,用于实现自定义的虚拟字符设备globalmem实例。 globalmem 没有任何实用价值,仅用于讲解问题。 globalmem设备驱动 头文件、宏、设备结构体 定义globalmem设备结构 #include <li
阅读全文
摘要:观察者模式 观察者模式解决什么问题? 经常看到一些对象调用其他对象的方法:因为实现复杂的任务通常需要几个对象一起合作完成,为了该目标,对象A为了调用对象B的方法,就必须知道对象B的存在及其接口。 最简单的办法是让A.cpp包含(include)B.h,然后直接调用B class方法。但这样做,做A中
阅读全文