自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

  • 博客(15)
  • 资源 (5)
  • 收藏
  • 关注

原创 Linux设备驱动开发-linux驱动中的非阻塞访问方式

前面已经详细分析过了阻塞访问方式,下面就来继续分析一下非阻塞的访问方式。什么是非阻塞的访问方式呢?非阻塞操作的进程在不能进行设备操作时,并不挂起,他或者是放弃当前的进程执行,或者是不停地进行查询,知道进程可以进行操作为止。实际上就是常说的轮询的方式进行设备的访问。select()和poll()调用的本质是一样的,在性能上也不存在明显的差异,只是select监视的文件描述符数量有限,下面分别

2011-12-30 18:56:08 1096

原创 Linux设备驱动开发-linux驱动中的阻塞访问方式

阻塞与非阻塞是设备访问的两种不同的模式。什么是阻塞操作呢?其是指在执行设备操作的时候,如果不能获得资源,则挂起进程直到满足可操作的条件后再进行操作.而非阻塞操作则是在进程不能进行设备操作时,并不挂起到等待队列,而是放弃或者不断的查询,直到能够进行操作。应用程序以阻塞的方式进行read操作的时候,会调用一个system call,将系统的控制权交给kernel后就进入等待状态,等kernel将这

2011-12-29 16:37:30 3072

原创 Linux设备驱动开发-linux并发控制中的信号量机制

上一篇讲了并发控制的几种机制,比如中断屏蔽、原子操作、自旋锁。下面我们来说一说并发控制的另一个重要的机制:信号量。信号量的使用和自旋锁类似,得到信号量的进程进入临界区,不同的是当获取不到信号量的时候,进程不会一直等待,而是进入休眠状态。信号量的概念想必大家在学习操作系统原理的时候已经很熟悉了。那么下面我们来看一下linux为信号量提供的操作都有哪些。首先肯定是如何定义一个信号量,如:

2011-12-05 21:18:35 963

原创 Linux设备驱动开发-linux设备驱动中的并发控制

如果大家看了前面的linux字符设备驱动实例,可能会有一个疑问,在我们调用copy_to_user和copy_from_user函数完成从用户态、内核态的读写操作的时候,如果这两个操作并发执行的话会出现一个什么样的情况?那肯定是会出现问题的,这个很容易理解,那么我们怎么去解决这一类似的问题呢?这就是下面要讲的linux的并发控制。我们在设备驱动的编写过程中要解决的一个问题就是并发的控制,也就是

2011-12-05 10:26:07 604

原创 Linux设备驱动开发-linux内存管理简介(一)

说到内存管理,首先我们先说下虚拟内存、内核空间以及用户空间的概念。Linux简化了分段机制,是的虚地址与线性地址总是一致。线性空间在32位平台上为4GB的固定大小,也就是Linux虚地址空间的大小。Linux将这4GB分为两部分,较高的1GB供内核使用,称为“内核空间”,较低的3GB供各个进程使用,称为“用户空间”。由于每个进程可以通过系统调用进入内核,因此,Linux内核空间由系统内的所有进程共

2011-11-23 11:26:56 676 1

原创 Linux设备驱动开发-linux字符设备驱动实例

前面讲了字符设备驱动的框架,还不懂的请看这里。现在我们就来看一个简单的实例,globalmem设备驱动(选自设备驱动开发详解),这里我们就将这个例子分模块讲解一下完整的代码在这里下载。globalmem就是全局内存,在其驱动中会分配一片大小为GLOBALMEM_SIZE(4KB)的内存空间并提供针对该片内存的读写、控制以及定位,以供用户空间的进程能通过linux系统调用访问这片内存。这里我

2011-11-20 20:09:44 1324 1

原创 Linux设备驱动开发-linux字符设备驱动框架

在整个linux设备驱动的学习中,字符设备的驱动是最基础的,下来我们就先看下字符设备驱动程序的框架。在linux中,字符设备驱动是由下面几个部分组成的。首先我们先来看一下字符设备的内核模块是如何加载与卸载的,下面就是模块加载与卸载的程序模板:/*设备结构体*/struct my_dev_t{ struct cdev cdev; ......}my_dev;/*模块加载函

2011-11-14 21:30:25 1872

原创 Linux设备驱动开发-linux中断小任务(tasklet)机制举例

说到小任务机制,那我们不得不说中断的处理机制。在linux中中断并不是一次性被执行完的,而是分为了两部分bottom half和top half。中断服务例程的执行一般都会伴随着关中断,避免嵌套其他的中断程序,使中断控制复杂化,但是中断是随机的,并不会因为你关中断而不发生新的中断,如果关中断的时间太长,那么这些新的中断就不能得到及时的响应,中断就可能丢失,鉴于此,就产生了这种两部分的中断机制。

2011-11-13 21:22:28 806

原创 Linux设备驱动开发-linux中断程序

学习驱动开发,当然中断的学习是必不可少的,下面我们就简单的说一下中断机制在linux系统中的实现。说到中断,这里就提到两个概念,中断服务例程和中断处理程序,在Intel x86结构中,中断是通过两片8259A来响应15个外部中断源的,在linux系统中,这15条中断线对应15个中断处理程序,依次为IRQ0x00_interrupt()、IRQ0x01_interrupt()、......、IR

2011-11-13 18:23:31 1743 1

原创 Linux设备驱动开发-Makefile与Kconfig举例

上一篇文章说了Makefile与Kconfig,那么我们现在就看一个例子让我们对其有更加深刻的理解。(参考驱动开发详解)假设我们要在内核源码drivers目录下为ARM新增一个my driver树形目录,如下:my_driver/|-- cpu|   `-- cpu.c|-- test.c|-- test_client.c|-- test_ioctl.c|-- te

2011-11-07 12:02:24 749

原创 Linux设备驱动开发-Makefile与Kconfig

在linux内核中增加驱动程序需要完成下面的工作:将编写好的源代码拷入到内核的相应目录;在目录下的Kconfig文件中增加关于此代码的相关编译配置选项;在Makefile文件中添加对此代码的相应的编译选项。下面我们就对Makefile和Kconfig进行逐一的讲解。1、Makefile简单地说,Makefile文件就是提供了你所写程序的一种编译的规则,那么在编译驱动程序

2011-11-04 20:05:02 1254

原创 Linux设备驱动开发-内核模块

Linux内核的结构非常庞大,我们想要把需要的功能加到内核中,是不是要把这些功能都编译到内核?不是的,因为这样我们就不得不将内核重新编译,而且生成的内核会很大,这样就费时费力。而Linux提供了模块的机制,很好地解决了上面的问题。模块本身不被编译入内核映像,能够很好的控制了内核的大小,而且模块一旦被加载,就和内核中的其它部分完全一样了。        在Linux驱动开发中,设备驱动都是以内核

2011-10-30 20:15:44 733

原创 Linux设备驱动开发-交叉编译环境的建立

学习linux设备驱动,首先要在自己的PC机上安装linux系统,当然最好还要有一块属于自己的开发板等等,我这里用的是FriendlyARM公司的tiny6410开发板,采用的是S3C6410 ARM11处理器。这些准备工作就不再这里进行讲解了。那么下面我们就将进行设备驱动开发的第一步,建立交叉编译环境。        其实有了自己的开发板之后,开发板自带的资料都会有建立交叉编译环境大概方法,

2011-10-28 22:19:40 1707

原创 μC/OS-II基本原理简介

μC/OS-II,意为“微控制器操作系统版本”。其不仅提供了一个完整的嵌入式实时内核的源代码,而且对这些代码的细节进行了详尽的解释。他不仅告诉读者该实时内核是怎么写的,还解释了为什幺这么写,而且该实时内核可以被方便的移植到几乎所有的嵌入式应用类CPU上。对于商业应用中哪些昂贵的实时操作系统软件,μC/OS-II是一个很好的学习平台。         说到μC/OS-II,这里先介绍一下嵌入式应

2011-03-19 15:11:00 523

原创 嵌入式开发-在路上

上研也有半年了,这是我第一篇博文,这学期开设的有嵌入式系统设计这门课,所以思前想后,准备好好学习一下这个课程,拾起我本科的时候想弄但是没有弄成,半途而废了的东西。以前觉得对嵌入式开发还是比较感兴趣的,但是由于种种原因没有继续深入下去,想想还是挺后悔的,不过既然这学期开了这个课,准备趁此机会索性好好学习一下,加之以前有点基础应该上手也会比较快。      第一节课上完,直接找到老师要了一块ARM

2011-03-17 23:15:00 221

深入理解计算机系统

国外经典教材深入理解计算机系统,非常好的一本书。

2012-10-09

Effective_C++

Effective_C++是国外学习c++的经典教材,可以引导c++的学习者解决常见的问题,深入地理解c++!

2011-12-16

c语言深度剖析

学习c语言后深入理解的必备,可以解决常用的c语言中遇到的一些问题,有助于加强c语言的编写能力!

2011-12-16

globalmem.c

一个简单的字符设备globalmem的驱动程序

2011-11-20

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除