自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(46)
  • 资源 (16)
  • 收藏
  • 关注

转载 MTD NANDFLASH驱动相关知识介绍

MTD,Memory Technology Device即内存技术设备字符设备和块设备的区别在于前者只能被顺序读写,后者可以随机访问;同时,两者读写数据的基本单元不同。字符设备,以字节为基本单位,在Linux中,字符设备实现的比较简单,不需要缓冲区即可直接读写,内核例程和用户态API一一对应,用户层的Read函数直接对应了内核中的Read例程,这种映射关系由字符设备的file_op

2014-11-20 22:01:39 932

转载 Linux中断处理流程

看了一些网络上关于linux中断实现的文章,感觉有一些写的非常好,在这里首先感谢他们的无私付出,然后也想再补充自己对一些问题的理解。先从函数注册引出问题吧。一、中断注册方法在linux内核中用于申请中断的函数是request_irq(),函数原型在Kernel/irq/manage.c中定义:int request_irq(unsigned int irq, irq_handler_t

2014-11-20 21:59:44 947

转载 IO端口和IO内存的区别及分别使用的函数接口

每个外设都是通过读写其寄存器来控制的。外设寄存器也称为I/O端口,通常包括:控制寄存器、状态寄存器和数据寄存器三大类。根据访问外设寄存器的不同方式,可以把CPU分成两大类。一类CPU(如M68K,Power PC等)把这些寄存器看作内存的一部分,寄存器参与内存统一编址,访问寄存器就通过访问一般的内存指令进行,所以,这种CPU没有专门用于设备I/O的指令。这就是所谓的“I/O内存”方式。另一类CPU

2014-11-20 21:58:56 1147

转载 s3c2440存储控制器和地址以及启动的理解

1.首先应该先了解Flash ROM的种类  NOR FLASH地址线和数据线分开,来了地址和控制信号,数据就出来。  NAND Flash地址线和数据线在一起,需要用程序来控制,才能出数据。通俗的说,只给地址不行,要先命令,再给地址,才能读到NAND的数据,在一个总线完成的。  结论是:ARM无法从NAND直接启动。除非装载完程序,才能使用NAND Flash.  Nand

2014-11-16 10:56:24 862

转载 S3C2440的LCD编程

S3C2440的LCD编程1. LCD工作的硬件需求:  要使一块LCD正常的显示文字或图像,不仅需要LCD驱动器,而且还需要相应的LCD控制器。在通常情况下,生产厂商把LCD驱动器会以COF/COG的 形式与LCD玻璃基板制作在一起,而LCD控制器则是由外部的电路来实现,现在很多的MCU内部都集成了LCD控制器,如S3C2410/2440等。通 过LCD控制器就可以产生LCD驱动器所

2014-11-16 10:55:44 1186

转载 如何计算Nand Flash要传入的行地址和列地址

在介绍具体读取数据的详细流程之前,还要做一件事,那就是,先要搞懂我们要访问的地址,以及这些地址,如何分解后,一点点传入进去,使得硬件能识别才行。 此处还是以 K9F8G08U0A 为例,此 Nand Flash,一共有 8192 个块,每个块内有 64 页,每个页是 2K+64 Bytes,假设,我们要访问其中的第 7000个块中的第 64 页中的 1208 字节处的地址,此时,我们就要

2014-11-16 10:54:15 823

转载 嵌入式volatile关键字

今天在看S3C2440开发板的初始化代码时,对#define A (* (volatile unsigned long *) 0x48000000这种形式的定义方式有困惑,于是求助GOOGLE大神,在网上搜到了一些文章,觉得以下三篇文章对理解这个有些作用:文章一:    对于不同的计算机体系结构,设备可能是端口映射,也可能是内存映射的。如果系统结构支持独立的IO地址空间,并且是端口映射

2014-11-16 10:53:08 1101

转载 Linux设备驱动之I/O端口与I/O内存

一、统一编址与独立编址该部分来自于:http://blog.chinaunix.net/space.php?uid=21347954&do=blog&id=443670,感谢mason_hu的分享。  从CPU连出来一把线:数据总线、地址总线、控制总线,这把线上挂着N个接口,有相同的,有不同的,名字叫做存储器接口、中断控制接口、DMA接口、并行接口、串行接口、AD接口……一个设备要想接

2014-11-16 10:52:28 611

转载 Linux设备驱动之mmap设备操作

1.mmap系统调用void *mmap(void *addr, size_t len, int prot, int flags, int fd, off_t offset);功能:负责把文件内容映射到进程的虚拟地址空间,通过对这段内存的读取和修改来实现对文件的读取和修改,而不需要再调用read和write;参数:addr:映射的起始地址,设为NULL由系统指定;len

2014-11-16 10:49:37 634

转载 Linux高级字符设备之Poll操作

在用户程序中,select()和poll()也是与设备阻塞与非阻塞访问息息相关的,使用非阻塞I/O的应用程序通常会使用select和poll系统调用查询是否可对设备进行无阻塞的访问。select系统调用最终会引发设备驱动中的poll函数被执行。一、select()系统调用:用于多路监控,当没有一个文件满足要求时,select将阻塞调用进程。1.select()原型:in

2014-11-16 10:45:42 537

转载 Linux设备驱动之Ioctl控制

大部分驱动除了需要具备读写设备的能力之外,还需要具备对硬件控制的能力。 一、在用户空间,使用ioctl系统调用来控制设备,原型如下:int ioctl(int fd,unsigned long cmd,...);/*fd:文件描述符cmd:控制命令...:可选参数:插入*argp,具体内容依赖于cmd*/  用户程序所作的只是通过命令码告诉驱动程序它想做什么,

2014-11-16 10:42:47 628

转载 fcntl

fcntl函数可以改变已打开的文件性质目录1表头文件2函数类型3参数介绍▪ 参数fd▪ 参数cmd▪ 参数lock指针4功能介绍5函数返回值6使用实例1表头文件编辑#include #include #include fcn

2014-11-16 10:40:16 552

转载 linux设备驱动程序中的阻塞机制

阻塞与非阻塞是设备访问的两种方式。在写阻塞与非阻塞的驱动程序时,经常用到等待队列。一、阻塞与非阻塞  阻塞调用是指调用结果返回之前,当前线程会被挂起,函数只有在得到结果之后才会返回。  非阻塞指不能立刻得到结果之前,该函数不会阻塞当前进程,而会立刻返回。  对象是否处于阻塞模式和函数是不是阻塞调用有很强的相关性,但并不是一一对应的。阻塞对象上可以有非阻塞的调用方式,我们可以通过

2014-11-16 10:30:12 481

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

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

2014-11-16 10:20:20 504

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

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

2014-11-16 10:19:07 564

转载 设备的阻塞与非阻塞操作

阻塞操作是指,在执行设备操作时,若不能获得资源,则进程挂起直到满足可操作的条件再进行操作。非阻塞操作的进程在不能进行设备操作时,并不挂起。被挂起的进程进入sleep状态,被从调度器的运行队列移走,直到等待的条件被满足。  在Linux驱动程序中,我们可以使用等待队列(wait queue)来实现阻塞操作。wait queue很早就作为一个基本的功能单位出现在Linux内核里了,它以队列为基

2014-11-16 10:11:15 1096

转载 Linux驱动编程 step-by-step (十一)

Linux 内核链表(2)之前描述了如何创建内核链表(INIT_LIST_HEAD)向链表中添加节点(list_add)删除一个链表节点(list_del)获取一个链表节点对应的结构体(list_entry)等接下来会介绍几种操作替换一个链表节点,合并两个链表,将一个链表分成两段,遍历链表。替换链表节点替换节点很好理解,就是将新的节点替换老节点,将新的节点的对应

2014-11-14 22:50:57 462

转载 Linux驱动编程 step-by-step (十) Linux 内核链表

终于可以清闲下来打理一下我的blog了,台资企业真的事情很多很烦……前几篇文章对字符设备有个简单介绍,并以简单的一个字符设备驱动作结尾,其实linux上大部分驱动程序都是字符设备程序,Linux源码中也可以看到很多的字符设备驱动,所以供学习的代码还是很多的。这一节本想说一下如何测试设备驱动,但是因为最近看了看内核链标,所以称还记的比较清楚赶紧记录下来。有不到位的地方烦请指正。

2014-11-14 22:49:39 636

转载 Linux驱动编程 step-by-step (九)字符设备模拟pipe的驱动程序

字符设备模拟pipe的驱动程序让我们用一个”pipe“的设备驱动去结束简单字符设备吧(这里所说的pipe并非标准的pipe只是模拟了一个从一端写入从另一端写入的设备)测试代码1      测试代码2设计思路用一个图来说明(可是画了很久哟)简单说来就是一个进程写入缓冲区,另一个进程可以读出,读出后原buffer中的数据被置为无效值,自定义一个结构

2014-11-14 22:48:32 616

转载 Linux驱动编程 step-by-step (八) 阻塞型字符设备驱动

阻塞型字符设备驱动前面说到了 如何实现read write 等操作,但如果设备缓冲已满,现在想而用户此时又想写入设备,此请求就无法立即执行,那怎么办呢?第一种情况是:驱动程序想用户返回请求失败的信息。第二种情况是:使调用进程阻塞等待设备可以被操作。而用户更希望自己选择在请求无法满足时候如何操作,所以在用户空间有了O_NONBLOCK标志在打开设备的时候如果用户指定了此标志(

2014-11-14 22:46:28 597

转载 Linux驱动编程 step-by-step (一)驱动程序的作用

驱动程序的作用:简单来说 驱动程序就是使计算机与设备通信的特殊的代码,在作单片机时候(无OS)我们自己定义接口及自定义的结构来操作相关硬件,而在有OS的模式下我们操作的硬件是去实现对应的接口(这些接口是已定义好的,我们需要实现这些接口)而无需自己定义接口,这样既能正确的控制设备。又能很好的维护(如果需要升级驱动,上边的应用程序不需要改变)编写驱动考虑的因素提供给用户更多的选

2014-11-14 22:45:25 652

转载 Linux驱动编程 step-by-step (二) 简单字符设备驱动

简单字符设备驱动1、主次设备号主设备号标识设备连接的的驱动,此设备好由内核使用,标识在相应驱动下得对应的设备在linux中设备号是一个32位的dev_t类型typedef __u32    __kernel_dev_t;typedef __kernel_dev_t    dev_t;crw------- 1 root  root  10, 1 Apr 11 

2014-11-14 22:44:42 644

转载 Linux驱动编程 step-by-step (三) 字符设备中 重要的数据结构

字符设备中 重要的数据结构大部分字符驱动设计三个重要的数据结构struct file_operationsstruct filestruct inode 一、文件操作           在之前的一篇文章中已经有介绍了如何去生情字符设备设备号,但是没有做任何的工作,也就只能写一个不能工作的字符设备;struct file_operations 结构域用来

2014-11-14 22:43:45 577

转载 Linux驱动编程 step-by-step (四) 字符设备的注册与设备节点的自动创建

字符设备的注册与设备节点的自动创建cdev 结构内核内部使用struct cdev来表示一个字符设备struct cdev {    struct kobject kobj; //kobj设备模型以后介绍    struct module *owner;    const struct file_operations *ops;//文件操作    struc

2014-11-14 22:43:15 698

转载 Linux驱动编程 step-by-step (五)主要的文件操作方法实现

主要的文件操作方法实现文件操作函数有很多的操作接口,驱动编程需要实现这些接口,在用户编程时候系统调用时候会调用到这些操作[cpp] view plaincopystruct file_operations {      ...      loff_t (*llseek) (struct file *, loff_t, int);  

2014-11-14 22:41:58 517

转载 Linux驱动编程 step-by-step (六) 用户地址检测 简单模块调试 以及一些杂项

用户地址检测 简单模块调试 以及一些杂项检测用户空间地址的有效性上一节中提到在read write时候要检测用户空间传递的参数地址是否是有效地址,有的内核函数会自行检测,但是在调用轻量级的内核函数时候,就可能不去检测用户空间的地址是否有效,如果此时用户无传递一个无效地址,而内核函数去操作了它,这时棘手的问题出现了,轻则内核oops 关机重启就OK了,在特别严重的情况下,可能你的系统

2014-11-14 22:40:03 400

转载 Linux驱动编程 step-by-step (七) 并发 竞态 (信号量与自旋锁)

并发 竞态 (信号量与自旋锁)代码传至并发竞态控制并发进程 导致竞态的一个例子前面所述的字符驱动都是没有考虑并发竟态的情况,想象一下一个进程去读一个字符设备,另一个进程在同一时间向这个设备写入(完全有这种情况)原来设备中存有 A B C D 要想设备写入1 2 3 4 每次读写一个字节t1t2t3t4t5t

2014-11-14 22:39:28 659

转载 SD初始化过程以及Cmd解析

SD:1条CMD线,所有的命令和回应都是通过这条线一位一位的传输.不同模式或不同版本下,命令有不同含义.(SD(SD[0],SD[3:0]),SPI))1条时钟线,时钟源是来自APH总线时钟4条数据线,SPI模式下用了两条(一条输出,一条输入),SD的一位模式下一条(输出输入),也可以用完四条(输出输入,DATA[0]将分时复用). SD卡是以块为单位,初始

2014-11-14 22:37:46 747

转载 信号量、互斥体和自旋锁

一、信号量      信号量又称为信号灯,它是用来协调不同进程间的数据对象的,而最主要的应用是共享内存方式的进程间通信。本质上,信号量是一个计数器,它用来记录对某个资源(如共享内存)的存取状况。一般说来,为了获得共享资源,进程需要执行下列操作:    (1) 测试控制该资源的信号量。    (2) 若此信号量的值为正,则允许进行使用该资源。进程将信号量减1。    (3) 若此

2014-11-14 22:36:04 423

原创 Linux驱动设计之信号量

信号量(semphore)是用于保护临界区

2014-11-14 22:35:21 1518

转载 最全面的linux信号量解析

信号量一.什么是信号量信号量的使用主要是用来保护共享资源,使得资源在一个时刻只有一个进程(线程)所拥有。信号量的值为正的时候,说明它空闲。所测试的线程可以锁定而使用它。若为0,说明它被占用,测试的线程要进入睡眠队列中,等待被唤醒。二.信号量的分类在学习信号量之前,我们必须先知道——Linux提供两种信号量:(1) 内核信号量,由内核控制路径使用(2) 用户态进程

2014-11-14 20:48:20 386

转载 Linux内核引导简析

bootsect.S、setup.S、head.S分析 收藏2010-01-14 13:36:34bootsect.S,系统引导程序,一般不超过512字节。在PC系统结构中,线性地址0xA0000以上,即640K以上用于图形接口卡和BIOS自身,640K以下为系统的基本内存。如果配置更多的内存,则0x100000,即1MB处开始称为高内存。当BIOS引导一个系统时,总是把引导扇区

2014-11-09 11:13:40 581

转载 U-Boot启动过程--详细版的完全分析

目录:一、初识u-boot 31,Bootloader介绍 32,Bootloader的启动方式 3(1)网络启动方式 4(2)磁盘启动方式 4(3)Flash启动方式 43,U-boot的定义 44,u-boot源代码的目录结构 45,U-boot中的地址 5(1)什么是编译地址?什么是运行地址? 5(2)编

2014-11-09 10:50:43 1209

转载 Uboot启动流程分析

Uboot是嵌入式系统中最常用的bootloader,这里我们以s3c2410为例分析一下uboot的启动流程。首先通过uboot的链接文件,我们可以看到uboot运行是执行的第一段代码在start.S中。ENTRY(_start)        SECTIONS        {                . = 0x00000000;        . = AL

2014-11-09 10:41:39 857

转载 Uboot启动全过程

1.1       U-Boot工作过程 U-Boot启动内核的过程可以分为两个阶段,两个阶段的功能如下:       (1)第一阶段的功能?  硬件设备初始化?  加载U-Boot第二阶段代码到RAM空间?  设置好栈?  跳转到第二阶段代码入口       (2)第二阶段的功能?  初始化本阶段使用的硬件设备?  检测系统内存映射?  将内核从Fla

2014-11-09 10:27:20 1025

转载 嵌入式Linux系统中的.lds链接脚本基础

from:http://www.embeddedlinux.org.cn/html/xinshourumen/201203/04-1989.html连接脚本的格式====================连接脚本是文本文件.你写了一系列的命令作为一个连接脚本. 每一个命令是一个带有参数的关键字,或者是一个对符号的赋值. 你可以用分号分隔命令. 空格一般被忽略.文件

2014-11-09 10:11:25 934

转载 uboot 分析之 启动流程

uboot的启动流程:看一幅图:1.第一阶段:start.s的内容:点击(此处)折叠或打开#include @该文件是第二步中mkconfig文件执行时创建的。include/config.h#include #include @在include目录下。/**************************

2014-11-09 10:08:39 846

转载 U-BOOT的目录结构

U-BOOT的目录结构网上采用的u-boot一般是1.1或1.2系列的版本,其目录结构介绍的资料比较多,在新一些的版本中U-boot目录结构做了比较大的改变,比以前的版本更加简洁、合理。下面对比其异同,进行进一步讲解。一、 1.1或1.2等老版本U-boot目录结构u-boot目录下有18个子目录,分别存放管理不通的源程序。这些目录中所要存放的文件有其规则,可以分成

2014-11-09 10:04:32 819

转载 Uboot启动过程详解

u-boot系统启动流程 大多数bootloader都分为stage1和stage2两部分,u-boot也不例外。依赖于CPU体系结构的代码(如设备初始化代码等)通常都放在stage1且可以用汇编语言来实现,而stage2则通常用C语言来实现,这样可以实现复杂的功能,而且有更好的可读性和移植性。  1、Stage1 start.S代码结构 u-boot的stage1代码通常

2014-11-09 10:03:35 799

转载 Bootloader概述

Bootloader概述Bootloader的含义PC机上windows、linux引导过程简介嵌入式Bootloader介绍与分析嵌入式bootloader介绍Bootloader的操作模式Bootloader的安装及启动媒介Bootloader的启动过程Bootloader的通信设备及协议Bootloader:中文解释为启

2014-11-09 10:02:44 695

迪米特法则LoD.zip

迪米特法则LoD.zip

2021-01-10

接口隔离原则ISP.zip

接口隔离原则ISP.zip

2021-01-10

单一原则SRP.zip

单一原则SRP.zip

2021-01-10

开闭原则OCP.zip

开闭原则OCP.zip

2021-01-10

里氏代换原则案例程序LSP.zip

里氏代换原则案例程序LSP.zip

2021-01-10

依赖倒转原则例子程序DIP.zip

依赖倒转原则例子程序DIP.zip

2021-01-10

gimp-master.zip|gimp-master.zip

GIMP对应源代码,里面有很多图像算法,如果想了解其中相关原理,可以参考学习一下,对大家肯定有帮助的

2020-10-17

Altera FPGA应用设计》配套资料

学习FPGA必须看的书,请下载吧,Altera FPGA应用设计》配套资料

2015-08-09

数字信号处理的FPGA实现_第三版中文及英文版

数字信号处理的FPGA实现_第三版中文及英文版,好书

2015-08-09

Linux_device_driver_src

宋宝华的《Linux设备驱动开发详解》第一版的源代码,人民邮电出版社,供有需要的同志使用。

2014-05-08

Linux设备驱动程序第三版(中文版+英文版+配套代.rar)

Linux设备驱动程序第三版(中文版+英文版+配套代)

2014-04-19

MSP430实现无线通信

好资料,大家来看看, ,,,,,,,,,,,,,,,,,,,,,,,,,,呵呵,关于MSP430实现短距离无线通信的

2009-03-24

空空如也

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

TA关注的人

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