转自:http://blog.163.com/vic_kk/blog/static/494705242010719483774/ Table of Contents 1 中断 1.1 中断的类型 1.2 硬件 IRQs (Interrupt Requests) 1.3 中断的处理 1.3.1 中断处理的出口和入口 1.3.2 中断处理函数 1.4 数据结构 1.4.1 基本数据结构和中断处理子系统 1.4.2 IRQ 控制器抽象 —— irq_chip 1.4.3 中断处理函数的 Represe…
void * kmalloc(size_t size, gfp_t gfp_mask); kmalloc()第一个参数是要分配的块的大小,第一个参数为分配标志,用于控制kmalloc()的行为. kmalloc()的底层依赖于__get_free_pages()来实现,分配标志的前缀GFP正好是这个底层函数的缩写. GFP_ATOMIC:在中断处理函数.底半部.tasklet.定时器处理函数以及URB完成函数中,在调用者持有自旋锁或读写锁时以及当驱动将current->state修改为非TASK…
声明: 本笔记内容并非本人原创,90%来自网络资料的整合.同时,由于自己是刚刚接触qemu & gdbserver remote debug,本文也就算不得教程,仅供有缘人参考而已. ------------------------------------------------------------------------------------------------分割线-----------------------------------------------------------…
转:http://www.wowotech.net/linux_kenrel/233.html linux kernel内存回收机制 作者:itrocker 发布于:2015-11-12 20:37 分类:内存管理 无论计算机上有多少内存都是不够的,因而linux kernel需要回收一些很少使用的内存页面来保证系统持续有内存使用.页面回收的方式有页回写.页交换和页丢弃三种方式:如果一个很少使用的页的后备存储器是一个块设备(例如文件映射),则可以将内存直接同步到块设备,腾出的页面可以被重用:如果…
返回目录:<ARM-Linux中断系统>. 总结:二中断处理经过两种模式:IRQ模式和SVC模式,这两种模式都有自己的stack,同时涉及到异常向量表中的中断向量. 三ARM处理器在感知到中断之后,切换CPSR寄存器模式到IRQ:保存CPSR和PC:mask irq:PC指向irq vector. 四进入中断的IRQ模式相关处理,然后根据当前处于用户还是内核空间分别处理. 五是在中断例程处理完之后退出流程,同样根据进入中断前处于用户还是内核不同分别处理. 原文地址:Linux kernel的中…
返回目录:<ARM-Linux中断系统>. 总结:中断分为上半部和下半部,上半部关中断:下半部开中断,处理可以延迟的事情.下半部有workqueue/softirq/tasklet三种方式. 二介绍了为何要分top half和bottom half?workqueue/softirq/tasklet区别? 三重点分析了preempt_count,以及据此判断当前task所处的上下文. 四详细分析了softirq机制,softirq静态数组?softirq_action?如何注册softirq?…
  Linux下,I/O处理的层次可分为4层: 系统调用层,应用程序使用系统调用指定读写哪个文件,文件偏移是多少 文件系统层,写文件时将用户态中的buffer拷贝到内核态下,并由cache缓存该部分数据 块层,管理块设备I/O队列,对I/O请求进行合并.排序 设备层,通过DMA与内存直接交互,将数据写到磁盘 下图清晰地说明了Linux I/O层次结构: 写文件过程 写文件的过程包含了读的过程,文件先从磁盘载入内存,存到cache中,磁盘内容与物理内存页间建立起映射关系.用于写文件的write函数…
文章目录 关于linux内核中的__attribute__关键字 Linux kernel启动参数 gdt / ldt PCB 关于linux内核中的__attribute__关键字 part I: 原文出处:http://www.jollen.org/blog/2006/10/_gcc___attribute.html gcc 提供一種「定義函數屬性(attribute)」的語法,也就是前一篇日記我們所提到的 __attribute__標籤.__attribute__用來讓我們定義函數的行為,…
http://blog.csdn.net/blizmax6/article/details/6747601 linux内核调试指南 一些前言 作者前言 知识从哪里来 为什么撰写本文档 为什么需要汇编级调试 ***第一部分:基础知识*** 总纲:内核世界的陷阱 源码阅读的陷阱 代码调试的陷阱 原理理解的陷阱 建立调试环境 发行版的选择和安装 安装交叉编译工具 bin工具集的使用 qemu的使用 initrd.img的原理与制作 x86虚拟调试环境的建立 arm虚拟调试环境的建立 arm开发板调试环…
以下为本人学习笔记,如有转载请注明出处,谢谢 DEFINE_MUTEX(buzzer_mutex); mutex_lock(&buzzer_mutex); mutex_unlock(&buzzer_mutex); static void WriteNumber(const char *fileName, int number) { FILE *fp; fp = fopen(fileName, "w"); if (fp == NULL) { LCD_DEBUG("…