2018年2月13日

中断唤醒系统流程

摘要: 1. 前言 曾几何时,不知道你是否想过外部中断是如何产生的呢?又是如何唤醒系统的呢?在项目中,一般具有中断唤醒的设备会有一个interrupt pin硬件连接到SoC的gpio pin。一般来说,当设备需要唤醒系统的时候,会通过改变interrupt pin电平状态,而SoC会检测到这个变化,将So 阅读全文

posted @ 2018-02-13 22:51 AlanTu 阅读(4489) 评论(0) 推荐(0) 编辑

逆向映射的演进

摘要: 一、前言 数学大师陈省身有一句话是这样说的:了解历史的变化是了解这门学科的一个步骤。今天,我把这句话应用到一个具体的Linux模块:了解逆向映射的最好的方法是了解它的历史。本文介绍了Linux内核中的逆向映射机制如何从无到有,如何从笨重到轻盈的历史过程,通过这些历史的演进过程,希望能对逆向映射有更加 阅读全文

posted @ 2018-02-13 22:50 AlanTu 阅读(1035) 评论(0) 推荐(0) 编辑

Linux内存管理基本概念

摘要: 1. 前言 内存(memory)在Linux系统中是一种牵涉面极广的资源,上至应用程序、下至kernel和driver,无不为之魂牵梦绕。加上它天然的稀缺性,导致内存管理(Memory Management,简称MM)是linux kernel中非常重要又非常复杂的一个子系统。 重要性就不多说了,K 阅读全文

posted @ 2018-02-13 22:49 AlanTu 阅读(991) 评论(0) 推荐(1) 编辑

/proc/meminfo分析(一)

摘要: 本文主要分析/proc/meminfo文件的各种输出信息的具体含义。 一、MemTotal MemTotal对应当前系统中可以使用的物理内存。 这个域实际是对应内核中的totalram_pages这个全局变量的,定义如下: unsigned long totalram_pages __read_mo 阅读全文

posted @ 2018-02-13 22:45 AlanTu 阅读(4692) 评论(0) 推荐(1) 编辑

Linux页面回收概述

摘要: 本文主要介绍了一些page reclaim机制中的基本概念。这份文档其实也可以看成阅读ULK第17章第一小节的一个读书笔记。虽然ULK已经读了很多遍,不过每一遍还是觉得有收获。Linux内核虽然不断在演进,但是页面回收的基本概念是不变的,所以ULK仍然值得内核发烧友仔细品味。 一、什么是page f 阅读全文

posted @ 2018-02-13 22:45 AlanTu 阅读(1167) 评论(0) 推荐(0) 编辑

Dynamic DMA mapping Guide

摘要: 一、前言 这是一篇指导驱动工程师如何使用DMA API的文档,为了方便理解,文档中给出了伪代码的例程。另外一篇文档dma-api.txt给出了相关API的简明描述,有兴趣也可以看看那一篇,这两份文档在DMA API的描述方面是一致的。 二、从CPU角度看到的地址和从DMA控制器看到的地址有什么不同? 阅读全文

posted @ 2018-02-13 22:44 AlanTu 阅读(4578) 评论(0) 推荐(0) 编辑

Linux时钟

摘要: 一、前言 时钟或者钟表(clock)是一种计时工具,每个人都至少有一块,可能在你的手机里,也可能佩戴在你的手腕上。如果Linux也是一个普通人的话,那么她的手腕上应该有十几块手表,包括:CLOCK_REALTIME、CLOCK_MONOTONIC、CLOCK_PROCESS_CPUTIME_ID、C 阅读全文

posted @ 2018-02-13 22:43 AlanTu 阅读(2727) 评论(0) 推荐(0) 编辑

Linux系统休眠和设备中断处理

摘要: 一、设备IRQ的suspend和resume 本小节主要解决这样一个问题:在系统休眠过程中,如何suspend设备中断(IRQ)?在从休眠中唤醒的过程中,如何resume设备IRQ? 一般而言,在系统suspend过程的后期,各个设备的IRQ (interrupt request line)会被di 阅读全文

posted @ 2018-02-13 22:42 AlanTu 阅读(1826) 评论(0) 推荐(0) 编辑

Linux调度器 - 进程优先级

摘要: 一、前言 本文主要描述的是进程优先级这个概念。从用户空间来看,进程优先级就是nice value和scheduling priority,对应到内核,有静态优先级、realtime优先级、归一化优先级和动态优先级等概念,我们希望能在第二章将这些相关的概念描述清楚。为了加深理解,在第三章我们给出了几个 阅读全文

posted @ 2018-02-13 22:40 AlanTu 阅读(3941) 评论(0) 推荐(0) 编辑

Linux调度器 - 用户空间接口

摘要: 一、前言 Linux调度器神秘而充满诱惑,每个Linux工程师都想深入其内部一探究竟。不过中国有一句古话叫做“相由心生”,一个模块精巧的内部逻辑(也就是所谓的“心”)其外延就是简洁而优雅的接口(我称之为“相”)。通过外部接口的定义,其实我们也可以收获百分之六七十的该模块的内部信息。因此,本文主要描述 阅读全文

posted @ 2018-02-13 22:39 AlanTu 阅读(953) 评论(0) 推荐(0) 编辑

Linux标识进程

摘要: 一、前言 其实两年前,本站已经有了一篇关于进程标识的文档,不过非常的简陋,而且代码是来自2.6内核。随着linux container、pid namespace等概念的引入,进程标识方面已经有了天翻地覆的变化,因此我们需要对这部分的内容进行重新整理。 本文主要分成四个部分来描述进程标识这个主题:在 阅读全文

posted @ 2018-02-13 22:38 AlanTu 阅读(1925) 评论(0) 推荐(0) 编辑

Linux内存初始化(四) 创建系统内存地址映射

摘要: 一、前言 经过内存初始化代码分析(一)和内存初始化代码分析(二)的过渡,我们终于来到了内存初始化的核心部分:paging_init。当然本文不能全部解析完该函数(那需要的篇幅太长了),我们只关注创建系统内存地址映射这部分代码实现,也就是解析paging_init中的map_mem函数。 同样的,我们 阅读全文

posted @ 2018-02-13 22:34 AlanTu 阅读(1740) 评论(0) 推荐(0) 编辑

Linux内存初始化(三) 内存布局

摘要: 一、前言 同样的,本文是内存初始化文章的一份补充文档,希望能够通过这样的一份文档,细致的展示在初始化阶段,Linux 4.4.6内核如何从device tree中提取信息,完成内存布局的任务。具体的cpu体系结构选择的是ARM64。 二、memory type region的构建 memory ty 阅读全文

posted @ 2018-02-13 22:31 AlanTu 阅读(3550) 评论(0) 推荐(0) 编辑

Linux内存初始化(二)identity mapping和kernel image mapping

摘要: 一、前言 本文没有什么框架性的东西,就是按照__create_page_tables代码的执行路径走读一遍,记录在初始化阶段,内核是如何创建内核运行需要的页表过程。想要了解一些概述性的、框架性的东西可以参考内存初始化文档。 本文的代码来自ARM64,内核版本是4.4.6,此外,阅读本文最好熟悉ARM 阅读全文

posted @ 2018-02-13 22:30 AlanTu 阅读(2514) 评论(0) 推荐(0) 编辑

Linux内存初始化(一)

摘要: 一、前言 一直以来,我都非常着迷于两种电影拍摄手法:一种是慢镜头,将每一个细节全方位的展现给观众。另外一种就是快镜头,多半是反应一个时代的变迁,从非常长的时间段中,截取几个典型的snapshot,合成在十几秒的镜头中,可以让观众很快的了解一个事物的发展脉络。对应到技术层面,慢镜头有点类似情景分析,把 阅读全文

posted @ 2018-02-13 22:29 AlanTu 阅读(4999) 评论(3) 推荐(1) 编辑

Fix-Mapped Addresses

摘要: 一、前言 某天,wowo同学突然来了一句:如果要在start_kernel中点LED,ioremap在什么时间点才能调用呢?我想他应该是想通过点LED灯来调试start_kernel之后的初始化的代码(例如DTB解析部分的代码)。那天,我们两个花了二十分钟的时间,讨论相关的问题,我觉得很有意思,因此 阅读全文

posted @ 2018-02-13 22:27 AlanTu 阅读(1593) 评论(0) 推荐(0) 编辑

Linux内存模型

摘要: 一、前言 在linux内核中支持3中内存模型,分别是flat memory model,Discontiguous memory model和sparse memory model。所谓memory model,其实就是从cpu的角度看,其物理内存的分布情况,在linux kernel中,使用什么的 阅读全文

posted @ 2018-02-13 22:26 AlanTu 阅读(2272) 评论(0) 推荐(2) 编辑

文件缓存回写简述

摘要: 1 文件缓存回写的时机 (1)周期性回写,周期为dirty_writeback_interval,默认5s; (2)块设备首次出现脏数据; (3)脏页达到限额,包括dirty_bytes、dirty_background_bytes、dirty_ratio、dirty_background_rati 阅读全文

posted @ 2018-02-13 22:25 AlanTu 阅读(782) 评论(0) 推荐(0) 编辑

Linux内核配置解析 - Boot options

摘要: 1. 前言 本文将介绍ARM64架构下,Linux kernel和启动有关的配置项。 注1:本系列文章使用的Linux kernel版本是“X Project”所用的“Linux 4.6-rc5”,具体可参考“https://github.com/wowotechX/linux.git”。 2. K 阅读全文

posted @ 2018-02-13 22:24 AlanTu 阅读(3456) 评论(0) 推荐(0) 编辑

Linux内核配置解析 - 概述(基于ARM64架构)

摘要: 1. 前言 对刚接触Linux kernel的同学来说,遇到的第一个问题就是:我该从哪里入手?、 话说Linux kernel的打开方式是多种多样的:从简单的设备驱动入手;从源代码的目录结构入手;从kernel的启动过程入手;从大的功能模块入手;等等。不管怎样,每条都是正途(条条大路通罗马嘛)。 而 阅读全文

posted @ 2018-02-13 22:17 AlanTu 阅读(5392) 评论(0) 推荐(0) 编辑

导航