Linux内核转载
文章平均质量分 93
WythePlus
这个作者很懒,什么都没留下…
展开
-
内核中断,异常,抢占总结
内核中断,异常,抢占总结篇一、基本概念中断分为同步中断和异步中断。同步中断是由CPU控制单元产生的,“同步”是指只有在一条指令执行完毕后,CPU才会发出中断,而不是发生在代码指令执行期间,比如系统调用。而异步中断是由其他硬件设备依照CPU时钟信号产生的,即意味着中断能够在指令之间发生,例如键盘中断。按照Intel的微处理器手册,同步中断和异步中断也分别称为异常(或者软件中断转载 2016-03-25 16:46:33 · 518 阅读 · 0 评论 -
linux notification内核通知链
/******linux notification内核通知链***********/linux/notifier.h //内核中的一处来告知内核另一处某事件的发生,并执行注册的struct notifier_block { //notifier_call方法。 int (*notifier_call)(struct notifier_block *self,unsigned原创 2016-03-25 17:34:22 · 711 阅读 · 0 评论 -
Linux中断研究
ARM里的中断通常是指IRQ和FIQ,以IRQ来讲,ARM对IRQ的处理过程大概是这样: 外部设备遇到某一事件发出一个IRQ中断给中断控制器,中断控制器对这个IRQ进行硬件上的处理,把一些信息记在中断控制器的寄存器上,然后中断控制器通过IRQ中断线给ARM发一个信号。ARM收到信号,开始进行以下处理: (1)将当前状态的cpsr拷贝到IRQ状态的spsr中。 (2)将pc拷贝到I转载 2016-03-25 16:48:49 · 625 阅读 · 0 评论 -
LINUX时间管理
实时时钟系统定时器纳秒微妙毫 秒延迟必须是短延迟时间过长会报错长延迟时间管理在内核中占有非常重要的地位。相对于事件驱动,内核中有大量的函数都是基于时间驱动的。内核必须管理系统的运行时间以及当前的日期和时间。首先搞清楚RTC在kernel内的作用:linux系统有两个时钟:实时时钟和系统定时器实时时钟 一个是由纽扣电池供电的“Real Time Cl转载 2016-03-25 15:43:06 · 507 阅读 · 0 评论 -
linux驱动开发 主设备号与次设备号
一个字符设备或者块设备都有一个主设备号和次设备号。主设备号和次设备号统称为设备号。主设备号用来表示一个特定的驱动程序。次设备号用来表示使用该驱动程序的各设备。例如一个嵌入式系统,有两个LED指示灯,LED灯需要独立的打开或者关闭。那么,可以写一个LED灯的字符设备驱动程序,可以将其主设备号注册成5号设备,次设备号分别为1和2。这里,次设备号就分别表示两个LED灯。1.主设备号和转载 2016-03-25 14:58:36 · 987 阅读 · 0 评论 -
linux高端内存映射
1 内核空间和用户空间 用户空间:在Linux中,每个用户进程都可以访问4GB的线性虚拟内存空间。其中从0到3GB的虚存地址是用户空间,通过每个进程自己的页目录、页表,用户进程可以直接访问。内核空间:从3GB到4GB的虚存地址为内核态空间,存放供内核访问的代码和数据,用户态进程不能访问,只有内核态进程才能寻址。所有进程从3GB到4GB的虚拟空间都是一样的,linux以此方式让内核态转载 2016-03-25 16:31:55 · 777 阅读 · 0 评论 -
kernel thread与进程描述符
/***********kernel thread的创建*****************/#include //wake_up_process()#include //kthread_creat,kthread_run()#include //IS_ERR(),PTR_ERR()struct task_struct *kthread_create(i原创 2016-03-25 17:35:59 · 572 阅读 · 0 评论 -
linux tasklet和workqueue的应用情景
当前的2.6版内核中,有三种可能的选择:softirq、tasklet和work queue。 tasklet基于softirq实现,所以两者很相近。work queue与它们完全不同,它靠内核线程实现。1、softirq 软中断支持SMP,同一个softirq可以在不同的CPU上同时运行,softirq必须是可重入的。软中断是在编译期间静态分配的,它不像tasklet那样能被转载 2016-03-25 16:49:57 · 516 阅读 · 0 评论 -
Linux设备驱动之I2C架构分析
一:前言I2c是philips提出的外设总线.I2C只有两条线,一条串行数据线:SDA,一条是时钟线SCL.正因为这样,它方便了工程人员的布线.另外,I2C是一种多主机控制总线.它和USB总线不同,USB是基于master-slave机制,任何设备的通信必须由主机发起才可以.而I2C 是基于multi master机制.一同总线上可允许多个master.关于I2C协议的知识,这里不再赘述.可自转载 2016-03-25 15:04:06 · 571 阅读 · 0 评论 -
高端内存——永久映射区(permanet kernel mappings)
闲着无聊,把一些东西写下来给大家分享下吧,有什么不对的,欢迎质疑注:本文提及的物理地址空间可以理解为就是物理内存,但是在某些情况下,把他们理解为物理内存是不对的。本文讨论的环境是NON-PAE的i386平台,内核版本2.6.31-14一. 什么是高端内存linux中内核使用3G-4G的线性地址空间,也就是说总共只有1G的地址空间可以用来映射物理地址空间。但是,如果内存大于1G的转载 2016-03-28 15:37:43 · 1301 阅读 · 0 评论 -
高端内存
目录(?)[-]一 什么是高端内存二内核如何管理高端内存三 永久映射区permanet kernel mappings注:本文提及的物理地址空间可以理解为就是物理内存,但是在某些情况下,把他们理解为物理内存是不对的。本文讨论的环境是NON-PAE的i386平台,内核版本2.6.31-14一. 什么是高端内存linux中内核使用3G-4G的线性地址空间,也就是说总转载 2016-03-28 15:39:11 · 1455 阅读 · 0 评论 -
Linux SPI总线和设备驱动架构之一:系统概述
目录(?)[-]硬件结构工作时序软件架构SPI控制器驱动程序SPI通用接口封装层SPI协议驱动程序SPI通用设备驱动程序SPI是"Serial Peripheral Interface" 的缩写,是一种四线制的同步串行通信接口,用来连接微控制器、传感器、存储设备,SPI设备分为主设备和从设备两种,用于通信和控制的四根线分别是:转载 2016-03-28 16:37:53 · 470 阅读 · 0 评论 -
深入探索 Kdump,第 1 部分:带你走进 Kdump 的世界
目录(?)[-]Kdump 的基本概念什么是 kexec什么是 kdump如何使用 kdump如何访问捕获内存kdump 的优势Kdump 实现流程图 1 RHEL62 执行流程图 2 sles11 执行流程配置 kdump安装软件包和实用程序参数相关设置启动 kdump 服务测试配置是否有效载入转储捕获内核后记Kdump转载 2016-03-28 15:56:21 · 769 阅读 · 0 评论 -
linux内核线程死锁或死循环(soft lockup)之后如何让系统宕机重启
在开发内核模块或驱动时,如果处理失误,导致内核线程中出现死锁或者死循环,你会发现,除了重启之外,你没有任何可以做的。这时你的输入不起任何作用,终端(不是指远程的ssh工具)只会在那重复的输出类似“BUG: soft lockup - CPU#0 stuck for 67s! [fclustertool:2043]”,更无奈的是你重启之后导致系统挂起的堆栈信息也看不到,你所能做的就是一遍遍的加调试信转载 2016-03-28 15:49:18 · 3451 阅读 · 0 评论 -
内存分配——深入浅出
一提到内存管理,我们头脑中闪出的两个概念,就是虚拟内存,与物理内存。这两个概念主要来自于linux内核的支持。Linux在内存管理上份为两级,一级是线性区,类似于00c73000-00c88000,对应于虚拟内存,它实际上不占用实际物理内存;一级是具体的物理页面,它对应我们机器上的物理内存。这里要提到一个很重要的概念,内存的延迟分配。Linux内核在用户申请内存的时候,只是给它分配转载 2016-03-28 15:36:37 · 611 阅读 · 0 评论 -
伙伴系统的概述 (一)
伙伴系统的概述 Linux内核内存管理的一项重要工作就是如何在频繁申请释放内存的情况下,避免碎片的产生。Linux采用伙伴系统解决外部碎片的问题,采用slab解决内部碎片的问题,在这里我们先讨论外部碎片问题。避免外部碎片的方法有两种:一种是之前介绍过的利用非连续内存的分配;另外一种则是用一种有效的方法来监视内存,保证在内核只要申请一小块内存的情况下,不会从大块的连续空转载 2016-03-28 17:31:14 · 334 阅读 · 0 评论 -
Linux时间子系统之(六):POSIX timer
一、前言在用户空间接口函数文档中,我们描述了和POSIX timer相关的操作,主要包括创建一个timer、设定timer、获取timer的状态、获取timer overrun的信息、删除timer。本文将沿着这些用户空间的接口定义来看看内核态的实现。虽然POSIX timer可以基于各种不同的clock创建,本文主要描述real time clock相关的timer。本文第二转载 2016-03-30 10:30:59 · 1472 阅读 · 0 评论 -
linux kernel的中断子系统之(九):tasklet
一、前言对于中断处理而言,linux将其分成了两个部分,一个叫做中断handler(top half),属于不那么紧急需要处理的事情被推迟执行,我们称之deferable task,或者叫做bottom half,。具体如何推迟执行分成下面几种情况:1、推迟到top half执行完毕2、推迟到某个指定的时间片(例如40ms)之后执行3、推迟到某个内核线程被调度的时候转载 2016-03-30 10:20:55 · 516 阅读 · 0 评论 -
Linux时间子系统之(三):用户空间接口函数
一、前言从应用程序的角度看,内核需要提供的和时间相关的服务有三种:1、和系统时间相关的服务。例如,在向数据库写入一条记录的时候,需要记录操作时间(何年何月何日何时)。2、让进程睡眠一段时间3、和timer相关的服务。在一段指定的时间过去后,kernel要alert用户进程本文主要描述和时间子系统相关的用户空间接口函数知识。 二、和系统时间相关转载 2016-03-30 10:26:53 · 578 阅读 · 0 评论 -
Linux kernel panic学习笔记
什么是kernel panic 就像名字所暗示的那样,它表示Linux kernel走到了一个不知道该怎么走下一步的状况,一旦到这个情况,kernel就尽可能把它此时能获取的全部信息都打印出来,至于能打印出多少信息,那就看是那种情况导致它panic了。 有两种主要类型kernel panic: 1.hard panic(也就是Aieee信息输出) 2.soft panic (转载 2016-04-15 14:12:18 · 570 阅读 · 0 评论 -
Linux时间子系统之(一):时间的基本概念
本文使用Q & A的方式来和大家以前探讨一下时间的基本概念一、什么是时间?这个问题实在是太复杂了,我都不知道这是一个物理学、宇宙学、还是热力学异或是哲学问题,我只是想从几个侧面来了解一下时间这个概念。本节内容都是我坐在公交车上瞎想的,对物理学有兴趣的人可以指出我的错误(一个搞linux kernel的人不会有太深刻的物理学知识的),对Linux时间子系统有兴趣的人还是忽略这个小节吧转载 2016-03-30 10:23:46 · 554 阅读 · 0 评论 -
Linux时间子系统之(二):软件架构
一、前言本文的主要内容是描述内核时间子系统的软件框架。首先介绍了从旧的时间子系统迁移到新的时间子系统的源由,介绍新的时间子系统的优势。第三章汇整了时间子系统的相关文件以及内核配置。最后描述各种内核配置下的时间子系统的数据流和控制流。 二、背景介绍1、传统内核时间子系统的软件架构让我们先回到远古的2.4内核时代,其内核的时间子系统的软件框架如下:转载 2016-03-30 10:25:57 · 1311 阅读 · 0 评论 -
Linux时间子系统之(四):timekeeping
一、前言timekeeping模块是一个提供时间服务的基础模块。Linux内核提供各种time line,real time clock,monotonic clock、monotonic raw clock等,timekeeping模块就是负责跟踪、维护这些timeline的,并且向其他模块(timer相关模块、用户空间的时间服务等)提供服务,而timekeeping模块维护timeli转载 2016-03-30 10:27:57 · 936 阅读 · 0 评论 -
linux kernel的中断子系统之(八):softirq
一、前言对于中断处理而言,linux将其分成了两个部分,一个叫做中断handler(top half),是全程关闭中断的,另外一部分是deferable task(bottom half),属于不那么紧急需要处理的事情。在执行bottom half的时候,是开中断的。有多种bottom half的机制,例如:softirq、tasklet、workqueue或是直接创建一个kernel t转载 2016-03-30 10:19:51 · 409 阅读 · 0 评论 -
Linux时间子系统之(五):POSIX Clock
一、前言clock是timer的基础,任何一个timer都需要运作在一个指定的clock上来。内核中维护了若干的clock,本文第二章描述了clock的基本概念和一些静态定义的posix clock。根据计时的特点,clock分成两种:一种是真实世界的时间概念,另外一个是仅仅计算CPU执行时间 ,这两种clock分别在第三和第四章描述。从clock的生命周期来看,可以分成静态和动态的pos转载 2016-03-30 10:29:08 · 1786 阅读 · 0 评论 -
Linux内核学习笔记一
内核与操作系统: 内核是操作系统的核心部分,包含了系统运行的核心过程,决定系统的性能,操作系统启动内核被装入到RAM中;操作系统与底层硬件设备交互和为运行应用程序提供执行环境。Linux内核与微内核比较: 微内核:内核只需要一个很小的函数集,通常包括几个同步原语,一个简单的调度程序和进程间通信机制。运行在微内核之上的几个系统进程实现系转载 2016-04-15 14:52:24 · 364 阅读 · 0 评论 -
Linux内核学习笔记五——中断推后处理机制
一 中断 硬件通过中断与操作系统进行通信,通过对硬件驱动程序处注册中断处理程序,快速响应硬件的中断。硬件中断优先级很高,打断当前正在执行的程序。有两种情况: 硬件中断在中断处理程序中处理 硬件中断延后再进行处理 这个具体硬件相关,在中断处理程序中处理,打断了当前正在执行的程序;所有中断都将被屏蔽;如果占用时间太长不合适,造成系统交互转载 2016-04-15 15:26:46 · 743 阅读 · 0 评论 -
Linux内核学习笔记六——并发和同步概念
一 临界区和竞争条件 临界区:访问和操作共享数据的代码段。 竞争条件:多个执行线程处于同一个临界区中。 处于竞争条件:造成访问的数据或者资源不一致状态:对资源i的访问:ProcessA和B访问后得到正确的结果应该是9: 进程是并发执行,有可能得转载 2016-04-15 15:36:32 · 453 阅读 · 0 评论 -
Linux内核学习笔记七——内核同步机制和实现方式
一 原子操作 指令以原子的方式执行——执行过程不被打断。1 原子整数操作 原子操作函数接收的操作数类型——atomic_t//定义atomic_t v;//初始化atomic_t u = ATOMIC_INIT(0);//操作atomic_set(&v,4); // v = 4atomic_add(2,&v);转载 2016-04-15 15:39:15 · 541 阅读 · 0 评论 -
Linux内核学习笔记九——内核内存管理方式
一 页 内核把物理页作为内存管理的基本单位;内存管理单元(MMU)把虚拟地址转换为物理地址,通常以页为单位进行处理。MMU以页大小为单位来管理系统中的也表。 32位系统:页大小4KB 64位系统:页大小8KB内核用相应的数据结构表示系统中的每个物理页: struct page {}内核通过这样转载 2016-04-15 15:44:36 · 500 阅读 · 0 评论 -
Linux内核学习笔记三——进程调度
进程调度: 在可运行态进程之间分配有限处理器时间资源的内核子系统。一 调度策略1 进程类型 I/O消耗型进程:大部分时间用来提交I/O请求或是等待I/O请求,经常处于可运行状态,但运行时间短,等待请求过程时处于阻塞状态。如交互式程序。 处理器消耗型进程:时间大都用在执行代码上,除非被抢占否则一直不停的运行。转载 2016-04-15 15:10:32 · 548 阅读 · 0 评论 -
Linux内核学习笔记四——系统调用
一 用户空间和内核空间Linux内核将这4G字节虚拟地址空间的空间分为两部分: l 将最高的1G字节(从虚拟地址0xC0000000到0xFFFFFFFF),供内核使用,称为“内核空间”。 l 将较低的3G字节(从虚拟地址 0x00000000到0xBFFFFFFF),供各个进程使用,称为“用户空间)。 因为每个进程可以通过系统调用进入内核,因此Linux转载 2016-04-15 15:12:08 · 510 阅读 · 0 评论 -
Linux内核学习笔记八——定时器和时间管理
一 内核中的时间观念 内核在硬件的帮助下计算和管理时间。硬件为内核提供一个系统定时器用以计算流逝的时间。系 统定时器以某种频率自行触发,产生时钟中断,进入内核时钟中断处理程序中进行处理。 墙上时间和系统运行时间根据时钟间隔来计算。利用时间中断周期执行的工作: 更新系统运行时间; 更新实际时间;转载 2016-04-15 15:42:15 · 560 阅读 · 0 评论 -
Linux内核学习笔记十——虚拟文件系统概念
虚拟文件系统虚拟文件系统:内核子系统VFS,VFS是内核中文件系统的抽象层,为用户空间提供文件系统相关接口;通过虚拟文件系统,程序可以利用标准Linux文件系统调用在不同的文件系统中进行交互和操作。VFS作为抽象层: 文件系统被安装在一个特定的安装点上,该安装点在全局层次结构中被称作命名空间,所有的已安装文件系统都作为根文件转载 2016-04-15 15:47:00 · 791 阅读 · 0 评论 -
Linux内核学习笔记二——进程
一 进程与线程 进程就是处于执行期的程序,包含了独立地址空间,多个执行线程等资源。 线程是进程中活动的对象,每个线程都拥有独立的程序计数器、进程栈和一组进程寄存器。 内核调度的对象是线程而不是进程。对Linux而言,线程是特殊的进程。二 进程描述符及任务结构 内核使用双向循环链表的任务队列来存放进程,使用结构体转载 2016-04-15 15:03:44 · 664 阅读 · 0 评论 -
skb数据的发送
数据的发送skb结构和分配skb分配释放的频率非常高,用kmem_cache分配skb_buf的头部,alloc_skb分配其数据区,alloc_skb最终调用了_kmalloc分配连续物理内存,skb_buf结构体中重要成员:head指向已分配空间的头部,end指向该空间尾部,data指向有效数据头部,tail指向有效数据尾部,当skb在各层流动时,head和end是不变的。sk...转载 2019-05-05 09:50:52 · 981 阅读 · 0 评论 -
Android横竖屏切换总结(Android资料)
Android横竖屏要解决的问题应该就两个:一.布局问题二.重新载入问题1.布局问题:如果不想让软件在横竖屏之间切换,最简单的办法就是在项目的AndroidManifest.xml中找到你所指定的activity中加上android:screenOrientation属性,他有以下几个参数:"unspecified":默认值 由系统来判断显示方向.判定的策略转载 2016-04-26 16:24:16 · 687 阅读 · 0 评论 -
linux cpufreq framework(3)_cpufreq core
1. 前言前文(Linux cpufreq framework(2)_cpufreq driver)从平台驱动工程师的角度,简单的介绍了编写一个cpufreq driver的大概步骤。但要更深入理解、更灵活的使用,必须理解其内部的实现逻辑。因此,本文将从cpufreq framework core的角度,对cpufreq framework的内部实现做一个简单的分析。2. 提供转载 2016-05-05 11:47:58 · 826 阅读 · 0 评论 -
Android 4.4 Kitkat Phone工作流程浅析(四)__RILJ工作流程简析
本文来自http://blog.csdn.net/yihongyuelan 转载请务必注明出处 本文代码以MTK平台Android 4.4为分析对象,与Google原生AOSP有些许差异,请读者知悉。前置文章:《Android 4.4 Kitkat Phone工作流程浅析(一)__概要和学习计划》《Android 4.4 Kitkat Phone工作流程浅析(二转载 2016-04-26 16:20:16 · 582 阅读 · 0 评论 -
Linux CPU core的电源管理(5)_cpu control及cpu hotplug
1. 前言由“Linux CPU core的电源管理(1)_概述”的描述可知,kernel cpu control位于“.\kernel\cpu.c”中,是一个承上启下的模块,负责屏蔽arch-dependent的实现细节,向上层软件提供控制CPU core的统一API(主要包括cpu_up/cpu_down等接口的实现)。本文将基于这些API,从上到下,分析CPU core从启动到关转载 2016-05-05 11:50:33 · 3488 阅读 · 0 评论