随笔分类 -  Linux内核架构

用于记录Linux内核架构的学习笔记。
摘要:1、基本概念 在Linux系统中,中断服务程序的执行是与一般的进程异步的,也就是不存在于进程上下文,要求中断服务程序的执行时间尽可能短,因此,Linux系统在中断处理中引入了顶半部和低半部的分离机制。 2、Linux中断及中断处理架构 设备中断的到来会打断Linux内核中进程的正常调度和运行,对于系 阅读全文
posted @ 2021-02-24 21:51 liangliangge 阅读(970) 评论(0) 推荐(0) 编辑
摘要:用户空间与内核空间示意图如下: 整个Linux内部结构可以分成三部分,从最底层到最上层依次是:硬件、内核空间、用户空间,如下图所示: 需要注意的细节问题: 进程的内核空间存放的是内核代码和数据,用户空间中存放的是用户代码和数据,不管是内核空间还是用户空间,它们都处于虚拟空间中; Linux使用两级保 阅读全文
posted @ 2021-02-22 22:31 liangliangge 阅读(438) 评论(0) 推荐(0) 编辑
摘要:1、Linux Input子系统概述 Linux系统的Input子系统处理输入事务,输入设备的驱动程序通过Input输入子系统提供的接口注册到内核,利用子系统提供的功能与用户空间或系统中的其它程序进行交互。整个Input子系统的实现可以看作三层,如下: 输入驱动层(input driver):针对各 阅读全文
posted @ 2021-02-17 01:01 liangliangge 阅读(655) 评论(0) 推荐(0) 编辑
摘要:1、Linux Framebuffer概述 Framebuffer驱动在Linux内核中用于子系统最重要的显示输出,以该驱动为基础,Linux设备才能向用户展现一个色彩斑斓的世界,对于PC而言,就是显卡驱动,对于嵌入式设备,就是显示控制器和LCD模组驱动。 Framebuffer设备是一个字符设备, 阅读全文
posted @ 2021-02-15 15:23 liangliangge 阅读(1001) 评论(0) 推荐(0) 编辑
摘要:1、前言 Linux系统中的文件系统由两层结构进行构建:第一层为虚拟文件系统(VFS),第二层则是各种不同的具体的文件系统。VFS则是将各种具体的文件系统的公共部分抽取出来,从而形成一个抽象层,是Linux系统内核的一部分,它位于用户程序和具体的文件系统之间,对用户提供了标准的文件系统调用接口,对于 阅读全文
posted @ 2019-12-28 21:54 liangliangge 阅读(3653) 评论(0) 推荐(0) 编辑
摘要:1、前言 原子操作指的是该操作不会在执行完毕之前被任何其它任务或事件打断,它是最小的执行单位,不会有比它更小的执行单位,原子实际上使用了物理学中物质微粒的概念,在Linux内核中,原子操作需要硬件的支持,和架构相关,使用汇编语言去实现,它在Linux内核中主要应用于资源的引用计数 2、原子操作 3、 阅读全文
posted @ 2019-11-21 21:43 liangliangge 阅读(358) 评论(0) 推荐(0) 编辑
摘要:1、前言 众所周知,Linux系统是一个多任务的操作系统,当多个任务同时访问同一片内存区域的时候,这些任务可能会相互覆盖内存中数据,从而造成内存中的数据混乱,问题严重的话,还可能会导致系统崩溃。 2、相关概念 了解一下Linux内核中并发与竞态的相关概念,如下: 并发与竞争:并发指的是多个执行单元同 阅读全文
posted @ 2019-11-20 20:10 liangliangge 阅读(621) 评论(0) 推荐(0) 编辑
摘要:1、前言 在嵌入式Linux开发中,对嵌入式SoC中的GPIO进行控制非常重要,Linux内核中提供了GPIO子系统,驱动开发者在驱动代码中使用GPIO子系统提供的API函数,便可以达到对GPIO控制的效果,例如将IO口的方向设置为输入或输出,当IO口的方向为输入时,可以通过调用API函数获取相应的 阅读全文
posted @ 2019-11-19 19:20 liangliangge 阅读(4921) 评论(0) 推荐(2) 编辑
摘要:1、前言 Linux内核中的定时器是一个很常用的功能,某些需要周期性处理的工作都需要用到定时器。在Linux内核中,使用定时器功能比较简单,需要提供定时器的超时时间和超时后需要执行的处理函数。 2、常用API接口 在Linux内核中使用全局变量jiffies来记录系统从启动以来的系统节拍数,当系统内 阅读全文
posted @ 2019-11-14 21:17 liangliangge 阅读(3442) 评论(0) 推荐(0) 编辑
摘要:1、前言在嵌入式系统中,许多SoC的内部都包含了pin控制器,通过芯片内部的pin控制器,我们可以配置一个或者一组引脚的状态和功能特性,Linux内核为了统一各SoC厂商的引脚管理,提供了pinctrl子系统。 2、引脚功能分类嵌入式芯片手册往往有一个GPIO控制的章节来描述SoC的引脚如何进行配置 阅读全文
posted @ 2019-11-04 20:41 liangliangge 阅读(2964) 评论(0) 推荐(0) 编辑
摘要:1、前言 Linux内核中的设备驱动模型,是建立在sysfs设备文件系统和kobject上的,由总线(bus)、设备(device)、驱动(driver)和类(class)所组成的关系结构,在底层,Linux系统中的每个设备都有一个device结构体的实例,本文将对Linux内核的device结构体 阅读全文
posted @ 2019-09-11 16:52 liangliangge 阅读(7573) 评论(0) 推荐(2) 编辑
摘要:1、前言 在Linux内核的源码中,除了简洁的list链表外,内核还有klist链表,它是list链表的线程安全版本,在结构体中提供了整个链表的自旋锁,对链表节点查找、插入和删除等操作,都需要先获得这个自旋锁,klist的链表节点数据结构klist_node引入了引用计数器,只有当节点的的引用计数为 阅读全文
posted @ 2019-09-09 18:28 liangliangge 阅读(1900) 评论(0) 推荐(1) 编辑
摘要:1、前言 对于任何一个指针来说,必然有三种情况:一种是有效指针,一种是NULL,也就是空指针,一种是错误指针,也就是无效指针,在Linux内核中,所谓的错误指针就是指其已经到达了内核空间的最后一个page,例如,对于32bit的系统来说,内核空间最后地址为0xFFFF FFFF,那么最后一个page 阅读全文
posted @ 2019-09-04 11:52 liangliangge 阅读(2842) 评论(0) 推荐(0) 编辑
摘要:1、前言 Linux内核中有大量的驱动,而这些驱动往往具有类似的结构,根据面向对象的思想,可以将共同的部分提取为父类,而这个父类就是kobject,kobject结构体中包含了大量设备的必须信息,而三大类设备驱动都需要包含这个kobject结构,运用面向对象的思想来看问题,也就是继承来自kobjec 阅读全文
posted @ 2019-08-26 18:37 liangliangge 阅读(2134) 评论(0) 推荐(0) 编辑
摘要:sysfs - _The_ filesystem for exporting kernel objects. sysfs – 用于导出内核对象(kobject)的文件系统 Patrick Mochel <mochel@osdl.org> Mike Murphy <mamurph@cs.clemson 阅读全文
posted @ 2019-08-23 14:16 liangliangge 编辑
摘要:Everything you never wanted to know about kobjects, ksets, and ktypes 关于kobject,kset和ktypes的一切,你永远不会想知道 :Author: Greg Kroah-Hartman <gregkh@linuxfound 阅读全文
posted @ 2019-08-22 20:30 liangliangge 编辑
摘要:1、前言 struct kref结构体是一个引用计数器,它被嵌套进其它的结构体中,记录所嵌套结构的引用计数。引用计数用于检测内核中有多少地方使用了某个对象,每当内核的一个部分需要某个对象所包含的信息时,则该对象的引用计数加1,如果不需要相应的信息,则对该对象的引用计数减1,当引用计数为0时,内核知道 阅读全文
posted @ 2019-08-21 17:11 liangliangge 阅读(3581) 评论(0) 推荐(1) 编辑
摘要:一、双向链表list_head Linux内核驱动开发会经常用到Linux内核中经典的双向链表list_head,以及它的拓展接口和宏定义:list_add、list_add_tail、list_del、list_entry、list_for_each等。 在内核源码中,list_head结构体的定 阅读全文
posted @ 2019-08-15 17:10 liangliangge 阅读(5171) 评论(1) 推荐(0) 编辑

点击右上角即可分享
微信分享提示