摘要: 1 DMA简介 DMA是Direct Memory Access的缩写,顾名思义,就是绕开CPU直接访问memory的意思。在计算机中,相比CPU,memory和外设的速度是非常慢的,因而在memory和memory(或者memory和设备)之间搬运数据,非常浪费CPU的时间,造成CPU无法及时处理 阅读全文
posted @ 2020-12-13 18:02 johnliuxin 阅读(3562) 评论(1) 推荐(0)
摘要: 5 内存调试 很多系统的稳定性问题与内存相关, 特别是内存的越界访问, 本节介绍几种kernel原生的内存调试技术 5.1 Page_Owner 5.1.1 原理介绍 page_owner的目的是存储页面分配时的调用栈信息, 这样我们就能知道每个一个页面是由谁分配的. 要实现这个目的, 得回答3个问 阅读全文
posted @ 2020-12-13 18:01 johnliuxin 阅读(2541) 评论(0) 推荐(0)
摘要: 4 FAQs 4.1 Flags: 与内存管理系统相关的各种flags汇总如下:  每个物理page有自己的flags, 定义在struct page -> unsigned long flags; 详情见2.2.2节的《page》  每个内存块(多个page组成一个内存块)有自己的pagebl 阅读全文
posted @ 2020-12-13 18:00 johnliuxin 阅读(327) 评论(0) 推荐(0)
摘要: 3 虚拟内存管理 虚拟内存管理主要涉及3个方面: 虚拟空间分配; 物理页帧分配; 建立页表, 把两者关联起来. 这3者不一定要同时运作, 例如:  可以只分配虚拟地址, 暂不分配物理页帧和建立页表. 只有当CPU访问虚拟地址, 发现它没有关联到物理页帧时, 才会通过缺页处理(page fault 阅读全文
posted @ 2020-12-13 17:59 johnliuxin 阅读(644) 评论(0) 推荐(0)
摘要: 2 物理内存管理 2.1 概述 整个内存管理系统可以分为2部分来看待: 第一部分是对物理内存的管理, 第二部分是对虚拟内存的管理. 物理内存管理的对象是板载的物理内存(DDRAM), 它把物理内存按页划分, 并把这些页放到一个池子里面. 物理内存管理的目的就是提供API给到内存消费者, 消费者在需要 阅读全文
posted @ 2020-12-13 17:58 johnliuxin 阅读(1080) 评论(0) 推荐(0)
摘要: 1 概念介绍 1.1 地址&地址空间 假设我们有一块板子, CPU是ARM的32位处理器, 板载的DDRAM位2GB. 以此为背景, 我们来讨论一些基础概念. 1.1.1 物理地址&物理寻址&物理地址空间 物理地址 在上述背景中, DDRAM可以理解为由M(2*1024*1024*1024)个连续的 阅读全文
posted @ 2020-12-13 17:57 johnliuxin 阅读(488) 评论(0) 推荐(0)
摘要: 1. 文档结构介绍 首先对Device Tree的背景进行介绍, 描述为何要使用device-tree, 它有什么作用. 然后介绍Device Tree的语法格式, 让你能看懂一个device tree source file, 并修改这个file. 然后介绍如何把人能读懂的device tree 阅读全文
posted @ 2020-12-13 17:56 johnliuxin 阅读(488) 评论(0) 推荐(0)
摘要: 1. 文档结构介绍 首先, 第2章会给出整个设备模型的整体框架. 然后, 第3章介绍sysfs, 了解它有助于我们理解设备模型到底在做什么. 接着, 第4, 5, 6章描述设备模型的基础概念, 驱动开发中基本上不会看到这些基础, 不过我们必须先理解它们, 才能更好的理解后续内容. 然后, 第7章简单 阅读全文
posted @ 2020-12-13 17:55 johnliuxin 阅读(957) 评论(0) 推荐(0)
摘要: 1 文档结构介绍 本文先会介绍打印式调试技术, 也就是用类似printf的方式打印信息, 然后查看信息, 在调试驱动的过程中, 我们经常会用到这种方式. 然后会介绍查询式调试方式, 这种方式一般是在用户空间来查询内核信息. 最后会介绍调系统故障的几种方式: gdb如何使用, oops错误如何调试等. 阅读全文
posted @ 2020-12-13 17:51 johnliuxin 阅读(888) 评论(0) 推荐(0)
摘要: 1. 文档结构介绍 并发(Concurrency)是Linux内核中经常会发生的事情. 并发会引起竞态(Race)和阻塞(Block)的问题. 首先, 我们看一个并发引起竞态示例, 对并发有个大致印象, 看看竞态会引起那些问题. 然后, 我们会详解介绍并发, 竞态, 阻塞与休眠的概念. 接着, 我们 阅读全文
posted @ 2020-12-13 17:48 johnliuxin 阅读(608) 评论(0) 推荐(0)
摘要: 1. 文档结构介绍 首先会在第2章对内核模块做一个宏观上的介绍, 并给出一个demo, 让我们可以快速上手体验一下如何编译使用内核模块. 接下来会在第3章对内核模块的细节做更多详细的分析, 以便我们能深入理解内核模块, 并编写出专业的内核模块. 这一章需要反复阅读理解. 可能过段时间或者遇到具体项目 阅读全文
posted @ 2020-12-13 17:47 johnliuxin 阅读(586) 评论(0) 推荐(0)
摘要: 1 中断处理流程 2 RefLink link comment 综述 从硬件的角度, 描述了中断控制器的架构, 以及多个中断控制器级联的情况 IRQ Domain介绍 描述了如何建立一个map, 以便把HW interrupt ID转换为IRQ Number, 这个过程与dts中的interrupt 阅读全文
posted @ 2020-12-13 17:45 johnliuxin 阅读(175) 评论(0) 推荐(0)
摘要: 1 V4L2架构简述 V4L2是Linux社区定义的Linux内核的多媒体框架, 本质上来说它就是一个字符设备, 然后社区定义了一系列标准的ioctl来与内核交互. 1.1 框图 首先注意框图的实线部分, 对应的是只需要驱动片上外设的情景, 例如mtk的vdec, 或者atmel的lcd overl 阅读全文
posted @ 2020-12-13 17:38 johnliuxin 阅读(2978) 评论(3) 推荐(0)
摘要: 1. 概念介绍:终端 在Linux系统中, 与终端相关的概念很容易让人迷糊. 首先有终端这个概念, 然后还有各种类型的终端(串口终端, 伪终端, 控制台终端, 控制终端), 还有一个概念叫console. 那么什么是终端? 什么是控制台终端? 什么是console? 为了理清这些疑问, 我们来依次介 阅读全文
posted @ 2020-12-13 17:37 johnliuxin 阅读(2319) 评论(0) 推荐(0)
摘要: 1. 架构介绍 Clock统是Linux内核中专门管理时钟的子系统. 时钟在嵌入式系统中很重要, 它就像人的脉搏一样, 驱动器件工作. 任何一个CPU, 都需要给它提供一个外部晶振, 这个晶振就是用来提供时钟的; 任何一个CPU内部的片上外设, 也需要工作时钟: 例如GPIO控制器, 首先得给它提供 阅读全文
posted @ 2020-12-13 17:36 johnliuxin 阅读(2050) 评论(0) 推荐(0)
摘要: 1 ALSA 1.1 架构简述 ALSA是Advanced Linux Sound Architecture 的缩写, 官网 : http://www.alsa-project.org. 在内核设备驱动层, ALSA提供了alsa-driver. 同时在应用层, ALSA为我们提供了alsa-lib 阅读全文
posted @ 2020-12-13 17:34 johnliuxin 阅读(902) 评论(0) 推荐(0)
摘要: 1. 文档结构介绍 首先简介uboot, 给出uboot的官网. 然后介绍uboot的编译系统, 让你能了解到SPL和u-boot.bin是如何编译出来的, 哪些C代码会被编译进SPL和u-boot.bin. 接着会介绍uboot的启动流程, 从第一行汇编代码开始, 梳理一遍代码的运行流程. 最后一 阅读全文
posted @ 2020-12-13 17:29 johnliuxin 阅读(5569) 评论(21) 推荐(2)
摘要: 1 概述 Android的input系统获取用户输入, 分发给特定的接收者(Framework或应用程序)进行处理, 这个流程涉及到以下一些模块:  InputReader.cpp : 负责从硬件获取输入, 转换成事件(Event), 并分发给Input Dispatcher.  InputDi 阅读全文
posted @ 2020-12-13 17:26 johnliuxin 阅读(434) 评论(0) 推荐(0)
摘要: 1. 进程间通信的本质(2个进程) 用户空间的进程如果想相互通信, 必须经过内核, 因为不同进程的用户地址空间是独立的, 但是共享同一个内核空间. 内核为了支持进程间通信, 一般会有一个驱动, 以字符设备的形式存在(也可以是其它形式, 这个驱动的本质就是在不同的进程间传递数据). 两个进程间通信一般 阅读全文
posted @ 2020-12-13 17:23 johnliuxin 阅读(1286) 评论(0) 推荐(1)