摘要:转自:http://blog.chinaunix.net/u1/49093/showart_1910189.html这个问题有很多人问过,我看了下Linux得内核代码,原因如下:(当然我不能保证一定对,如果有牛人理解得更好,欢迎指正)1、 中断处理的时候,不应该发生进程切换,因为在中断context中,唯一能打断当前中断handler的只有更高优先级的中断,它不会被进程打断,如果在 中断context中休眠,则没有办法唤醒它,因为所有的wake_up_xxx都是针对某个进程而言的,而在中断context中,没有进程的概念,没 有一个task_struct(这点对于softirq和tasklet
阅读全文
06 2012 档案
摘要:在编写设备驱动程序的时候,如果要想把设备内存映射到用户空间,那需要我们实现mmap,通过看ldd3上面的介绍,对实现mmap有了一点了解.书上介绍主要是利用int remap_pfn_range(struct vm_area_struct *vma, unsigned long virt_addr,unsigned long pfn, unsigned long size,pgprot_t prot) 函数或者int io_remap_page_range(struct vm_area_struct *vma, unsigned long virt_addr, unsigned long ph
阅读全文
摘要:内核的dma一般在平台初始化的时候已经分配好了。但是对于一些有内部dma的硬件ip,比如usb ip、video加速ip,他们可能由ip厂商封装好的,没办法绑定到cpu端,这时候在内核使用dma就要注意了,因为dma只认识物理地址哦。当然,办法还是有的,look:以下来自:http://blog.csdn.net/zjujoe/archive/2009/05/15/4189612.aspx这两天在做 DMA 相关开发, 遇到一对分配 dma buffer 的函数,dma_alloc_coherent 与 dma_alloc_writecombine。 不知其区别。 google 一下也没有得到
阅读全文
摘要:GNU C的一大特色(却不被初学者所知)就是__attribute__机制。__attribute__是用来设置函数属性(Function Attribute)、变量属性(Variable Attribute)和类型属性(Type Attribute)。__attribute__书写特征是:__attribute__前后都有两个下划线,并切后面会紧跟一对原括弧,括弧里面是相应的__attribute__参数。__attribute__语法格式为:__attribute__ ((attribute-list))其位置约束为:放于声明的尾部“;”之前。1 设置函数属性(Function Attri
阅读全文
摘要:所有的内核代码,基本都包含了include/linux/compile.h这个文件,所以它是基础,涵盖了分析内核所需要的一些列编译知识,本博就分析分析这个文件里的代码:#ifndef __LINUX_COMPILER_H#define __LINUX_COMPILER_H#ifndef __ASSEMBLY__首先印入眼帘的是对__ASSEMBLY__这个宏的判断,这个变量实际是在编译汇编代码的时候,由编译器使用-D这样的参数加进去的,gcc会把这个宏定义为1。用在这里,是因为汇编代码里,不会用到类似于__user这样的属性(关于 __user这样的属性是怎么回子事,本博后面会提到),因为这样
阅读全文
摘要:转自:http://www.dzsc.com/data/html/2010-1-27/81710.html作者:刘洪涛,华清远见嵌入式学院讲师。 四、在内核里写i2c设备驱动的两种方式 前文介绍了利用/dev/i2c-0在应用层完成对i2c设备的操作,但很多时候我们还是习惯为i2c设备在内核层编写驱动程序。目前内核支持两种编写i2c驱动程序的方式。下面分别介绍这两种方式的实现。这里分别称这两种方式为“Adapter方式(LEGACY)”和“Probe方式(new STyle)”。 (1) Adapter方式(LEGACY) (下面的实例代码是在2.6.27内核的pca953x.c基础上...
阅读全文
摘要:本文转自:http://www.dzsc.com/data/html/2009-12-22/81040.html作者:刘洪涛,华清远见嵌入式学院讲师。 一、概述 谈到在Linux系统下编写I2C驱动,目前主要有两种方式,一种是把I2C设备当作一个普通的字符设备来处理,另一种是利用linux I2C驱动体系结构来完成。下面比较下这两种驱动。 第一种方法的好处(对应第二种方法的劣势)有: ● 思路比较直接,不需要花时间去了解linux内核中复杂的I2C子系统的操作方法。 第一种方法问题(对应第二种方法的好处)有: ● 要求工程师不仅要对I2C设备的操作熟悉,而且要熟悉I2C的适配器操...
阅读全文
摘要:串联分压的原理: 在串联电路中,各电阻上的电流相等,各电阻两端的电压之和等于电路总电压。可知每个电阻上的电压小于电路总电压,故串联电阻分压。并联分流的原理: 在并联电路中,各电阻两端的电压相等,各电阻上的电流之和等于总电流(干路电流)。可知每个电阻上的电流小于总电流(干路电流),故并联电阻分流。 分压原理 R1:R2=U1:U2 分流原理 R1:R2= I 2:I 1 串联电路中分压原理:U1:U2=R1:R2 并联电路中分流原理:I1:I2=R2:R1
阅读全文
摘要:workqueue,中文称其为工作队列,是一个用于创建内核线程的接口,通过它创建的内核线程来执行内核其他模块排列到队列里的工作,创建的内核线程被称为工作者线程。要理解工作队列的实现,重点在于理解相关的三个数据结构的含义及关系。1 表示工作队列类型的数据结构:struct workqueue_struct/** The externally visible workqueue abstraction is an array of* per-CPU workqueues:*/struct workqueue_struct {struct cpu_workqueue_struct *cpu_wq;
阅读全文
摘要:单解:VDD:电源电压(单极器件);电源电压(4000系列数字电 路);漏极电压(场效应管)VCC:电源电压(双极器件);电源电压(74系列数字电路);声控载波(Voice Controlled Carrier)VSS:地或电源负极VEE:负电压供电;场效应管的源极(S)VPP:编程/擦除电压。详解:在电子电路中,VCC是电路的供电电压, VDD是芯片的工作电压:VCC:C=circuit 表示电路的意思, 即接入电路的电压, D=device 表示器件的意思, 即器件内部的工作电压,在普通的电子电路中,一般Vcc>Vdd !VSS:S=series 表示公共连接的意思,也就是负极。有些
阅读全文