Linux Kernel

Linux Driver 入门

孤街浪徒 提交于 2020-05-08 10:04:14
: Linux Driver Device Major and Minor Numbers he Internal Representation of Device Numbers Within the kernel, the dev_t type (defined in <linux/types.h>) is used to hold device numbers—both the major and minor parts. As of Version 2.6.0 of the kernel, dev_t is a 32-bit quantity with 12 bits set aside for the major number and 20 for the minor number. Your code should, of course, never make any assumptions about the internal organization of device numbers; it should, instead, make use of a set of macros found in <linux/kdev_t.h>. To obtain the major or minor parts of a dev_t, use:   MAJOR(dev_t

Linux 操作系统 — Kernel

霸气de小男生 提交于 2020-05-03 14:34:21
目录 文章目录 目录 趣解 Linux 内核 地基 第一层 跃层 趣解 Linux 内核 今天,我来为大家解读一幅来自 TurnOff.us 的漫画 “InSide The Linux Kernel” 。 TurnOff.us 是一个极客漫画网站,作者 Daniel Stori 画了一些非常有趣的关于编程语言、Web、云计算、Linux 相关的漫画。今天解读的便是其中的一篇。 地基 地基(底层)由一排排的文件柜组成,井然有序,文件柜里放置着 “文件” —— 电脑中的文件。左上角,有一只胸前挂着 421 号牌的小企鹅,它表示着 PID(Process ID) 为 421 的进程,它正在查看文件柜中的文件,这代表系统中正有一个进程在访问文件系统。在右下角有一只小狗,它是看门狗(Watchdog) ,这代表对文件系统的监控。 第一层 在这一层,最引人瞩目的莫过于中间的一块垫子,众多小企鹅在围着着桌子坐着。这个垫子的区域代表进程表。 左上角有一个小企鹅,站着,仿佛在说些什么这显然是一位家长式的人物,不过看起来周围坐的那些小企鹅不是很听话 —— 你看有好多走神、自顾自聊天的 —— “喂喂,说你呢,哇塞娃(171),转过身来”。它代表着 Linux 内核中的初始化(init)进程,也就是我们常说的 PID 为 1 的进程。桌子上坐的小企鹅都在等待状态(Wait)中,等待工作任务。 瞧瞧,垫子

计算机网络基础 — Linux 流量控制

随声附和 提交于 2020-05-02 14:13:48
目录 文章目录 目录 前文列表 流量控制与队列 流量控制的基本概念 数据流 数据包调度 数据包分类 数据包策略 令牌桶 Linux 的流量控制组件 调度器(Scheduler) 过滤器(Filter) 分类器(Classifier) 决策器(Policer) 句柄 TC - Linux 流量控制工具 TC 的基本原理 TC 的组件 Qdisc 无类别队列规定(Classless Qdiscs) 分类队列规定(Classful Qdiscs) Class Filter 使用 TC 进行流量控制 创建队列 创建分类 设置过滤器 上行带宽限制 下行带宽限制 对 SrcIP 进行限速 前文列表 《 计算机网络基础 — 以太网 》 《 计算机网络基础 — 物理网络 》 《 计算机网络基础 — TCP/IP 网络模型 》 《 计算机网络基础 — Linux 内核网络协议栈 》 《 计算机网络基础 — 虚拟网络 》 《 计算机网络基础 — Linux 虚拟交换机 》 《 计算机网络基础 — Linux 路由器 》 《 计算机网络基础 — Linux 虚拟路由器 》 流量控制与队列 队列就是一种用于组织未能立即开始的任务或数据流的方法,本质上,队列是一种调度的实现。网络链路通常要求数据包以一定的顺序发送,因此可以在网络设备(e.g. 主机、交换机、路由器等)的出口处使用队列来管理数据包。

理解 Linux 网络栈(1):Linux 网络协议栈简单总结

为君一笑 提交于 2020-05-02 08:32:28
引自:https://www.cnblogs.com/sammyliu/p/5225623.html 本系列文章总结 Linux 网络栈,包括: (1) Linux 网络协议栈总结 (2) 非虚拟化Linux环境中的网络分段卸载技术 GSO/TSO/UFO/LRO/GRO (3) QEMU/KVM + VxLAN 环境下的 Segmentation Offloading 技术(发送端) (4)QEMU/KVM + VxLAN 环境下的 Segmentation Offloading 技术(接收端) 1. Linux 网络路径 1.1 发送端 1.1.1 应用层 (1) Socket 应用层的各种网络应用程序基本上都是通过 Linux Socket 编程接口来和内核空间的网络协议栈通信的。Linux Socket 是从 BSD Socket 发展而来的,它是 Linux 操作系统的重要组成部分之一,它是网络应用程序的基础。从层次上来说,它位于应用层,是操作系统为应用程序员提供的 API,通过它,应用程序可以访问传输层协议。 socket 位于传输层协议之上,屏蔽了不同网络协议之间的差异 socket 是网络编程的入口,它提供了大量的系统调用,构成了网络程序的主体 在Linux系统中,socket 属于文件系统的一部分,网络通信可以被看作是对文件的读取

Android A/B System OTA分析(一)概览【转】

无人久伴 提交于 2020-04-25 22:35:29
本文转载自: https://blog.csdn.net/guyongqiangx/article/details/71334889 Android从7.0开始引入新的OTA升级方式,A/B System Updates,这里将其叫做A/B系统。 版权声明: 本文为guyongqiangx原创,欢迎转载,请注明出处: Android A/B System OTA分析(一)概览: http://blog.csdn.net/guyongqiangx/article/details/71334889 A/B系统涉及的内容较多,分多篇对A/B系统的各个方面进行分析。本文为第一篇,概览。 1. A/B系统的特点 顾名思义,A/B系统就是设备上有A和B两套可以工作的系统(用户数据只有一份,为两套系统共用),简单来讲,可以理解为一套系统分区,另外一套为备份分区。其系统版本可能一样;也可能不一样,其中一个是新版本,另外一个旧版本,通过升级,将旧版本也更新为新版本。当然,设备出厂时这两套系统肯定是一样的。 之所以叫套,而不是个,是因为Android系统不是由一个分区组成,其系统包括boot分区的kernel和ramdisk,system和vendor分区的应用程序和库文件,以及userdata分区的数据 A/B系统实现了无缝升级(seamless updates),有以下特点:

深度:一文看懂Linux内核!Linux内核架构和工作原理详解(转)

非 Y 不嫁゛ 提交于 2020-04-25 05:36:32
原文链接 http://www.openpcba.com/web/contents/get?id=4638&tid=15 简介 作用是将应用层序的请求传递给硬件,并充当底层驱动程序,对系统中的各种设备和组件进行寻址。目前支持模块的动态装卸(裁剪)。Linux内核就是基于这个策略实现的。Linux进程1.采用层次结构,每个进程都依赖于一个父进程。内核启动init程序作为第一个进程。该进程负责进一步的系统初始化操作。init进程是进程树的根,所有的进程都直接或者间接起源于该进程。virt/ ---- 提供虚拟机技术的支持。 全文导读 Linux内核预备工作 Linux内核体系结构简析简析 Linux体系结构和内核结构区别 Linux驱动的platform机制 Linux内核体系结构 内核模块 Linux 内核学习经验总结 结尾 Linux内核预备工作 理解Linux内核最好预备的知识点: 懂C语言 懂一点操作系统的知识 熟悉少量相关算法 懂计算机体系结构 Linux内核的特点: 结合了unix操作系统的一些基础概念 Linux内核的任务: 1.从技术层面讲,内核是硬件与软件之间的一个中间层。作用是将应用层序的请求传递给硬件,并充当底层驱动程序,对系统中的各种设备和组件进行寻址。 2.从应用程序的层面讲,应用程序与硬件没有联系,只与内核有联系,内核是应用程序知道的层次中的最底层

从一个CFS调度案例谈Linux系统卡顿的根源

最后都变了- 提交于 2020-04-24 09:49:44
Linux系统是一个让人感觉卡顿的系统,先别怼,让我说完: 卡顿的原因在于Linux内核的调度器从来不关注业务场景! Linux内核只能看到机器而不愿意看到应用。它倾向于自下而上从CPU角度提高吞吐,而不是自上而下从业务角度提高用户体验。 拟人来看,Linux是一个好程序员,但不是一个好经理。 万事必有因缘,Linux就是一个程序员发起一帮程序员折腾起来的,几乎没有穿西装的经理之类的人参与。 程序员天天挂在嘴边的就是性能,时间复杂度,cache利用率,CPU,内存,反之,经理每天吆喝的就是客户,客户,客户,体验,体验,体验! 前天晚上下班回到住处已经很晚,姓刘的副经理请教了我一个问题,说是他在调试一个消息队列组件,涉及到生产者,消费者等多个相互配合的线程,非常复杂,部署上线后,发现一个奇怪的问题: 整个系统资源似乎被该组件的线程独占,该消息队列组件的效率非常高,但其系统非常卡顿! 我问他有没有部署cgroup,cpuset之类的配置,他说没有。 我又问他该消息队列组件一共有多少线程,他说不多,不超过20个。 我又问…他说… … 我感到很奇怪,我告诉刘副经理说让我登录机器调试下试试看,他并没有同意,只是能尽可能多的告诉我细节,我来远程协助。 … 我并不懂消息队列,我也不懂任何的中间件,调试任何一个此类系统对我而言是无能为力的,我也感到遗憾

【原创】Linux Suspend流程分析

天大地大妈咪最大 提交于 2020-04-24 06:08:17
背景 Read the fucking source code! --By 鲁迅 A picture is worth a thousand words. --By 高尔基 说明: Kernel版本:4.14 ARM64处理器 使用工具:Source Insight 3.5, Visio 1. 介绍 Linux Kernel支持四种 Sleep State : Suspend-to-Idle 纯软件,轻量级的Suspend操作,它会 freeze user space , suspend the timekeeping , put all I/O devices into low-power states 。 处于S2Idle状态下时,设备中断就可以将其唤醒。 Standby 除了实现 Suspend-to-Idle 时的操作外,还会将 nonboot CPUs 置于 offline 状态,以及 suspend all low-level system functions 。由于系统核心逻辑单元保持上电状态,操作的状态不会丢失,也会很容易恢复到之前的状态。 处于 Standby 状态时,可能需要依赖平台来设置唤醒源。 Suspend-to-RAM STR/S2RAM 时,除了 Memory 需要进行自刷新来保持数据外,其他的所有设备都需要进入到低功耗状态。除了实现 Standby

Device Tree(三):代码分析

北城以北 提交于 2020-04-24 03:59:41
一、前言 Device Tree总共有三篇,分别是: 1、为何要引入Device Tree,这个机制是用来解决什么问题的?(请参考 引入Device Tree的原因 ) 2、Device Tree的基础概念(请参考 DT基础概念 ) 3、ARM linux中和Device Tree相关的代码分析(这是本文的主题) 本文主要内容是:以Device Tree相关的数据流分析为索引,对ARM linux kernel的代码进行解析。主要的数据流包括: 1、初始化流程。也就是扫描dtb并将其转换成Device Tree Structure。 2、传递运行时参数传递以及platform的识别流程分析 3、如何将Device Tree Structure并入linux kernel的设备驱动模型。 注:本文中的linux kernel使用的是3.14版本。 二、如何通过Device Tree完成运行时参数传递以及platform的识别功能? 1、汇编部分的代码分析 linux/arch/arm/kernel/head.S文件定义了bootloader和kernel的参数传递要求: MMU = off, D-cache = off, I-cache = dont care, r0 = 0, r1 = machine nr, r2 = atags or dtb pointer.

GIC , SPI , PPI (窝窝科技的文章题目改了下)【转】

╄→гoц情女王★ 提交于 2020-04-24 03:45:36
转自: https://www.cnblogs.com/tureno/articles/6403408.html 转载于: http://www.wowotech.net/irq_subsystem/gic-irq-chip-driver.html GIC驱动代码分析(废弃) 这份文档状态是:废弃,新的文档请访问 http://www.wowotech.net/linux_kenrel/gic_driver.html 一、前言 GIC(Generic Interrupt Controller)是ARM公司提供的一个通用的中断控制器。GIC通过AMBA(Advanced Microcontroller Bus Architecture)这样的片上总线连接到一个或者多个ARM processor上。本文主要分析了linux kernel中GIC中断控制器的驱动代码。 具体的分析方法是按照source code为索引,逐段分析。对于每一段分析的代码,力求做到每个细节都清清楚楚。这不可避免要引入很多对GIC的硬件描述,此外,具体GIC中断控制器的驱动代码和linux kernel中断子系统的交互也会描述,但本文不会描述linux kernel的generic interrupt subsystem。 本文以OMAP4460这款SOC为例,OMAP4460内部集成了GIC的功能